Android中的IPC方式
来源:互联网 发布:合肥软件开发 编辑:程序博客网 时间:2024/05/16 11:13
首先仍然是关于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 中的IPC方式
- Android中的IPC方式
- Android中的IPC方式
- Android中的IPC方式
- Android中的IPC方式
- Android中的IPC方式
- Android中的IPC方式
- Android中的IPC方式
- Android中的IPC方式
- Android 中的 IPC方式
- Android中的IPC方式AIDL
- Android-IPC之三 Android中的IPC方式
- IPC机制---04 Android中的IPC通讯方式(A)
- IPC机制---04 Android中的IPC通讯方式(B)
- IPC机制---04 Android中的IPC通讯方式(C)
- IPC机制---04 Android中的IPC通讯方式(D)
- IPC机制---04 Android中的IPC通讯方式(E)
- IPC机制系列之三 Android中的IPC方式
- View绘制流程(2)----绘制过程及事件冲突
- hive2.0.0安装
- 根据经纬度 计算 出geohash 值 。
- Android高仿path小球刷新效果,类似iOS果冻效果
- Clang和LLVM学习(Day2)
- Android中的IPC方式
- 接口测试
- Android 反编译apk
- poj1185 炮兵阵地(状态压缩dp)
- LRU缓存实现(Java)
- MAC OS下maven环境变量配置
- C 语言 实现大数相乘问题(包括正、负整数,另外还附有详细注释)
- php连接sqlserver的方法
- Maven父子项目打包子项目出现Failed to collect dependencies问题