要建立一個服務,你必須建立一個Service類(或一個既存的Service子類)的子類。在你的實現中,你需要重寫一些處理服務生命週期關鍵特徵的回調方法,並且給組件提供一種合適的綁定服務的機制。需要重寫的重要的回調方法如下:
onStartCommand()
當一個組件通過調用startService()方法請求啟動一個服務時,系統會調用這個服務的onStartCommand()方法。一旦這個方法執行了,那麼這個服務就被啟動,並且在後台無限期的運行。如果你實現了這個方法,當服務的工作結束時,你有責任通過調用stopSelf()方法或stopService()方法來終止服務。(如果你只想讓服務提供綁定的能力,你不需要實現這個方法。)
onBind()
當一個組件想通過調用bindService()方法跟這個服務(如執行RPC)綁定時,系統會調用這個方法。在這個方法的實現中,你必須通過返回一個IBinder對象給客戶提供一個使用者跟服務進行互動的介面。你必須實現這個方法,但是如果你不允許綁定,那麼這個方法應該返回null。
onCreate()
當服務被第一次建立時,系統會調用這個方法來執行一次安裝過程(它在onStartCommand()或onBind()方法之前調用)。如果服務正在運行,這個方法就不會被調用。
onDestroy()
當服務不再使用或正在銷毀時,系統會調用這個方法。你的服務應該使用這個方法來實現一些清理資源的工作,如清理線程、被註冊的監聽器、接受器等。這是服務能夠接受的最後的調用。
如果組件通過調用startService()方法啟動服務,那麼這個服務就會一直運行到它自己用stopSelf()方法終止服務,或另一個組件通過調用stopService()方法來終止它。
如果一個組件調用bindService()方法來建立這個服務(並且不調用onStartCommand()方法),那麼這個服務只跟綁定的組件運行同樣長的時間。一旦這個從所有的用戶端解除綁定,系統就會銷毀它。
Android系統只有在記憶體不足和必須給有使用者焦點的Activity回收系統資源時,才會強制終止一個服務。如果服務是被一個有使用者焦點的Activity綁定的,那麼它不可能被殺死,並且如果這個服務被聲明運行在前台(稍後討論),那麼它也幾乎不能被殺死。否則如果這個服務被啟動並且長時間運行,那麼隨著時間的推移系統會降低它在背景工作列表中位置,並且這個服務將很容易被殺死---如果你的服務被啟動了,那麼你必須把它設計成能夠通過系統能夠妥善的重啟。如果系統殺死了你的服務,那麼一旦資源變為有效它就會重啟(雖然這也依賴從onStartCommand()方法返回的值,稍後討論)。