关于Service生命周期的那些事

1.概述

  作为四大组件之一的Service,主要作用于后台,例如下载等,无UI界面

2.生命周期

  Service的生命周期会因其启动方式,有所差异。Service的启动方式有两种startService()bindService()

2.1startService()启动Service,生命周期流程图如下:

startService()启动流程图

由上图可知:

1.当Service通过startService()方法被多次调用时,onCreate()只会创建一次,onStartCommand()会被多次创建。

2.startService()每调用一次,onStartCommand()都会被调用一次,所以两者的次数是一致的。

2.2bindService()启动Service,生命周期如下

binderService

需要注意的几点

1.当Service通过bindService()方法被多次调用时,onCreate()onBind()只会创建一次,不会重复创建

2.当onBind()的返回值为空时,其生命周期onCreate() ==> onBind();当onBind()的值不为空时,其生命周期为onCreate() ==> onBind()==> onServiceConnected();

2.3关闭Service

1.通过startService()启动的Service

startService启动

  

2.通过bindService()启动Service

Caption

3.即用startService(),也用bindService()启动Service

两种方法同时启动

    对于第三种方式需要注意一下几点

1.当两种方式同时启动Service时,在关闭时,需要同时调用stopService()unBindService()(两者调用的先后顺无影响),如果只调用了其中一个,都不会执行onDestroy(),服务也不会关闭。

2.两种方式的onDestroy()都执行一次,当服务已解绑,再次调用stopService()或者unBindService(),会直接报错。

总结:

1.startService()开启Service后,调用stopService()后,服务并没有退出。

2.bindService()开启Service后,与其关联的Activity或者Fragment销毁时,必须调用unBindService()解绑,否则会造成内存泄露。

参考资料:

1.https://blog.csdn.net/carson_ho/article/details/53160137

2.https://www.jianshu.com/p/d870f99b675c

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章