Android Binder线程

来源:互联网 发布:js中valueof 编辑:程序博客网 时间:2024/06/06 23:51

调用IPC时,服务代码在哪里运行呢?


1.从本地进程调用(和Service在一个进程)

从哪个线程调用 在那个线程执行。所以从main线程调用要注意阻塞问题。

但这种情况你不应该使用AIDL,没有必要,直接使用实现IBinder的对象就行了。


2.从外部进程调用

在Service进程的Binder进程池中调用(测试下是调用的Binder_1)。因此多个客户端调用,就会存在线程安全问题,所以要保持 Binder调用的代码的线程安全。

如果不想处理多线程问题,可以使用Messager

PS:binder线程池在应用进程创建时创造,通过RuntimeInit.nativeZygoteInit


3.oneway关键字

默认跨进程调用Binder 客户端线程会被阻塞,如果客户端不在乎返回结果,调用后想立即返回,可以给方法加上oneway关键字。


原创粉丝点击