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()解綁,否則會造成內存泄露。