前文:Android 中 Service 学习--与组件的通讯5法
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 丢失了),就相当於已经解除绑定了。

更多相关文章

  1. Android(安卓)解决65535的限制 使用android-support-multidex解
  2. 在android用Google Geocoding API服务解析地址(关键词:android/GP
  3. 翻译Android(安卓)USB HOST API
  4. Android菜单详解
  5. [转]Jollen 的 Android(安卓)教學,#4: 使用 XML 安排 UI
  6. Android(安卓)中Ninja 简介
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. Android(安卓)获得图片并解码成缩略图以
  2. Android(安卓)属性动画(Property Animati
  3. android 虚拟键盘遮挡布局 顶起布局
  4. Asynchronous HTTP Requests in Android(
  5. android UI线程向子线程发送Message
  6. Android(安卓)Scroller、VelocityTracker
  7. Android(安卓)Studio插件整理
  8. android的休眠和唤醒流程
  9. 解决TextView中MaxLines与ellipsize=end
  10. 打包下载Android源码