一、Binder类

1.作用:Binder是客户端与服务器端的通信的媒介(连接各种Manager的桥梁),客户端通过Binder对象获取服务器端提供的数据

(为什么要用Binder来提供数据呢,服务器不能自己传给客户端数据么?)

因为服务器端通过Binder创建接口暴露自身数据,能够防止其他黑客入侵,导致数据被偷走或者篡改,只能让其他用户获取我们想要给他们的数据,不让他们从服务器自己拿数据。

2.在服务器端创建的Binder类,其实是运行在Binder的线程池中,就是说当使用的时候是从线程池中拿取Binder使用的,当多个客户端调用的时候,需要进行线程同步。

二、跨进程使用(实现客户端添加Book对象,服务器端接收对象并打印)

步骤一:创建Book.java类、Book.aidl类、IBookManager.aidl类

详见:Android Studio中如何创建AIDL

步骤二:创建Service并重写IBookManager类

/*BookService类*/

public class BookService extends Service {
private static final String TAG = "BookService"; private List<Book> mBookList; //如何创建在AIDL创建的IBookManager类
@Nullable
private Binder mIBookManager = new IBookManager.Stub(){ @Override
public List<Book> getBooksItem() throws RemoteException {
return mBookList;
} @Override
public void addBook(Book book) throws RemoteException {
Log.d(TAG,"新书加入"+book.toString());
}
}; @Override
public void onCreate() {
super.onCreate();
mBookList = new ArrayList<>();
mBookList.add(new Book(1,"疯狂Android讲义"));
mBookList.add(new Book(2,"Android开发艺术探索"));
} @Override
public IBinder onBind(Intent intent) {
return mIBookManager;
}
}

不要忘了在AndroidManifest.xml中注册

<service android:name=".BookService"
android:process=":Remote">
<!--Service创建新的进程-->
</service>

步骤三:在客户端中启动Service

public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity"; private IBookManager mService;
private List<Book> mBookList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//必须创建ServiceConnection对象,详见Service类的使用
ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//将服务器的Binder转换陈客户端的Binder
mService = IBookManager.Stub.asInterface(service);
try {
//获取所有书籍
mBookList = mService.getBooksItem();
Log.d(TAG,mBookList.get(0).toString());
//加入书籍
mService.addBook(new Book(2,"IOS"));
} catch (RemoteException e) {
e.printStackTrace();
}
} @Override
public void onServiceDisconnected(ComponentName name) { }
};
//启动Service
Intent intent = new Intent(this,BookService.class);
bindService(intent,connection,BIND_AUTO_CREATE);
}
}

未理解的问题:当application结束时候,Service的进程是否也会终止? 与线程的Binder的区别

三、不跨进程使用

详情见:Service(Local Service)简介

四、跨进程与不跨进程原理的区别

跨进程:onBind()获取的是所返回对象的代理

不跨进程:onBind()可以直接获取onBind方法的返回值

Binder的使用(跨进程——AIDL,非跨进程)的更多相关文章

  1. python多进程,进程池,数据共享,进程通信,分布式进程

    一.操作系统中相关进程的知识   Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前 ...

  2. Python 之并发编程之进程中(守护进程(daemon)、锁(Lock)、Semaphore(信号量))

    五:守护进程 正常情况下,主进程默认等待子进程调用结束之后再结束守护进程在主进程所有代码执行完毕之后,自动终止kill -9 进程号 杀死进程.守护进程的语法:进程对象.daemon = True设置 ...

  3. Service官方教程(11)Bound Service示例之2-AIDL 定义跨进程接口并通信

    Android Interface Definition Language (AIDL) 1.In this document Defining an AIDL Interface Create th ...

  4. 不依赖AIDL的跨进程通信

    http://blog.csdn.net/lmj623565791/article/details/38461079 如果知道AIDL和binder的原理,可以简单写一个不依赖AIDL的跨进程通信 不 ...

  5. android 进程间通信 messenger 是什么 binder 跟 aidl 区别 intent 进程间 通讯? android 消息机制 进程间 android 进程间 可以用 handler么 messenger 与 handler 机制 messenger 机制 是不是 就是 handler 机制 或 , 是不是就是 消息机制 android messenge

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha messenger 是什么 binder 跟 aidl 区别 intent 进程间 通讯 ...

  6. {Python之进程} 背景知识 什么是进程 进程调度 并发与并行 同步\异步\阻塞\非阻塞 进程的创建与结束 multiprocess模块 进程池和mutiprocess.Poll

    Python之进程 进程 本节目录 一 背景知识 二 什么是进程 三 进程调度 四 并发与并行 五 同步\异步\阻塞\非阻塞 六 进程的创建与结束 七 multiprocess模块 八 进程池和mut ...

  7. Api之Cors跨域以及其他跨域方式

    Web Api之Cors跨域以及其他跨域方式(三)   我们知道ajax不能跨域访问,但是有时我们确实需要跨域访问获取数据,所以JSONP就此诞生了,其本质使用的是Script标签,除JSONP以外还 ...

  8. SSO单点登录、跨域重定向、跨域设置Cookie、京东单点登录实例分析

    最近在研究SSO单点登录技术,其中有一种就是通过js的跨域设置cookie来达到单点登录目的的,下面就已京东商城为例来解释下跨域设置cookie的过程 涉及的关键知识点: 1.jquery ajax跨 ...

  9. Web Api之Cors跨域以及其他跨域方式(三)

    我们知道ajax不能跨域访问,但是有时我们确实需要跨域访问获取数据,所以JSONP就此诞生了,其本质使用的是Script标签,除JSONP以外还有另外实现跨域方式 一.手动实现JSONP跨域 1.首先 ...

随机推荐

  1. 纯Html+Ajax和JSP两者对比的个人理解

    最近写个人web,用jsp+servlet做,突然想到一个问题:html+ajax似乎和jsp实现效果一样:那么,两者到底有什么区别呢? 这里参考老猿的一段话: 全站ajax会维护大量的js代码,如何 ...

  2. 关于ajax提交的公共接口的一大用处

    在项目框架搭建的时候,就写了ajax提交的公共接口,是想统一的日志和处理ajax返回的错误信息. 今天,却又帮我解决了另外一个问题:每次点开某个页面,有一个ajax请求总是会调用两次,于是打开chro ...

  3. 【Android 错误记录】installation error: INSTALL_PARSE_FAILED_NO_CERTIFICATES 错误

    在运行android应用的时候报出了如题的错误: installation error: INSTALL_PARSE_FAILED_NO_CERTIFICATES 原因之一:在src源文件目录下面,有 ...

  4. Android Fragment(碎片)的使用

    简介 在Android中Fragment为一种可以嵌入活动中的UI片段.能让程序更加合理地利用大屏幕的空间. 使用方法 1.我们首先新建的一个onefragment.xml文件. <?xml v ...

  5. SQL Server 的 6 种隔离级别

    背景知识: 高并发一直以来是数据的所追求的目标,然,一般事物是有两面性的.不多说了,等下变邪教了.下面直接看 并发性最高的隔离级别 read uncommitted 1. read uncommitt ...

  6. 做为一个Java程序员,你需要哪些傍身的技能?

    最近总有些断断续续的思考,想想从我入行以来,我到底学会了什么,做成过什么,以后要做什么,如何提升自己······· 工作3年了,常听人说3年,5年,10年是程序员的坎,每过一个都会有新的想法,新的改变 ...

  7. CURL 宏定义列表

    摘自http://blog.csdn.net/msda/article/details/38047809/ CURL 宏定义列表 列表CURL库一共有17个函数 curl_close:关闭CURL会话 ...

  8. #include <bitset>

    1 none();测试是否有越位 2 reset();全部清零 3 set(7, 0);把第7个字符改成0,操作二进制位 4 to_string();转换为字符串 5 to_ulong();转换为无符 ...

  9. JAVA学习第二十九课(经常使用对象API)- String类

    多线程告一段落,開始经常使用对象API的涉及,背也要背下来!.! 日后开发,遇见最多的对象是文字,也就是字符串 String类 字符串是一个特殊对象 字符串一旦初始化就不能够被改变 一.特点 publ ...

  10. Gartner公布了集成系统的魔力象限 - Nutanix的关键技术是什么?

    读报告,分析报告,写报告.这活儿我不专业.专业的是西瓜哥的这个:http://www.dostor.com/article/2014-06-25/9776476.shtml 再列出个几篇文章供參考: ...