關於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

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