Service是標(biāo)準(zhǔn)應(yīng)用組件之一,適用于長期運(yùn)行,且無需用戶交互的任務(wù);或者提供可供其他應(yīng)用使用的功能
類型
- Normal Service
- IntentService
IntentService是一種處理通過Intent傳遞的異步請求的服務(wù)凭涂,Client通過startService(Intent)
發(fā)起請求,如果對應(yīng)服務(wù)已經(jīng)啟動贴妻,則該請求會放到請求隊列中;如果對應(yīng)服務(wù)沒有啟動切油,則先啟動服務(wù),再處理請求名惩。請求是在onHandleIntent(Intent)
函數(shù)中處理澎胡,該函數(shù)運(yùn)行在一個由IntentService自動啟動的worker thread中。請求隊列中的所有請求都是在這個相同的thread中順序處理。當(dāng)所有請求都處理完后攻谁,IntentService會自行退出稚伍。
啟動方式
-
startService(Intent)
Intent必須是顯式的,包含具體的class name或者服務(wù)所在的包名戚宦。用這種方式啟動的服務(wù)必須調(diào)用stopSelf
或者stopService
才能正常退出个曙。 -
bindService(Intent)
Intent可以是顯式的;也可以是隱式的受楼,且匹配服務(wù)在manifest中聲明的intent filter垦搬。用這種方式啟動的服務(wù),只有第一次綁定艳汽,服務(wù)啟動時猴贰,會執(zhí)行onBind
回調(diào),之后再次綁定服務(wù)河狐,系統(tǒng)會直接返回第一次綁定時onBind
返回的IBinder米绕。綁定服務(wù)的Client銷毀后系統(tǒng)會自動unBind
,但推薦Client不需要服務(wù)時就立刻調(diào)用unBind
馋艺。當(dāng)所有的Client都unBind
之后栅干,服務(wù)會自行退出。
交互方式
- Intent
適用于進(jìn)程間和進(jìn)程內(nèi)通信丈钙,用于啟動或綁定服務(wù) - Binder
進(jìn)程內(nèi)通信時非驮,可以調(diào)用Service的接口交汤;進(jìn)程間通信時雏赦,可以利用IBinder.transact
和Binder.onTransact
傳遞數(shù)據(jù) - Messenger
適用于進(jìn)程間通信,但只能是Client單向向Service發(fā)送消息芙扎。 - AIDL
使用于進(jìn)程間通信星岗,Client可以同步或異步(keyword in aidl: oneway)調(diào)用Service的接口。