Android 中 Service 学习,总结
2012-09-29 15:11
316 查看
前文: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 丢失了),就相当於已经解除绑定了。
中 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 丢失了),就相当於已经解除绑定了。
相关文章推荐
- android之Service组件学习总结-IntentService(二)
- 【Android学习系列】Android- Service总结
- android 四大组件之service学习总结(二)
- Android Service学习心得总结
- Android service学习总结和利用service实现的后台音乐播放功能
- Android学习总结——Service组件
- Android Service 学习总结 1
- Android Activity与远程Service的通信学习总结
- Android学习总结(三)——IntentService的用法
- Android学习总结(四)—— Activity和 Service进行通信
- Android Service学习总结(上)
- Android Service学习总结(下)
- Android学习总结(二)——Service基本概念和生命周期
- android service学习总结
- android5.1 AlarmManagerService的学习总结(未完)
- Android Activity与远程Service的通信学习总结
- gps和android service和pseudo terminal学习总结
- Android Service的学习和总结
- Android之Service学习总结
- android 四大组件之service学习总结(一)