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

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

以上两篇文章分别介绍了与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 丢失了),就相当於已经解除绑定了。


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

更多相关文章

  1. Android线程优先级设置方法
  2. 【Android】设置tabhost位于底部的三种方法
  3. Android中常用的五种布局方式:FrameLayout
  4. Mars Android视频学习笔记——01_16_SQLite使用方法
  5. Android 按钮点击事件监听的3重方式
  6. Android 总结:进阶之路(资源与方法)
  7. Android 关闭所有Activity完全退出程序方法
  8. android 图文列表的实现方法
  9. 使用universal-image-loader中出现的EOFException解决方法

随机推荐

  1. android之android studio的NDK环境搭建
  2. android sqlite 增删查 demo
  3. android getApplicationContext()与activ
  4. Android中HandlerThread的使用
  5. Flashing your Android(安卓)Dev Phone w
  6. Android两个recyview直接的item拖动
  7. mac 下卸载android studio
  8. Android(安卓)判断是否为Wifi网络
  9. Android懒人库
  10. Android根据包名清理App数据