android: 服務的生命週期

來源:互聯網
上載者:User

標籤:

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 對象的執行個體,這 樣就能自由地和服務進行通訊了。只要調用方和服務之間的串連沒有斷開,服務就會一直保 持運行狀態。

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

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

android: 服務的生命週期

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.