作為一款多任務(wù)操作系統(tǒng),如果不能運(yùn)行后臺服務(wù),顯然說不過去,Android 當(dāng)然提供了運(yùn)行后臺程序的方法。而且非常簡單易用,只不過有一些小問題需要注意,這個主題分為兩部分,第一部分是如何實(shí)現(xiàn)一個Service以及他的生命周期,第二部分是對于一個個后臺服務(wù)應(yīng)該注意的事項(xiàng)。我們開始吧! 創(chuàng)建服務(wù)類
public class RoidingService extends android.app.Service {} 里邊必須實(shí)現(xiàn)的一個方法是 onBind(Intent intent) ,他具體是做什么的我們下邊講。還有兩個重要的回調(diào)函數(shù)需要覆蓋,onCreate() 和 onDestroy()。跟 Actitivty 類似,在創(chuàng)建和銷毀 Service 時回調(diào)這兩個函數(shù),達(dá)到初始化或退出前保存狀態(tài)。 服務(wù)的生命周期 有了 Service 類我們?nèi)绾螁铀?,有兩種方法:
在同一個應(yīng)用任何地方調(diào)用 startService() 方法就能啟動 Service 了,然后系統(tǒng)會回調(diào) Service 類的 onCreate() 以及 onStart() 方法。這樣啟動的 Service 會一直運(yùn)行在后臺,直到 Context.stopService() 或者 selfStop() 方法被調(diào)用。另外如果一個 Service 已經(jīng)被啟動,其他代碼再試圖調(diào)用 startService() 方法,是不會執(zhí)行 onCreate() 的,但會重新執(zhí)行一次 onStart() 。 另外一種 bindService() 方法的意思是,把這個 Service 和調(diào)用 Service 的客戶類綁起來,如果調(diào)用這個客戶類被銷毀,Service 也會被銷毀。用這個方法的一個好處是,bindService() 方法執(zhí)行后 Service 會回調(diào)上邊提到的 onBind() 方發(fā),你可以從這里返回一個實(shí)現(xiàn)了 IBind 接口的類,在客戶端操作這個類就能和這個服務(wù)通信了,比如得到 Service 運(yùn)行的狀態(tài)或其他操作。如果 Service 還沒有運(yùn)行,使用這個方法啟動 Service 就會 onCreate() 方法而不會調(diào)用 onStart()。 |
|