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

1. 服务类型比较

Android中程序与Service交互的方式(三)-总结_第1张图片

表1.1

2. 五种交互方式比较

Android中程序与Service交互的方式(三)-总结_第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 丢失了),就相当於已经解除绑定了。

更多相关文章

  1. Android 数据库对比
  2. 20、从头学Android之Android的数据存储--File
  3. Android 开发艺术探索笔记-Activity启动方式
  4. android 自定义AlertDialog 与Activity相互传递数据
  5. android XML解析方式
  6. android中如何判断edittext中数据为空?
  7. Android之怎么使用SQLite数据库(增、删、改、查、分页等)以及Lis
  8. Android--创建和使用数据库详细指南

随机推荐

  1. Android一键锁屏开发全过程【源码】【附
  2. android backgroud alpha
  3. 2010.12.26——— android 获得手机号码
  4. Android加速度传感器数值的过滤
  5. Android 之 setTextColor 写法
  6. android DisplayMetrics学习
  7. Android 中处理POWER/HOME流程
  8. 如何解决android NDK r8c 老是重新编译源
  9. C#开发android应用实战 源码
  10. android中The connection to adb is down