Android中的IPC方式
2016-04-12 21:20
393 查看
首先仍然是关于Binder的
Binder中有俩很重要的方法linkToDeath和unlinkToDeath.通过linkToDeath我们可以额给Binder设置一个死亡代理,当Binder挂掉时,我们就会接到通知,此时我们可以重新发起链接请求从而恢复链接。首先:声明一个DeathRecipient对像
mDeathRecipient = new DeathRecipient() { @Override public void binderDied() { if (mBookManager ==null) return; mBookManager.asBinder().unlinkToDeath(mDeathRecipient, 0); mBookManager=null; //重新绑定远程Service } };
绑定成功后给binder设置死亡代理
mService = IMessageBoxManager.Stub.asInterface(binder); binder.linkToDeath(mDeathRecipient,0);
齐活~
大概清楚了序列化和Binder后 开始了解跨进程通信。
1. 使用Bundle:
由于Bundle实现了Parcelable接口,所以他可以方便的在不同的进程间传输,当我们在一个进程中启动了另一个进程的Activity、Service和Receiver,我们就可以在Bundle中附加各种信息然后通过Intent发送。
有一种特殊场景:
A进程在进行一个计算,计算完后启动B进程的一个组件并把计算结果 传递给B,如果这个计算结果不支持放入Bundle中,因此无法通过Intent来传输,此时可以考虑如下方式:通过Intent启动B的一个Service组件,让Service在后台进行运算,计算完毕启动B中的目标组件。齐活~
2. 使用文件共享
两个进程通过读/写同一个文件来交换数据。这种方式对于文件格式没有具体的要求,可以是文本文件,也可以是XML文件,只要读/写双方约定数据格式即可。这种方式也是有局限性的,比如说并发读/写问题。如果并发读/写,那么有可能读出的内容不是最新的,如果并发写问题会很严重,所以要尽量避免并发写这种情况或者考虑使用线程同步来限制多个线程的写操作。(不建议在进程间通信中使用SharedPreferences)
3.使用Messenger
我们可以通过Messenger在不同进程中传递Message对像,在Message中放入我们需要传递的数据。Messenger是一种轻量级的IPC方案,他的底层实现是AIDL。实现一个Messenger有如下几个步骤,分别为服务端和客户端:
服务端
创建一个Service处理客户端的连接请求,创建一个Handler并通过Handler创建一个Messenger对像,然后再Service的onBind中返回这个Messenger对像底层的Binder即可。
客户端
首先绑定服务端的Service,用服务器返回的IBinder对像创建一个Messenger,通过Messenger就可以向服务器发送消息了,发送消息类型为Message对像。
相关文章推荐
- Android 反编译apk
- Android高仿path小球刷新效果,类似iOS果冻效果
- android NDK编程:使用posix多线程与mutex相互排斥同步
- Android Studio添加工程为library
- Android View事件机制 21问21答
- 学习android第六天
- Android:Fragment 与 ViewPager的配合使用
- android 中margin,padding,border的区别
- Android学习(17) -- 访问权限 简介
- 使用vs2010查看android原生代码
- Atitit。Js调用后台语言 java c# php swing android swt的方法大总结
- Atitit。Js调用后台语言 java c# php swing android swt的方法大总结
- Android多媒体详解
- android实战项目二实现画板效果
- android中自定义组合组件(二)
- android手机安全:被攻陷的一个场景
- android实践项目一实现简单的验证码和spinner下拉选项效果
- sdk里面文件的含义和配置android studio
- Android应用开发中如何进行单元测试
- Android Runtime(ART)编译过程与所谓suspend-points