Android 总结5-IPC

Posted by Jfson on 2019-01-20

IPC

  • Android 的进程间通信就是 Binder.

Android 中一个应用中的多进程: android:process 属性,给四大组件在AndroidMenifest中指定process即可。一般不这么干,在push中使用较多。

多进程带来很多问题:

a.静态成员和单例模式完全失效

b.线程同步失效

c.SharedPreferences失效:不支持多进程同时执行写操作

d.Application会多次创建

Serializable : 最好设置serialVersionUID,否则变更成员变量后,其默认的UID会变,版本迭代中而产生bug。

使用简单,性能稳定,开销大,大量的I/O操作

Parcelable:在Binder中传输。使用效率高,相比而言稳定差一点。

  • 其他IPC,大多底层都是Binder

a.使用Bundle, 启动新的Activity时,用Bundle

b.使用文件共享

c.使用Messenger(信使),其实就是AIDL

d.AIDL

e.使用ContentProvider

c.使用socket

Binder

image

  • 1.client通过获得一个server的代理接口,对server进行调用。
  • 2.代理接口中定义的方法与server中定义的方法时一一对应的。
  • 3.client调用某个代理接口中的方法时,代理接口的方法会将client传递的参数打包成Parcel对象。
  • 4.代理接口将Parcel发送给内核中的binder driver。
  • 5.server会读取binder driver中的请求数据,如果是发送给自己的,解包Parcel对象,处理并将结果返回。
  • 6.整个的调用过程是一个同步过程,在server处理的时候,client会block住。因此client调用过程不应在主线程。

image


pv UV: