Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android Service學習筆記

Android Service學習筆記

編輯:Android開發實例

一 什麼是Service

 

服務是運行在後台的一段代碼。它可以運行在它自己的進程,也可以運行在其他應用程序進程的上下文(context)裡面,這取決於自身的需要。其它的組件可以綁定到一個服務(Service)上面,通過遠程過程調用(RPC)來調用這個方法。例如媒體播放器的服務,當用戶退出媒體選擇用戶界面,仍然希望音樂依然可以繼續播放,這時就是由服務 (service)來保證當用戶界面關閉時音樂繼續播放的。

 

它跟Activity的級別差不多,但是他不能自己運行,需要通過某一個Activity或者其他Context對象來調用, Context.startService() 和Context.bindService()。

兩種啟動Service的方式有所不同。這裡要說明一下的是如果你在Service的onCreate或者onStart做一些很耗時間的事情,最好在Service裡啟動一個線程來完成,因為Service是跑在主線程中,會影響到你的UI操作或者阻塞主線程中的其他事情。

什麼時候需要Service呢?比如播放多媒體的時候用戶啟動了其他Activity這個時候程序要在後台繼續播放,比如檢測SD卡上文件的變化,再或者在後台記錄你地理信息位置的改變等等。

 

二 如何使用Service

 

1.第一種是通過調用Context.startService()啟動,調用Context.stopService()結束,startService()可以傳遞參數給Service。

2.第二種方式是通過調用Context.bindService()啟動,調用Context.unbindservice()結束,還可以通過ServiceConnection訪問Service。

二者可以混合使用,比如說我可以先startService再bindservice。

 

三 service生命周期

 

startService後,即使調用startService的進程結束了,Service仍然還存在,直到有進程調用stopService,或者Service自己自殺(stopSelf())。bindService後,Service就和調用bindService的進程同生共死了,也就是說當調用bindService的進程死了,那麼它bind的Service也要跟著被結束,當然期間也可以調用unbindservice讓 Service結束。

 

兩種方式混合使用時,比如說你startService了,我bindService了,那麼只有你stopService了而且也unbindservice了,這個Service才會被結束。

 

Android系統將會嘗試保留那些啟動了的或者是綁定了服務的進程。如果該服務正在進程的onCreate(), onStart(), 或者 onDestroy() 這些方法中執行時, 那麼主進程將會成為一個前台進程,以確保此代碼不會被停止。如果服務已經開始,那麼它的主進程會就重要性而言低於所有可見的進程但高於不可見的進程, 由於只有少數幾個進程是用戶可見的,所以只要不是內存特別低,該服務不會停止.。如果有多個客戶端綁定了服務, 只要客戶端中的一個對於用戶是可見的,即認為該服務可見。

 

如果Service還沒有運行,則android先調用onCreate()然後調用onStart();如果Service已經運行,則只調用onStart(),所以一個Service的onStart方法可能會重復調用多次。

 

stopService的時候直接onDestroy,如果是調用者自己直接退出而沒有調用stopService的話,Service會一直在後台運行。該Service的調用者再啟動起來後可以通過stopService關閉Service。

 

所以調用startService的生命周期為:onCreate --> onStart(可多次調用) --> onDestroy

 

使用context.bindService()啟動Service會經歷:

context.bindService()->onCreate()->onBind()->Service running

onUnbind() -> onDestroy() ->Service stop

 

onBind將返回給客戶端一個IBind接口實例,IBind允許客戶端回調服務的方法,比如得到Service運行的狀態或其他操作。這個時候把調用者(Context,例如Activity)會和Service綁定在一起,Context退出了,Srevice就會調用onUnbind->onDestroy相應退出。

 

所以調用bindService的生命周期為:onCreate --> onBind(只一次,不可多次綁定) --> onUnbind --> onDestory。

 

所以,在Service每一次的開啟關閉過程中,只有onStart可被多次調用(通過多次startService調用),其他onCreate,onBind,onUnbind,onDestory在一個生命周期中只能被調用一次。

轉自:http://www.cnblogs.com/feisky/archive/2010/06/14/1758336.html

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