Android中进程间通信方式(IPC)

来源:互联网 发布:恒指用什么软件看盘 编辑:程序博客网 时间:2024/05/22 06:06

1使用Bundle

Bundle实现了Parcelable接口,可以在不同进程间传递,在Bundle中附加数据,通过intent可以由一个进程的组件启动另一个进程的组件。

2 使用文件

一个进程在文件中写入数据,其他进程再读取(涉及到写操作,线程要同步);或者一个进程把对象序列化到本地,另一个进程把对象反序列化。(进程间通信不适合用SharedPreference,系统对SP的读写有一定的缓存策略,多进程对SharedPreference的读/写,不可靠,容易丢失数据)

3使用ContentProvider

http://www.2cto.com/kf/201606/518621.html

某些系统应用有内置的ContentProvider,比如通讯录、短信记录、联系人、日程表,也可以为自己开发的应用定义ContentProvider供其他应用(进程)访问自身的数据,自定义ContentProvider要继承ContentProvider类并实现6个抽象方法,onCreate()、query()、insert()、delete、update()、getType(),然后在XML文件中注册,authority属性是ContentProvider的唯一标识;在其他进程中通过ContentResolver的query()、insert()、delete、update()可以获取ContentProvider中的数据,调用ContentResolver的增删改查四个方法,实际上是调用的ContentProvider中的四个方法(这四个方法由Binder线程池中的线程执行,运行在ContentProvider所在的进程中,onCreate()在主线程中执行),通过ContentProvider实现四个操作。ContentProvider底层的数据存储可以采用任何方式,用sqlite数据库也行,文件也行,甚至内存中的对象(如list、set集合)存储也行(常用数据库存储)。ContentProvider默认运行在app进程中,除非设置了process属性。ContentProvider可以设置读写权限,android:readPermission、android:writePermission,如果ContentProvider设置了读写权限,其他应用需要声明同样的权限才能进行读/写操作,否则其他应用会异常终止。ContentProvider的增删改查四个方法可能存在多线程并发访问,所以方法内部要做好线程同步。

4使用Messenger(Messenger对AIDL做了封装)

发送方和接收方要构建Handler,并通过handler构建Messenger,发送方通过messenger.send(message)发送message给接收方,接收方的handler收到消息后在handleMessage中处理消息,接收方通过message的replyTo参数可以拿到发送方的messenger对象,通过这个messenger对象接收方可以给发送方发送message,这样就实现了互相通信。

5使用socket

      当Service启动时,开启子线程建立TCP连接,通过ServerSocket在某个端口监听,等待客户端的请求,当有客户端连接时,会生成一个新的socket,通过每次创建的socket和不同的客户端通信,通过socket的输入流可以得到客户端写入的数据。客户端activity启动时也开启一个子线程,在子线程中通过Socket建立TCP连接,通过socket的输出流可以向服务端写入数据。

6使用AIDL文件


0 0
原创粉丝点击