android: 服務的生命週期

9.4   服務的生命週期學習

 

以前章節咱們學習過了活動以及碎片的生命週期。相似地,服務也有本身的生命週期, 前面咱們使用到的 onCreate()、onStartCommand()、onBind()和 onDestroy()等方法都是在服務的生命週期內可能回調的方法。對象

一旦在項目的任何位置調用了 Context 的 startService()方法,相應的服務就會啓動起來, 並回調 onStartCommand()方法。若是這個服務以前尚未建立過,onCreate()方法會先於 onStartCommand() 方法執行。服務啓動了以後會一直保持運行狀態,直到 stopService()或 stopSelf()方法被調用。注意雖然每調用一次 startService()方法,onStartCommand()就會執行 一次,但實際上每一個服務都只會存在一個實例。因此無論你調用了多少次 startService()方法, 只需調用一次 stopService()或 stopSelf()方法,服務就會中止下來了。生命週期

另外,還能夠調用 Context 的 bindService()來獲取一個服務的持久鏈接,這時就會回調 服務中的 onBind()方法。相似地,若是這個服務以前尚未建立過,onCreate()方法會先於 onBind()方法執行。以後,調用方能夠獲取到 onBind()方法裏返回的 IBinder 對象的實例,這 樣就能自由地和服務進行通訊了。只要調用方和服務之間的鏈接沒有斷開,服務就會一直保 持運行狀態。io

當調用了 startService()方法後,又去調用 stopService()方法,這時服務中的 onDestroy() 方法就會執行,表示服務已經銷燬了。相似地,當調用了 bindService()方法後,又去調用 unbindService()方法,onDestroy()方法也會執行,這兩種狀況都很好理解。可是須要注意, 咱們是徹底有可能對一個服務既調用了 startService()方法,又調用了 bindService()方法的, 這種狀況下該如何才能讓服務銷燬掉呢?根據 Android 系統的機制,一個服務只要被啓動或 者被綁定了以後,就會一直處於運行狀態,必需要讓以上兩種條件同時不知足,服務才能被 銷燬。因此,這種狀況下要同時調用 stopService()和 unbindService()方法,onDestroy()方法才 會執行。class

這樣你就已經把服務的生命週期完整地走了一遍。方法

相關文章
相關標籤/搜索