如何设置多进程

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

更多相关文章

  1. 基于Paho Android(安卓)Service 实现MQTT协议通信Android客户端
  2. Android中关于cpu/cpuset/schedtune的应用
  3. Android(安卓)内存相关 onTrimMemory,onLowMemory,MemoryInfo()
  4. Android的内存管理机制
  5. Activity的属性
  6. Binder 与AIDL
  7. Android中使用代码执行shell命令
  8. android客户端程序访问服务器端webservice,几篇不错的文章!
  9. Android(安卓)内存分析命令

随机推荐

  1. Android(安卓)自定义实现日历控件
  2. Xamarin Android开发实战(上册)大学霸内部
  3. Android(安卓)studio 新建 java类 不见了
  4. android实现为PreferenceScreen设置背景
  5. Android(安卓)Support Annotation的使用
  6. Android软键盘监听KeyboardWatcher
  7. [android]MonkeyRunner-andrec实现思路
  8. 巧用android setTag()
  9. 获得android手机的联网状态
  10. [android] Activity 的生命周期 以及横屏