1.概述
作为四大组件之一的Service,主要作用于后台,例如下载等,无UI界面
2.生命周期
Service的生命周期会因其启动方式,有所差异。Service的启动方式有两种startService()和bindService()
2.1startService()启动Service,生命周期流程图如下:
由上图可知:
1.当Service通过startService()方法被多次调用时,onCreate()只会创建一次,onStartCommand()会被多次创建。
2.startService()每调用一次,onStartCommand()都会被调用一次,所以两者的次数是一致的。
2.2bindService()启动Service,生命周期如下:
需要注意的几点
1.当Service通过bindService()方法被多次调用时,onCreate()、onBind()只会创建一次,不会重复创建
2.当onBind()的返回值为空时,其生命周期onCreate() ==> onBind();当onBind()的值不为空时,其生命周期为onCreate() ==> onBind()==> onServiceConnected();
2.3关闭Service
1.通过startService()启动的Service
2.通过bindService()启动Service
3.即用startService(),也用bindService()启动Service
对于第三种方式需要注意一下几点
1.当两种方式同时启动Service时,在关闭时,需要同时调用stopService()和unBindService()(两者调用的先后顺无影响),如果只调用了其中一个,都不会执行onDestroy(),服务也不会关闭。
2.两种方式的onDestroy()都执行一次,当服务已解绑,再次调用stopService()或者unBindService(),会直接报错。
总结:
1.startService()开启Service后,调用stopService()后,服务并没有退出。
2.bindService()开启Service后,与其关联的Activity或者Fragment销毁时,必须调用unBindService()解绑,否则会造成内存泄露。