Android6.0之AMS管理Service前奏

前面分析了AMS使如何啓動一個Activity的,現在開始分析AMS如何啓動一個service。那麼在分析AMS管理Service的源碼之前,先要知道在App有哪些使用Service的方法。

概述

Service是Android中實現程序後臺運行的解決方案,非常適合用於去執行哪些不需要和用戶交互而且還要求長期運行的任務。

一般情況下,service和activity都是運行在ui主線程的,所以service中不能處理太耗時的邏輯,否則容易引起ANR異常。可以通過android:process屬性指定service運行在一個獨立的進程中。

大多數情況下使用的service都是只能在後臺運行,但也有前臺Service,此時service將會在通知欄中顯示。例如,一個從service播放音樂的音樂播放器,應被設置爲前臺運行,因爲用戶會明確地注意它的運行。

要知道在App開發中如何定義一個Service,如何啓動一個Service,如何停止一個Service和service的生命週期。

Service種類

Service按照使用場景分爲兩類:Local Service和remote service。

Local Service:

Client跟Service 一般不能相互反饋,一般也在同一個進程中,如果在統一進程中,那麼service運行在主線程中。當然也可以運行在一個獨立進程中。

通過調用應用程序組件(例如Activity)的startService()方法來啓動一個服務.一旦啓動,服務就會在後臺一直運行,即使應用程序組件此時被關閉.通常,已經啓動的服務會處理一些單一功能,並且也不需要返回結果給調用者.例如,在網絡上下載或上傳文件.當服務的工作處理結束,纔會自己關閉服務。也可調用stopService()結束service。

這類服務有個特點,就是它主要用於爲某一個組件,比如Activity提供單獨的後臺服務,Client 和 Service是不能相互溝通的。

如果Service運行在app進程中,也就是沒有在獨立進程中,那麼就運行在主線程中,所以考慮引起ANR異常的問題。

Remote Service

Client跟Service可以不在同一個進程.

通過調用應用程序組件的bindService()方法來綁定一個服務.已綁定的服務會提供一個客戶端-服務端交互接口.該接口主要用來與應用程序交互,發送請求,獲取結果,甚至通過IPC來訪問進程.只要一個程序組件綁定服務,就會運行綁定服務,多個應用程序組件可以同時時間綁定一個服務.當所有的應用程序組件都解除綁定,該綁定服務器就會被銷燬.

這類服務有個特點,就是它會定義一些接口並把接口暴露出來,以便其他應用進行操作。Client 和 Service 能相互溝通的。

Service按照是否需要和用戶交互,可分爲兩大類:前臺Service 和 後臺Service。

後臺Service

Service一般都是後臺運行的Service(無需與用戶交互);因爲Service的系統優先級還是比較低的,當系統出現內存不足情況時,就有可能會回收掉正在後臺運行的Service。

前臺Service

需要和用戶交互的Service,它會一直有一個正在運行的圖標在系統的狀態欄顯示,下拉狀態欄後可以看到更加詳細的信息,非常類似於通知的效果。

###

http://www.cnblogs.com/smyhvae/p/4070518.html

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