Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Service

Android Service

編輯:關於Android編程

1. Service和IntentService區別

Service

http://android.xsoftlab.net/reference/android/app/Service.html

\

 

IntentService

http://android.xsoftlab.net/reference/android/app/IntentService.html

\

 

IntentService

Service

自動啟動子線程,onHandleIntent為子線程

不自動啟動子線程,運行在主線程裡面,耗時操作易產生ANR(當然可以自己在Service裡面啟動線程來修復ANR)

自動停止Service(處理完工作隊裡面的工作後自動停止)

不自動停止Service,需主動停止Service

不適合作為常駐Service(需要一直運行的Service)

適合作為常駐Service

總結:能用IntentService的場景就盡量用IntentService,而不要用Service

 

 

2. Remote Service

Service作為常駐Service時,盡量指定process來脫離Application的進程,作為一個單獨的進程(RemoteService)

獨立Service進程原因:Service進程優先級高於後台進程,當應用被切換到後台後,會導致資源不容易被回收(如果Service進程沒有獨立出來,系統會認定該應用進程為Service進程)。

方法:設置Service的process屬性為“:remote”(“remote”為service process name,可以自定義)

例如:\

驗證Service已作為Remote Service的方法:adb shell ps查看進程

例如:\\

3. Service從主進程獨立出來產生的常見問題

Q1. 進程間的數據是獨立的,不能共享

例如:通過應用主進程往SharedPreference存儲的數據,發現在Service裡面讀取到的數據不對。

A1.

換一種數據可以共享的方式,例如:指定SharedPreference的mode為MODE_MULTI_PROCESS,ContentProvider共享數據等等

 

Q2. 獲取Service時出錯

mBoundService= ((LocalService.LocalBinder)service).getService();

A2.

mIPowerManager= IPowerManager.Stub.asInterface(service);

Q3. 如果希望調用服務裡的接口

A3. 通過binder通信(可以參考AndroidFramework裡面的Service是如何提供接口的,原理是一樣的)

 

4. LocalService和RemoteServiceSample:

http://android.xsoftlab.net/reference/android/app/Service.html#LocalServiceSample

http://android.xsoftlab.net/reference/android/app/Service.html#RemoteMessengerServiceSample

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved