android读书复习笔记一 IPC

IPC:inter-Process comununication

Android中使用多进程的方法: 给四大组件在AndroidManifest中制定android:process属性,除此无他法。其实还有一个非常规方法,在JNI中的native层fork一个新进程。


进程信息查看:可在DDMS中,或者在shell中使用命令:adb shell ps  或者 adb shell ps | grep *packagename*


多进程会导致的问题:1、静态成员和单例模式完全失效

2、线程同步机制完全失效

3、SharedPreferences的可靠性下降。SP不支持多进程同事执行写操作,会导致一定几率的数据丢失。

4、application会多次创建

序列化:  serializable接口,其中的serialVersionUID如果不声明,反序列化时候会有影响。其工作机制:序列化时候系统会把当前类的serialVersionUID序列化的文件中,反序列化时候会去检测seriaVersionUID,判断是否和当前类一直,如果一致表明版本相同,可以成功反序列化,否则表明当前类和序列化额类发生了某些变换,比如成员的数量类型发生了改变,这时候无法正常反序列化。

序列化后,即可以用ObjectOutputStream和ObjectInputStream来实现读入写入。

Parcelable接口; 实现此接口,就可以序列化病通过Intent和Binder传递数据。Intent,Bundle和Bintmap,都是可序列化的。相比serialable的开销大和大量I/O操作,Parcealbe效率高但是使用稍微麻烦。主要用在内存序列化上。


Binder: 实现了IBinder接口的类,android的跨进程方式,还可以理解为一虚拟的物理设备,其设备驱动是/dev/binder。从Framework角度说是ServiceManager链接各种Manager和ManagerService的桥梁

当客户端发起远程请求,由于当前线程会被挂起纸质服务端进程返回数据,所以远程方法不能放在UI线程中发起请求;其次由于服务端BInder方法运行在Binder线程池中,则Binder方法不管是否好事都应该用同步方式,因为它已经运行在一个线程中了


*其他IPC方式:①contentProvider,

    ②Socket,

   ③共享文件(用于对数据同步要求不高的场合,sp方式因为系统对sp文件哟䘺缓存策略,多进程方式下其读写不可靠)

   ④Messenger:Messenger进行数据传递必须将数据放入Message中,都实现了Parcealbe接口,可以跨进程传输。Messenge能使用额载体只有

what、arg1、arg2、Bundle以及replyTo,另一字段object在2.2以后可以传输系统提供的实现了Parcealbe接口的对象。自定义的paecealbe

对象是无法通过object字段来传输的



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值