前文:Android中程序与Service交互的方式——综述

Android中程序与Service交互的方式——交互方式

以上两篇文章分别介绍了与Service的五种交互方式,本文主要作为一个补充和总结。

1. 服务类型比较

表1.1

2. 五种交互方式比较

表2.1

通过表1.1和表2.1我们可以知道:

(1) 跨进程通信

只有Broadcast、Messenger、AIDL这三种方式支持跨进程通信,也就是Server可以运行在独立的进程中并与之通信。

(2) 易用性

通过对比之后发现Broadcast、SharedPreferences、Interface这三种方法使用起来比较方便,也较容易掌握,而Messenger和AIDL使用起来稍微繁琐一些,特别是AIDL。

(3) 执行效率

因為是模拟下载以及数据交换量较小,因此对於执行效率来说影响不大。但如果数据量较大,那么Messenger、Interface以及AIDL的执行效率较高,而Broadcast和SharedPreferences的效率相对较低。系统会优先处理系统的Broadcast,如果此时正好发出我们的Broadcast,那麼接收会有延迟。对於SharedPreferences来说,文件操作如果涉及道德数据吞吐量较大,那麼延迟会较高,稳定性也狠难得到保证。

(4) 可扩展性

对于Broadcast和SharedPreferences因为执行效率的原因,如果再加上扩展(比如传递大量数据),这两种方法就会捉襟见肘。同时在BroadcastReceiver中的onReceive方法中不能处理长耗时事件,否则会出现ANR错误。同样的,对于SharedPreferences方法,如果有大量的数据需要写入文件的话,那么也会耗时,同样存在操作风险。因为Messenger、Interface以及AIDL可以直接添加相应的处理方法来扩展,因此扩展性较高。

3. 注意事项

3.1 如果采用bindService()方法启动Server端的话,需要通过ServiceConnection()方法来获取Server端返回的binder对象。

3.2 在调用 bindService 绑定到Service的时候,应当保证在处理完成之后调用unbindService解除绑定(尽管 Activity 被 finish 的时候绑定会自动解除,并且Service会自动停止)。

3.3 使用startService启动服务之后,一定要使用stopService停止服务,不管是否使用bindService。

3.4 同时使用 startService 与 bindService 时要注意,Service 的终止,需要unbindService与stopService同时调用才能终止 Service。如果先调用 unbindService 此时服务不会自动终止,再调用stopService之后服务才会停止;如果先调用 stopService 此时服务也不会终止,而在调用 unbindService或者之前调用 bindService的Context不存在了(如Activity 被 finish 的时候)之后服务才会停止。

3.5 当设备屏幕在“横”“竖”切换时,此时因为Activity会重新创建,因此旋转之前的使用bindService 建立的连接便会断开(Context 丢失了),就相当於已经解除绑定了。


以上就是全文关于——与Service交互方法的简介,如有欠妥指出还恳请各位朋友帮忙指正,谢谢…… :D

更多相关文章

  1. Android(安卓)js交互 与 Html启动App
  2. Android中Bundle的使用示例
  3. 精通android体系架构、mvc、常见的设计模式、控制反转(ioc)
  4. Android(安卓)RTC 自下而上分析
  5. 如何使用android sdk开发应用
  6. Android系统服务 WMS与AMS简单理解
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. Python十题(第2课)
  2. 流畅python学习笔记:第十二章:子类化内置类
  3. Pandas concat:ValueError:传递值的形状为b
  4. Python中类的使用(5私有属性)
  5. 求助:Python是否可以用一行代码来同时给变
  6. 【Python】torrentParser1.04 增加获得磁
  7. Python常用模块-摘要算法(hashlib)
  8. python魔法方法、构造函数、序列与映射、
  9. pycharm + python36 + opencv + opencv_c
  10. 用户输入从.csv文件生成新列表?