Android_Service

Service生命週期

startService啓動流程

    startService會通過Binder進程間通信機制來通知ActivitManagerService來創建新進程,並且啓動指定的服務

    1.主進程調用到ActivityManagerService進程中,完成新進程的創建

    2.從新進程調用到ActivityManagerService進程中,獲取要在新進程啓動的服務的相關信息;

    3.從ActivityManagerService進程又回到新進程中,最終將服務啓動起來

bindService啓動流程

   1. MainActivity調用bindService函數通知ActivityManagerService,它要啓動CounterService這個服務,ActivityManagerService於是在MainActivity所在的進程內部把CounterService啓動起來,並且調用它的onCreate函數;

    2.ActivityManagerService把CounterService啓動起來後,繼續調用CounterService的onBind函數,要求CounterService返回一個Binder對象給它;

    3.ActivityManagerService從CounterService處得到這個Binder對象後,就把它傳給MainActivity,即把這個Binder對象作爲參數傳遞給MainActivity內部定義的ServiceConnection對象的onServiceConnected函數;

    4.MainActivity內部定義的ServiceConnection對象的onServiceConnected函數在得到這個Binder對象後,就通過它的getService成同函數獲得CounterService接口。

IntentService

    IntentService是繼承於Service並處理異步請求的一個類,在IntentService內有一個工作線程來處理耗時操作,啓動IntentService的方式和啓動傳統Service一樣,同時,當任務執行完後,IntentService會自動停止,而不需要我們去手動控制。另外,可以啓動IntentService多次,而每一個耗時操作會以工作隊列的方式在IntentService的onHandleIntent回調方法中執行,並且,每次只會執行一個工作線程,執行完第一個再執行第二個,請求都在一個單線程中

    IntentService 實際上是Looper,Handler,Service 的集合體,他不僅有服務的功能,還有處理和循環消息的功能.

發佈了33 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章