Android进程间通信(IPC)

如何设置多进程

AndroidManifest.xml中配置android:process=":remote"
(1)android:process=":remote"表示在应用程序里,会自动创建新的进程;
(2)android:process="remote"则创建全局进程,不同的应用程序共享该进程。

常见的进程间通信方式

Bundle通过Intent传递数据,文件共享,ContentProvider,基于Binder的AIDL,Messenger,Socket。

一、Activity

通过Intent跨进程启动其他进程页面,并通过Bundle传值。

Intent intent = getPackageManger().getLaunchIntentForPackage("包名");

二、Content Provider

Android应用程序可以使用文件或SqlLite数据库来存储数据。Content Provider提供了一种在多个应用程序之间数据共享的方式(跨进程共享数据)。应用程序可以利用Content Provider完成增删改查的工作。

三、Broadcast

广播是一种被动跨进程通讯的方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。

四、Service

(一)AIDL

AIDL采用C/S架构,分为服务端和客户端。

服务端
服务端就是你要连接的进程。他提供给客户端一个Service,在这个Service中监听客户端的连接请求,然后创建一个AIDL接口文件,里面是将要实现的方法,注意这个方法是暴露给客户端的。最后在Service中实现这个AIDL接口即可(这里是接口的具体实现)。服务端的职责是提供连接和自身。

客户端
客户端首先需要绑定服务端的Service,绑定成功后,将服务端返回的Binder对象转换成AIDL接口所属的类型,最后调用AIDL的方法就可以了。客户端负责连接和调用。

AIDL支持的数据类型有

  1. 基本数据类型(int、long、char、boolean、double、float、byte、short)
  2. String和CharSequence
  3. List:只支持ArrayList,并且里面的每个元素必须被AIDL支持
  4. Map:只支持HashMap, 同样的,里面的元素都必须被AIDL支持,包括key和value
  5. Parcelable:所有实现了Parcelable接口的对象
  6. AIDL:所有的AIDL接口本身也可以在AIDL 文件中使用

(二)Messenger

Messenger本质也是AIDL,只是进行了封装。
Messenger处理Client端的请求是单线程的,而AIDL是多线程的。
Client的方法,使用AIDL获取返回值是同步的,而Messenger是异步的。

(三)Socket

https://blog.csdn.net/hzw2017/article/details/81210979

    原文作者:寒_蝉
    原文地址: https://www.jianshu.com/p/51b07bb9a171
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞