其实真的搞清楚了安卓四大组件的应用场景了吗

其实经历这么多年来的安卓方面的开发,最后的感觉是,它太自由了,要实现一件事,可用的方式太多了。四大组件中除了Activity需要用来UI交互,这个无可厚非,如果说到进程间的通讯,方式可多了。

举个例子:我想在APP之间同步一些状态或数据,你觉得用什么方式合适? 

1、广播;

2、Messenger;

3、AIDL;

4、ContentProvider;

甚至还可以用SharedPreference(虽然这个跨进程共享方式已经被安卓废弃);

1、刚开始接触安卓,就觉得广播最好用了,简单的很,一两句话就把数据发出去了,简单粗暴,但其实在以上4个方式中,广播是对系统开销最大的一个。只能适用于场景:尽量少发,避免频繁,这个消息需要多方知道,而且不需要关心谁先收到,甚至不关心谁没有收到(那是你接收方的事)。

第2第3、Messenger和AIDL效率相差不多,跨进程偶合度最低,都是基于Binder通讯,Messenger是单线程处理消息队列的,只能异步返回,AIDL则是多线程处理事务的,但它是同步返回的(调用者会等到它返回结果),在实现接口里需要注意处理多线程安全方面。如果需要有长时间实时性的数据传输,当然推荐AIDL去自己实现接口了,如果是频繁的一些事件消息,就推荐使用Messenger,比AIDL方便嘛。

4、ContentProvider也是很方便,它也是基于Binder通讯,但它并不像AIDL来的那么直接,而且通过system server的ContentProvider管理服务去绕了一圈,一次query的流程开销比service AIDL调用开销大多了,最近做项目,就发现,有的地方需要频繁query一个内存中的int变量(共享的状态变量),一次query就要花掉几百ms,相当可怕,这情况就最好避免用ContentProvider了,我理解ContentProvider仅适用于不需要频繁获取的数据共享。我说它方便,是因为它本身就有数据变化通知的功能,就不需要自己操心去回调通知了。

以上说的aidl 和messager的方式耦合度低,其实有没有想过,还有个方式耦合度更低的,那就是system service,如果做过安卓系统层的开发,需要开发个一直运行于系统中的deamon,那么以system service的方式是最妥了。因为最理想的是,永远也不担心被系统回收掉。

以上总结,只是粗略讲述,网络上这些组件的技术细节相关的文章也很多,但并没有对这些通讯方式的对比介绍,更没有通讯效率方面的实际对比,其实我也没有做过全面测试对比,仅凭经验结论,大家有更详细的见解的,欢迎留言讨论。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值