【Android】Service的生命周期
来源:互联网 发布:购物车订单数据库设计 编辑:程序博客网 时间:2024/06/07 07:45
先来看一张图:
上图介绍了Service生命周期的两种情况:
使用startService()
如果只使用startService()开启服务,且startService()多次,那么只有第一次会回调onCreate()和onStartCommand(),后面只会回调onStartCommand()。
然后如果使用了stopService(),那么就会回调onDestroy()。
使用bindService()
如果只使用bindService()绑定服务,且bindService()多次,那么只有第一次回调onCreate()和onBind(),后面这两个方法都不会被回调了。
然后如果每个绑定service的对象都执行unbindService(),那只有最后一次onUnbind()会被回调,并且会回调onDestroy()。
然而肯定还有其他情况。
startService()和bindService()混合使用
如果先使用startService(),那会回调onCreate()和onStartCommand(),再使用startService(),就只会回调onStartCommand();如果再使用bindService(),那么只有第一次回调onBind()。
————————————————————
如果先使用bindService(),那么只有第一次回调onCreate()和onBind();如果再使用startService(),就只会回调onStartCommand()。
然后如果还有绑定service的对象没解绑,那么先使用stopService()没有回调,但是最后一个对象执行完unbindService()之后,先回调onUnbind(),再回调onDestroy()。
————————————————————
然后如果绑定service的对象全都执行了unbindService(),那最后一次unbindService()之后回调onUnbind()。然后stopService(),那么就会回调onDestroy()。
以上可以参考我的测试demo,代码地址:AndroidStudy项目下的/app/src/main/java/com/example/tsnt/androidbase/service_lifecycle目录。
以上总结:
一般情况下Service的生命周期中只有onStartCommand()会被多次回调,onCreate(),onBind(),onUnbind(),onDestory()在一个生命周期中只能被回调一次。
但是也有特殊情况,请往下看。
onRebind()
onRebind()的回调与否和onUnbind()的返回值有关。
如果onUnbind()返回false,那么onRebind()不会被调用。
如果onUnbind()返回true,onRebind()会在如下情况被调用:
第一步,调用 startService,触发 onCreate()与 onStartCommand()。
第二步,调用 bindService(),触发 onBind()。
第三步,调用 unbindService(),触发 unbindService()。
第四步,调用 bindService(),触发 onRebind()。
第五步,调用 unbindService(),触发 onUnbind()。
第六步,调用 stopService(),触发 onDestroy()。
也就是说在service没被销毁的情况下,绑定过服务然后解绑了,并且onUnbind()的返回值为true,再绑定服务的时候会回调onRebind(),再解绑的时候会回调onUnbind()。
注意点:
1.onStart()会在onStartCommand()中被调用,现在不推荐使用,在API该方法中被标记为@Deprecated。
2.onBind()的作用:onBind()主要用来产生一个 Binder,只需要知道同一个服务的 Binder 只会有一个,onBind() 只会在第一个“轮回”调用一次,主要负责则 “Create Binder”。在onBind()中需返回一个IBinder实例,不然ServiceConnection的onServiceConnected()方法不会调用。
3.ServiceConnection的回调方法onServiceDisconnected()在连接正常关闭的情况下是不会被调用的,该方法只在Service被破坏了或者被杀死的时候调用,比如系统资源不足的时候。
参考:
1.【Android】Service生命周期回顾
2. 深入理解Android的startservice和bindservice
- Android Service的生命周期
- Android 的Service生命周期
- Android Service 的生命周期
- Android Service的生命周期
- Android的Service生命周期
- Android Service的生命周期
- Android Service的生命周期
- Android Service的生命周期
- Android Service的生命周期
- Android Service的生命周期
- Android-Service的生命周期
- Android Service的生命周期
- Android Service的生命周期
- Android Service 的生命周期
- Android Service的生命周期
- Android Service的生命周期
- Android Service的生命周期
- Android Service的生命周期
- 几句废话:学习Linux两种人
- imx6的nfs配置
- 高精度压位模板
- AC自动机总结
- Lua 5.3 源码解读(一) VS 2015 编译源码
- 【Android】Service的生命周期
- 创建带图片的Toast提示
- react教程之this.props.children
- RQNOJ 117 最佳课题选择
- 文章标题
- 不可变对象
- Xposed实现短信拦截
- Promise对象的简单应用
- 全排列