android基础-startService和bindService

知识点:

  1. service的生命周期
  2. 应用场景

一、service的生命周期

1.1 startService执行的生命周期是 :

onCreate→onStartCommand→onDestroy

多次执行startService 只会回调onStartCommand

1.2 bindService执行的生命周期是:

onCreate→onBind→onUnbind→onDestroy

如果在onBind中处理了对应的binder,则会执行对应ServiceConnection中的onServiceConnected(),但是onServiceDisconnected() 在连接正常关闭的情况下是不会被调用的, 该方法只在Service 被破坏了或者被杀死的时候调用. 例如, 系统资源不足, 要关闭一些Services, 刚好连接绑定的 Service 是被关闭者之一, 这个时候onServiceDisconnected() 就会被调用。
(ps:bindservice的启动还要根据第三个参数来判断,这里采用默认值)

1.3 混合使用

startService()->binderService()

onCreate→onStartCommand→onBind→onUnbind→onDestroy

bindService()->startService

onCreate→onBind→onStartCommand→onUnbind→onDestroy

注意: 混合使用场景,不论先后调用顺序,都无法直接调用stopService()去停止任务,必须先通过unBindService解绑
直接调用unBindService: 只回调onUnbind()
调用过stopService再调用unBindService: 回调onUnbind()+onDestory

1.4多进程场景

两个进程分别调用startService启动一个服务,然后其中一个调用stopService

onCreate->onStartCommand->onStartCommand->onDestory

两个进程分别调用binService,其中一个调用unBindService

onCreate->onBind->onBind->onUnbind

两个进程分别调用binService,两个都调用unBindService

onCreate->onBind->onBind->onUnbind->onUnbind->onDestory

混合使用与1.3类似,不过从上面也能看出,必须要全部绑定过的进程都调用unBindService之后服务才能真正触发onDestory

二、 应用场景

2.1 startService

该类型一般只用来把一些与前台无关的工作放到后台中,前台不在意这些工作,但是应用退出不会自动销毁服务

2.2 bindService

该类型一般是前台把一些比较耗时或者需要一直工作并且需要反馈信息给回前台的时候使用,比如后台播放,但是前台需要知道进度,不过应用退出也自动销毁服务

2.3 startService和bindService混合使用

该类型一般是需要把后台任务信息反馈给前台,并且退出应用也不关闭后台服务,就是则行了startService和bindService之后,在退出应用只做unBindService不做stopSerivice的时候,比如后台下载任务

总结

service启动模式以及生命周期在面试当中会经常被问题,而且熟悉生命周期的回调也有助于我们在日常开发中使用service会得心应手,aidl用起来也很简单啦

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容