startService和bindService的区别
首先看下其生命周期的区别:
生命周期: onCreate → startCommand → onDestroy
onCreate → onBind→onUnBind→ onDestroy
静态绑定对应着startService
;动态绑定对应着bindService
,静态有自己独立的生命周期,动态会依附activity
等组件的生命周期。
1、生命周期上的区别
执行
startService
时,Service
会经历onCreate->onStartCommand
。当执行stopService
时,直接调用onDestroy
方法。调用者如果没有stopService
,Service
会一直在后台运行,下次调用者再起来仍然可以stopService
。执行
bindService
时,Service
会经历onCreate->onBind
。这个时候调用者和Service
绑定在一起。调用者调用unbindService
方法或者调用者Context
不存在了(如Activity
被finish
了),Service
就会调用onUnbind->onDestroy
。这里所谓的绑定在一起就是说两者共存亡了。
注意:Service
的onCreate
的方法只会被调用一次,
就是你无论多少次的startService
又 bindService
,Service
只被创建一次。
如果先是bind
了,那么start
的时候就直接运行Service
的onStartCommand
方法,
如果先是start
,那么bind
的时候就直接运行onBind
方法。如果你先bind
上了,就stop
不掉了,只能先UnbindService
, 再StopService,
所以是先start
还是先bind
行为是有区别的。
2、调用者如何获取绑定后的Service的方法
onBind
回调方法将返回给客户端一个IBinder
接口实例,IBinder
允许客户端回调服务的方法,比如得到Service
运行的状态或其他操作。我们需要IBinder
对象返回具体的Service
对象才能操作,所以说具体的Service
对象必须首先实现Binder
对象。
3、既使用startService又使用bindService的情况
那么,什么情况下既使用startService,又使用bindService呢?
如果你只是想要启动一个后台服务长期进行某项任务,那么使用startService便可以了。如果你还想要与正在运行的Service取得联系,那么有两种方法:一种是使用broadcast,另一种是使用bindService。前者的缺点是如果交流较为频繁,容易造成性能上的问题,而后者则没有这些问题。因此,这种情况就需要startService和bindService一起使用了。
另外,如果你的服务只是公开一个远程接口,供连接上的客户端(Android的Service是C/S架构)远程调用执行方法,这个时候你可以不让服务一开始就运行,而只是bindService,这样在第一次bindService的时候才会创建服务的实例运行它,这会节约很多系统资源,特别是如果你的服务是远程服务,那么效果会越明显(当然在Servcie创建的是偶会花去一定时间,这点需要注意)。
Thanks
- https://www.cnblogs.com/sesexxoo/p/6189932.html
- https://my.oschina.net/tingzi/blog/376545
startService和bindService的区别相关推荐
- Android之startService与bindService的区别
Android执行Service有两种方法,一种是startService,一种是bindService.下面让我们一起来聊一聊这两种执行Service方法的区别. 1.生命周期上的区别 执行star ...
- Android之startService()和bindService()区别
Android之startService()和bindService()区别 1. 生命周期: 执行startService时,Service会经历onCreate->onStartComman ...
- [转]安卓开发startservice 和bindservice详解
原文 作者:aikongmeng 来源:安卓中文网 博主暗表:搜到此文,终于为我解惑,bindService并不会真正启动service,不会调用onStartCommand!还需要再bind之前st ...
- 深入理解Android的startservice和bindservice
一.首先,让我们确认下什么是service? service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互.它必须由用户或者其他程序显式的启动.它的优先级 ...
- startService与bindService
2011-12-19 21:20 187人阅读 评论(0) 收藏 举报 Service的生命周期 Service的生命周期方法比Activity少一些,只有onCreate, onStart, onD ...
- Android startService和bindService混合使用、以及前台服务;
Service简单来说就是一个看不见的Activity,在后台默默运行: 可以混合开启Service,无论先startService还是bindService: startService: Inten ...
- Android开发面试题Service之startService和bindService之间的区别
我们从生命周期来看: startService启动service会走=>onCreate和onStartCommand bindService启动service会走=>onCreate和o ...
- startService()和bindService()区别
1.从生命周期来看 startService()会调用service的onCreate().onStartCommand(),调用stopService()后就执行service的onDestroy( ...
- Service 定义(startService、bindService、IntentService)
Service: 是Android中实现程序后台运行的解决方案. 定义为服务 Service默认并不会运行在子线程中,它也不会运行在一个独立的进程中,它同样执行在UI线程中,因此,不要在Service ...
最新文章
- MasterPage.master文件
- A股融资融券余额是什么意思?
- 2021年春季学期-信号与系统-第二次作业参考答案-第八小题
- JQuery中的元素选择器
- 从DevOps到Cloud Native,应用上云姿势全解锁
- 遍历 Dictionary,你会几种方式?
- iSensor APP 之 摄像头调试 OV3640 OV2640 MT9d112
- edge android apk下载地址,edge app下载-edge完整版v7.2.0 安卓版 - 极光下载站
- mybatis plus springboot test_跟我学Springboot开发后端管理系统3:Mybatis-Plus实战2
- AssetBundle资源冗余检测
- HTML中的img标签无法显示图片的解决方案
- 如何学习 COMSOL 多物理场仿真软件?必备教程
- DM运维踩坑实践总结
- 我的Unity3d学习总结
- linux之域名更改
- scratch二级考纲
- GC详解---JVM(三)
- 常见排序算法及其对应的时间复杂度、空间复杂度
- Jmeter接口压力测试(先登录再测接口)
- K-means与高斯混合模型