1. 程式人生 > >Activity,Service生命週期

Activity,Service生命週期

Service生命週期一般有兩種使用方式
Service可以被啟動或者允許被啟動直到有人停止了它或者它自己停止了。在這種模式下,它通過Context.startService()方法開始,通過Context.stopService()方法停止。它可以通過Service.stopSelf()方法或者Service.stopSelfResult()方法來停止自己。只要呼叫一次stopService()方法便可以停止服務,無論呼叫了多少次的啟動服務方法。

Service可以通過定義好的介面來程式設計,客戶端建立一個與Service的連結,並使用此連結與Service進行通話。通過Context.bindService()方法來繫結服務,Context.unbindService()方法來關閉服務。多個客戶端可以繫結同一個服務。如果Service還未被啟動,bindService()方法可以啟動服務。

這兩種模式是完全獨立的。你可以繫結一個已經通過startService()方法啟動的服務。例如:一個後臺播放音樂服務可以通過startService()和一個intend物件來播放音樂。可能使用者在播放過程中要執行一些操作比如獲取歌曲的一些資訊,此時activity可以通過呼叫bindServices()方法與Service建立連線。這種情況下,stopServices()方法實際上不會停止服務,直到最後一次繫結關閉。

像一個activity那樣,一個Service有些可以用來改變狀態的生命週期方法。但是比activity的方法少,Service生命週期方法只有三個,而且都是public修飾。

void onCreate()

void onStart(Intent intent)

void onDestroy()

通過實現這三個生命週期方法,你可以監聽Service的兩個巢狀迴圈的生命週期。

Service整個生命週期
Service的整個生命週期是在onCreate()和onDestroy()方法之間。和activity一樣,在onCreate()方法裡初始化,在onDestroy()方法裡釋放資源。例如,一個背景音樂播放服務可以在onCreate()方法裡播放,在onDestroy()方法裡停止。

Service活動的生命週期
Service的活動生命週期是在onStart()之後,這個方法會處理通過startServices()方法傳遞來的Intent物件。音樂Service可以通過開打intent物件來找到要播放的音樂,然後開始後臺播放。

Service停止時沒有相應的回撥方法,即沒有onStop()方法。onCreate()方法和onDestroy()方法是針對所有的Services,無論它們是否啟動。通過Context.startService()和Context.bindService()方法。然而,只有通過startService()方法啟動的Service才會被呼叫onStart()方法。如果一個Service允許別人繫結,那麼需要實現以下額外的方法:

IBinder onBind(Intent intent)

boolean onUnbind(Intent intent)

void onRebind(Intent intent)

onBind()回撥方法會繼續傳遞通過bindService()傳遞來的intent對像。onUnbind()會處理傳遞給unbindService()的intent物件。如果Service允許繫結,onBind()會返回客戶端與服務互相聯絡的通訊頻道。如果建立了一個新的客戶端與服務的連結,onUnbind()方法可以請求呼叫onRebind()方法。

下面的圖表介紹了Service的回撥方法,然而,它把通過startService()方法建立的服務從通過bindService()方法建立的服務分離開。記住任何服務,無果它怎樣建立,都預設客戶端可以連結,所以任何的Service能夠接收onBind()和onUnbind()方法。


[img]http://dl.iteye.com/upload/attachment/0075/6093/fa10412f-6403-35bd-a5ff-99b8d04f7602.jpg[/img]

[img]http://dl.iteye.com/upload/attachment/0075/6091/453f355b-6a0c-3a9d-ad37-15bf92e1a164.png[/img]