IPC for Android 系列:
1、本文IPC for Android
2、Serializable、Parcelable、Binder的使用、理解
3、IPC bindService传递Messenger
4、结合PMS源码讲解AIDLPackageManagerService服务框架

IPC:Inter-Process Communication,进程间通信

一、Android中的多进程

1、多进程

一个进程可包涵一个或多个线程,例如主线程(UI线程),单独开启的线程(如:为网络操作单开线程)
一个应用可以是一个进程或多个进程。一个app开启多进程方法有两种
1、通过JNI在native层去fork一个新的进程(非常规方法,不讨论)
2、给四大组件的AndroidManifest中添加android:process属性

2、进程名称 (假设包名com.yink.ipc)

未声明process属性,进程名默认为包名“com.yink.ipc”
android:process=“:test”,进程名为“com.yink.ipc:test”,
android:process=“com.yink.ipc.other”,进程名为“com.yink.ipc.other”
以“:”的进程为私有进程,其他应用不可和它跑在同一进程中
另外两个进程为属于全局进程,其他应用可通过ShareUID方式跑在同一进程。

3、一个应用多进程注意事项

1、Sharepreference不支持并发读写(同时读,同时写),所以多进程操作SharePreference数据可靠性降低
2、每个进程创建时会分配独立的虚拟机,等于创建了一个新的aplication。
e.g:
public static int i = 1;
进程A操作i++,进程B的i还是等于1。等于是AB进程分别会创建一个自己的i对象
其它同理,如线程上锁解锁,单例模式等

二 IPC在Android中的几种实现

进程之间通信的时候,通常可以是数据,类,服务等;

1、RPC & IDL & AIDL

这三个概念是为了理解进程间如何提供服务(读者可先理解为一个进程向其他进程提供某个方法,方便理解)
RPC:Remote Procedure Call,远程过程调用
IDL:Interface Definition Language,接口定义语言
AIDL:Android Interface Definition Language,AIDL服务(跨进程访服务)
Android系统进程之间不能共享内存,为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(RPC)方式来实现
Android为了实现RPC,使用IDL(接口定义语言)来公开服务的接口,公开后就可跨进程访问。这种跨进程访问的服务就叫AIDL服务。

2、IPC

Android中的IPC主要有这几种:
Bundle、文件共享、AIDL、Messenger、ContentProvider、Socket

以下将对每个作简要说明:

2.1、Bundle

Bundle,三大组件Acitvity,Service,BroadcastReceiver都支持在Intent中传数据。只能传Bundle支持的数据

2.2、文件共享

两个进程通过读写同一个文件来实现数据共享。linux并发读写不限制,所以这种方式有一定的局限性。并发读写可能导致数据不同步,或者数据丢失等情况。一般用于对数据同步要求不高的进程之间通信

2.3、Messenger信使

轻量级IPC方案,底层实现是AIDL。一次处理一个请求,低并发一对多通信,不支持RPC。主要作用是传递消息。Messenger的本质是AIDL,Android做了一个封装方便使用。

2.3、AIDL

功能强大,支持一对多并发通信,支持RPC,支持实时通信,使用稍复杂,需要处理好线程同步问题。

2.4、ContentProvider

四大组件之一,Android提供专门用于不同应用间进行数据共享。Android封装,一对多进程进行数据共享。一对多并发需求

2.5、Socket

Socket,套接字,通过网络传输字节流,支持一对多并发实时通信,实现细节稍微繁琐,不支持直接的RPC

结束语

本文主要对IPC的概念,IPC在Android中是如何应用以及它的几种实现方式。
后续文章我会正对这几种通信方法进行详细的总结并结合demo说明。并标识在文章最前,欢迎订阅。

更多相关文章

  1. android应用程序跳转到系统的各个设置页面和通过Intent action
  2. android sqlite数据库 删除数据 where多条件删除数据
  3. android sqlite 操作 说明 记录
  4. Android(安卓)滚动事件 OnScrollListener
  5. android系统部分广播
  6. Android(java):database disk image is malformed (code 11)
  7. Android(安卓)Studio无线调试app之Android(安卓)WiFi ADB
  8. android链接rest services
  9. : Failed to read row 0, column -1 from a CursorWindow which

随机推荐

  1. 【Android】wifi开发
  2. Android实现程序前后台切换效果(类似QQ后
  3. Android线程阻塞处理及优化
  4. 【Android系统源码修改】在系统设置中添
  5. Android(安卓)UI设计的FrameLayout与Tabl
  6. 高德天气应用开发之二:android 高德天气AP
  7. Mono For Android离线激活
  8. Android自定义背景的设置方法
  9. Android用户界面 UI组件--AdapterView及
  10. Android日志(Log类)