編輯:Android開發實例
服務是運行在後台的一段代碼。它可以運行在它自己的進程,也可以運行在其他應用程序進程的上下文(context)裡面,這取決於自身的需要。其它的組件可以綁定到一個服務(Service)上面,通過遠程過程調用(RPC)來調用這個方法。例如媒體播放器的服務,當用戶退出媒體選擇用戶界面,仍然希望音樂依然可以繼續播放,這時就是由服務 (service)來保證當用戶界面關閉時音樂繼續播放的。
它跟Activity的級別差不多,但是他不能自己運行,需要通過某一個Activity或者其他Context對象來調用, Context.startService() 和Context.bindService()。
兩種啟動Service的方式有所不同。這裡要說明一下的是如果你在Service的onCreate或者onStart做一些很耗時間的事情,最好在Service裡啟動一個線程來完成,因為Service是跑在主線程中,會影響到你的UI操作或者阻塞主線程中的其他事情。
什麼時候需要Service呢?比如播放多媒體的時候用戶啟動了其他Activity這個時候程序要在後台繼續播放,比如檢測SD卡上文件的變化,再或者在後台記錄你地理信息位置的改變等等。
1.第一種是通過調用Context.startService()啟動,調用Context.stopService()結束,startService()可以傳遞參數給Service。
2.第二種方式是通過調用Context.bindService()啟動,調用Context.unbindservice()結束,還可以通過ServiceConnection訪問Service。
二者可以混合使用,比如說我可以先startService再bindservice。
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
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
介紹 最近用淘寶客戶端的時候,編輯地址的時候有個地區選擇的功能。看上面的效果覺得挺酷,滾動的時候,是最後一個從下面飛上來挨著前一個。就自己鼓搗一個
Fragment的主要意義就是提供與Activity綁定的生命周期回調。 Fragment不一定要向Activity的視圖層級中添加View. 當某個模塊需要獲得
Android可以備份應用程序的數據到遠程“雲”存儲,以應用程序的數據和設置的一個還原點。可以只備份應用程序數據。為了訪問其他應用程序的數據,需要