Android 四大組件之 Service

  1. 在 AS 中新建服務(wù)時(shí),Exported 屬性表示是否允許除了當(dāng)前程序之外的其他程序訪問這個(gè)服務(wù),Enabled 屬性表示是否啟用這個(gè)服務(wù)。

  2. onStartCommand 方法會在每次服務(wù)啟動的時(shí)候調(diào)用。通常情況下,如果我們希望服務(wù)一旦啟動就立刻去執(zhí)行某個(gè)動作,就可以將邏輯寫在 onStartCommand 方法中。

  3. 啟動和停止服務(wù)的方法
    startService(Intent intent)
    stopService(Intent intent)
    這兩個(gè)方法都是定義在 Context 類中,可以在活動里直接調(diào)用這兩個(gè)方法

另外,可以在 Service 的任何一個(gè)位置調(diào)用 stopSelf() 方法讓服務(wù)停下來。

  1. startService 和 bindService 的區(qū)別
  • 執(zhí)行 startService 時(shí),Service 會經(jīng)歷 onCreate -> onStartCommand 。當(dāng)執(zhí)行stopService 時(shí),直接調(diào)用onDestroy方法。
    執(zhí)行bindService時(shí),Service會經(jīng)歷onCreate->onBind。這個(gè)時(shí)候調(diào)用者和Service綁定在一起。調(diào)用者調(diào)用unbindService方法或者調(diào)用者Context不存在了(如Activity被finish了),Service就會調(diào)用onUnbind->onDestroy。這里所謂的綁定在一起就是說兩者共存亡了。
  • 多次調(diào)用startService,該Service只能被創(chuàng)建一次,即該Service的onCreate方法只會被調(diào)用一次。但是每次調(diào)用startService,onStartCommand方法都會被調(diào)用。
    第一次執(zhí)行bindService時(shí),onCreate和onBind方法會被調(diào)用,但是多次執(zhí)行bindService時(shí),onCreate和onBind方法并不會被多次調(diào)用,即并不會多次創(chuàng)建服務(wù)和綁定服務(wù)。
    *onBind回調(diào)方法將返回給客戶端一個(gè)IBinder接口實(shí)例,IBinder允許客戶端回調(diào)服務(wù)的方法,比如得到Service運(yùn)行的狀態(tài)或其他操作。我們需要IBinder對象返回具體的Service對象才能操作,所以說具體的Service對象必須首先實(shí)現(xiàn)Binder對象。
  • 既調(diào)用 startService 又調(diào)用 bindService


  • 本地服務(wù)與遠(yuǎn)程服務(wù)


  1. 活動和服務(wù)間的通信
  • Service 中的 onBind 方法返回null,表示客戶端不能建立到此服務(wù)的連接。
  • 當(dāng)一個(gè)活動和服務(wù)綁定了之后,就可以調(diào)用該服務(wù)里的 Binder 提供的方法了。
  • onBind(Intent) 這個(gè)方法 返回了一個(gè)實(shí)現(xiàn)了 IBinder 接口的對象,這個(gè)對象將用于綁定Service 的 Activity 與 Service 通信。
  1. 每個(gè)服務(wù)都只會存在一個(gè)實(shí)例,所以不管你調(diào)用了多少次 startService()方法,只需調(diào)用一次 stopService() 或 stopSelf() 方法,服務(wù)就會停止下來。

  2. 根據(jù) Android 系統(tǒng)的機(jī)制,一個(gè)服務(wù)只要被啟動或被綁定之后,就會一直處于運(yùn)行狀態(tài),必須要讓以上兩種條件同時(shí)不滿足才可以被銷毀。所以,這種情況下要同時(shí)調(diào)用 stopService() 和 unbindService() 方法, onDestroy() 方法才能執(zhí)行。

  3. IntentService 類
    服務(wù)中的代碼是默認(rèn)運(yùn)行在主線程當(dāng)中的,如果直接在服務(wù)里去處理一些耗時(shí)的邏輯,就很容易出現(xiàn) ANR 的情況。為了可以簡單地創(chuàng)建一個(gè)異步的、會自動停止的服務(wù),Android 專門提供了一個(gè) IntentService 類

  4. 前臺服務(wù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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