android开发艺术探索笔记--第二章IPC(InterProcess Communication)

线程是cpu调度的最小单位;
进程一般指一个执行单元,可以指一个程序或者一个应用。
Android中开启进程很简单,在四大组件中的Androidmanifest中指定android:process属性即可。


2.3.2 Parcelable接口


     Parcelable和Serializable的区别。Serializable是java接口,使用方法简单,但是开销大,序列化和反序列化需要大量的IO操作。parcelable是Android的序列号方式,效率很高,试用期啦稍微麻烦些。


2.3.3 Binder


2.4 Android中的IPC方式:
2.4.1 使用Bundle.
    四大组件中的三大组件(Activity,Service,Receiver)都支持在Intent中传递Bundle数据。Bundle实现了Parcelable接口。问题:A进程进行一个计算,结果要传入B进程,但是结果不支持Bundle.可以在B进程启动一个后台服务,由Service完成计算后再启动进程。


2.4.2使用文件共享:
    序列化和反序列化,SharedPreferences。
    SharedPreferences是Android提供的轻量级存储方案。它通过键值对来存储数据,底层采用xml文件来存储。由于系统对它有一定的缓存策略,当面对高并发的读写访问时,变得不可靠,很大几率丢失数据。


2.4.3 Messenger
    轻量级的IPC(InterProcess Communication)方案。底层实现是AIDL,也即是说Messenger对AIDL做了封装,使得用起来比较简单。由于它一次只处理一个请求,因此在服务端不用考虑线程同步问题。
   Messenger传输的数据必须放入Message中,Message使用的载体有what,arg1,arg2,Bundle,以及replyTo。Message中的另一个字段object在同一个进程中很实用,进程间通信时,Android2.2以前的object字段不支持跨进程传输,即便是2.2以后,也仅仅是系统提供的实现了Parcelable接口的对象才能传输。意味着我们自定义Parcelable对象无法通过object字段来传送。




2.4.4 使用AIDL( Android Interface definition language)


     AIDL可以应付客户端大量并发的请求。还可以跨进程调用服务端的方法。


    1:服务端:首先创建一个Service用来监听客户端的连接请求,然后创建一个AIDL文件,将暴露给客户端的接口在这个AIDL文件中声明,最后在Service中实现这个AIDL接口。
    2:客户端:首先绑定服务端的Service,绑定成功后,将服务端返回的Binder对象转换为AIDL接口所属的类型,接着就可以调用AIDL中的方法了。


     AIDL文件中可以支持的数据类型:
    1:基本数据类型(int,long,char等);
    2:String和CharSequesce;
    3:List:只支持ArrayList,里面的元素必须被AIDL支持。
    4:Map:只支持HashMap;
    5:Parcelable:所有实现了Parcelable接口的对象。
    6:AIDL:所有AIDL接口本身也可以在AIDL文件中使用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值