android IPC简介
IPC是Inter-Process Communication的缩写,含义就是进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。
IPC的实现方式
1.使用Bundle ----> 用于android四大组件间的进程间通信
android的四大组件都可使用Bundle传递数据 所以如果要实现四大组件间的进程间通信 完全可以使用Bundle来实现 简单方便
2.使用文件共享 ---->用于单线程读写
这种方式在单线程读写的时候比较好用 如果有多个线程并发读写的话需要限制线程的同步读写
另外 SharePreference是个特例 它底层基于xml实现 但是系统对它的读写会基于缓存,也就是说再多进程模式下就变得不那么可靠了,有很大几率丢失数据
3.使用Messenger ---->用于可存放在message中的数据的传递
使用这个方式可以在不同进程间传递message对象 这是一种轻量级的IPC方案 当传递的对象可以放入message中时 可以考虑用这种方式 但是msg.object最好不要放
因为不一定可以序列化
使用它的步骤如下:
假设这样一个需求 需要在客户端A发送消息给服务端B接受 然后服务端B再回复给客户端A
4.AIDL android 接口定义语言 ---->主要用于调用远程服务的方法的情况 还可以注册接口
使用方法很简单
在服务端定义aidl文件 自动生成java文件 然后在service中实现这个aidl 在onbind中返回这个对象
在客户端把服务端的aidl文件完全复制过来 包名必须完全一致 在onServiceConnected方法 中 把 Ibinder对象 用asInterface方法转化成 aidl对象
然后调用方法即可
5.ContentProvider方式 实现对另一个应用进程开放provider数据的查询
此方法使用起来也比较简单 底层是对Binder的封装 使之可以实现进程间通信 使用方法如下
1. 在需要共享数据的应用进程中建立一个ContentProvider类 重写它的CRUD 和getType方法 在这几个方法中调用对本应用进程数据的调用
然后在AndroidMinifest.xml文件中声明provider
2. 在需要获取共享数据的应用进程中调用getContentResolver().crud方法 即可实现数据的查询
6.Socket方法实现Ipc 这种方式也可以实现 但是不常用
需要权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
这种方式需要一个服务端socket 和一个客户端socket 建立连接后 通过流循环获取消息即可