startservice bindservice的区别
来源:互联网 发布:淘宝福袋衣服是洋垃圾 编辑:程序博客网 时间:2024/05/22 03:39
1、生命周期上的区别
执行startService时,Service会经历onCreate->onStartCommand。当执行stopService时,直接调用onDestroy方法。调用者如果没有stopService,Service会一直在后台运行,下次调用者再起来仍然可以stopService。
执行bindService时,Service会经历onCreate->onBind。这个时候调用者和Service绑定在一起。调用者调用unbindService方法或者调用者Context不存在了(如Activity被finish了),Service就会调用onUnbind->onDestroy。这里所谓的绑定在一起就是说两者共存亡了。
多次调用startService,该Service只能被创建一次,即该Service的onCreate方法只会被调用一次。但是每次调用startService,onStartCommand方法都会被调用。Service的onStart方法在API 5时被废弃,替代它的是onStartCommand方法。
第一次执行bindService时,onCreate和onBind方法会被调用,但是多次执行bindService时,onCreate和onBind方法并不会被多次调用,即并不会多次创建服务和绑定服务。
2、调用者如何获取绑定后的Service的方法
onBind回调方法将返回给客户端一个IBinder接口实例,IBinder允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。我们需要IBinder对象返回具体的Service对象才能操作,所以说具体的Service对象必须首先实现Binder对象。
3、既使用startService又使用bindService的情况
如果一个Service又被启动又被绑定,则该Service会一直在后台运行。首先不管如何调用,onCreate始终只会调用一次。对应startService调用多少次,Service的onStart方法便会调用多少次。Service的终止,需要unbindService和stopService同时调用才行。不管startService与bindService的调用顺序,如果先调用unbindService,此时服务不会自动终止,再调用stopService之后,服务才会终止;如果先调用stopService,此时服务也不会终止,而再调用unbindService或者之前调用bindService的Context不存在了(如Activity被finish的时候)之后,服务才会自动停止。
那么,什么情况下既使用startService,又使用bindService呢?
如果你只是想要启动一个后台服务长期进行某项任务,那么使用startService便可以了。如果你还想要与正在运行的Service取得联系,那么有两种方法:一种是使用broadcast,另一种是使用bindService。前者的缺点是如果交流较为频繁,容易造成性能上的问题,而后者则没有这些问题。因此,这种情况就需要startService和bindService一起使用了。
另外,如果你的服务只是公开一个远程接口,供连接上的客户端(Android的Service是C/S架构)远程调用执行方法,这个时候你可以不让服务一开始就运行,而只是bindService,这样在第一次bindService的时候才会创建服务的实例运行它,这会节约很多系统资源,特别是如果你的服务是远程服务,那么效果会越明显(当然在Servcie创建的是偶会花去一定时间,这点需要注意)。
- startservice bindservice的区别
- startService 和 bindService的区别
- startService 和 bindService的区别
- startService与bindService的区别
- startservice和bindservice的区别
- startService和bindService的区别
- startService与bindService的区别
- startService和bindService的区别
- startService 与 bindService的区别
- startService与bindService的区别
- startService与bindService的区别
- startService与bindService的区别
- startService与bindService的区别
- Android startservice & bindservice的区别
- startService和bindService的区别
- startService与bindService的区别
- startService与bindService的区别
- startService与bindService的区别
- 第五天
- [Android] 利用Java反射机制快速定位跳转二级页面
- 简单讲RMQ->ST算法
- <context:component-scan>使用说明
- Mysql的外键约束(CASCADE,RESTRICT,NO ACTION)
- startservice bindservice的区别
- 七天分金块问题
- Android 简单图片浏览器
- 可扩展标记语言XML(Extensible Markup Language)
- C#全局键盘监听(Hook)的使用
- 爬虫第三弹——利用EditThisCookie获取cookie跳过登陆验证(医脉通)
- 欧拉线性筛求质数
- caffe cnn提取各层特征并可视化结果(Python接口)
- [Contests]2016弱校联盟十一专场10.7