Service

Service是標(biāo)準(zhǔn)應(yīng)用組件之一,適用于長期運行,且無需用戶交互的任務(wù);或者提供可供其他應(yīng)用使用的功能

類型

  1. Normal Service
  2. IntentService
    IntentService是一種處理通過Intent傳遞的異步請求的服務(wù),Client通過startService(Intent)發(fā)起請求,如果對應(yīng)服務(wù)已經(jīng)啟動,則該請求會放到請求隊列中;如果對應(yīng)服務(wù)沒有啟動,則先啟動服務(wù),再處理請求。請求是在onHandleIntent(Intent)函數(shù)中處理,該函數(shù)運行在一個由IntentService自動啟動的worker thread中。請求隊列中的所有請求都是在這個相同的thread中順序處理。當(dāng)所有請求都處理完后,IntentService會自行退出。

啟動方式

  1. startService(Intent)
    Intent必須是顯式的,包含具體的class name或者服務(wù)所在的包名。用這種方式啟動的服務(wù)必須調(diào)用stopSelf或者stopService才能正常退出。
  2. 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ù)會自行退出。

交互方式

  1. Intent
    適用于進程間和進程內(nèi)通信,用于啟動或綁定服務(wù)
  2. Binder
    進程內(nèi)通信時,可以調(diào)用Service的接口;進程間通信時,可以利用IBinder.transactBinder.onTransact傳遞數(shù)據(jù)
  3. Messenger
    適用于進程間通信,但只能是Client單向向Service發(fā)送消息。
  4. AIDL
    使用于進程間通信,Client可以同步或異步(keyword in aidl: oneway)調(diào)用Service的接口。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容