Service使用注意事項

1,注意事項:

【1】多個客戶端可同時連接到一個服務。不過,只有在第一個客戶端綁定時,系統纔會調用服務的 onBind() 方法來檢索 IBinder。系統隨後無需再次調用 onBind(),便可將同一 IBinder 傳遞至任何其他綁定的客戶端。當最後一個客戶端取消與服務的綁定時,系統會將服務銷燬(除非 startService() 也啓動了該服務)

 

【2】 通常情況下我們應該在客戶端生命週期(如Activity的生命週期)的引入 (bring-up) 和退出 (tear-down) 時刻設置綁定和取消綁定操作,以便控制綁定狀態下的Service,一般有以下兩種情況:

  • 如果只需要在 Activity 可見時與服務交互,則應在 onStart() 期間綁定,在 onStop() 期間取消綁定。

  • 如果希望 Activity 在後臺停止運行狀態下仍可接收響應,則可在 onCreate() 期間綁定,在 onDestroy() 期間取消綁定。需要注意的是,這意味着 Activity 在其整個運行過程中(甚至包括後臺運行期間)都需要使用服務,因此如果服務位於其他進程內,那麼當提高該進程的權重時,系統很可能會終止該進程。

 

【3】通常情況下(注意),切勿在 Activity 的 onResume() 和 onPause() 期間綁定和取消綁定,因爲每一次生命週期轉換都會發生這些回調,這樣反覆綁定與解綁是不合理的。此外,如果應用內的多個 Activity 綁定到同一服務,並且其中兩個 Activity 之間發生了轉換,則如果當前 Activity 在下一次綁定(恢復期間)之前取消綁定(暫停期間),系統可能會銷燬服務並重建服務,因此服務的綁定不應該發生在 Activity 的 onResume() 和 onPause()中。

 

【4】我們應該始終捕獲 DeadObjectException DeadObjectException 異常,該異常是在連接中斷時引發的,表示調用的對象已死亡,也就是Service對象已銷燬,這是遠程方法引發的唯一異常,DeadObjectException繼承自RemoteException,因此我們也可以捕獲RemoteException異常。

 

【5】 應用組件(客戶端)可通過調用 bindService() 綁定到服務,Android 系統隨後調用服務的 onBind() 方法,該方法返回用於與服務交互的 IBinder,而該綁定是異步執行的。

 

 

 

關於更多Service內容:https://blog.csdn.net/cricket_7/category_9580061.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章