Android activity和service的生命週期對比

來源:互聯網
上載者:User

標籤:完全   返回鍵   重複   可見   theme   儲存   退出   沒有   生命週期   

1Activity生命週期

七個方法

    1. void onCreate(Bundle savedInstanceState)

當Activity被第首次載入時執行。我們新啟動一個程式的時候其主表單的onCreate事件就會被執行。如果Activity被銷毀後(onDestroy後),再重新載入進Task時,其onCreate事件也會被重新執行。

2. void onStart()   activity變為在螢幕上對使用者可見時調用。

3. void onResume()   activity開始與使用者互動時調用(無論是啟動還是重新啟動一個活動,該方法總是被調用的)。

4. void onPause()   activity被暫停或收回cpu和其他資源時調用,該方法用於儲存活動狀態的,也是保護現場,壓棧吧!

表單被交換到後台時執行。

5. void onStop()    activity被停止並轉為不可見階段及後續的生命週期事件時調用。

onPause事件之後執行。如果一段時間內使用者還沒有重新查看該表單,則該表單的onStop事件將會被執行;或者使用者直接按了Back鍵,將該表單從當前Task中移除,也會執行該表單的onStop事件。

6. void onRestart()   重新啟動activity時調用。該活動仍在棧中,而不是啟動新的活動。

onStop事件執行後,如果表單和其所在的進程沒有被系統銷毀,此時使用者又重新查看該表單,則會執行表單的onRestart事件,onRestart事件後會跳過表單的onCreate事件直接執行onStart事件。

7. void onDestroy()   activity被完全從系統記憶體中移除時調用,該方法被調用可能是因為有人直接調用onFinish()方法或者系統決定停止該活動以釋放資源!

Activity被銷毀的時候執行。在表單的onStop事件之後,如果沒有再次查看該表單,Activity則會被銷毀。

 

情形一、一個單獨的Activity的正常的生命過程是這樣的:onCreate->onStart->onPause->onStop->onDestroy。例如:運行一個Activity,進行了一些簡單操作(不涉及頁面的跳轉等),然後按返回鍵結束。

情形二、有兩個Activity(a和b),一開始顯示a,然後由a啟動b,然後在由b回到a,這時候a的生命過程應該是怎麼樣的呢(a被b完全遮蓋)?a經曆的過程為onCreate->onStart->onResume->onPause->onStop->onRestart->onStart->onResume。這個過程說明了圖中,如果Activity完全被其他介面遮擋時,進入後台,並沒有完全銷毀,而是停留在onStop狀態,當再次進入a時,onRestart->onStart->onResume,又重新恢複。

 情形三、基本情形同二一樣,不過此時a被b部分遮蓋(比如給b添加個對話方塊主題 Android:theme="@android:style/Theme.Dialog")a經曆的過程是:onCreate->onStart->onResume->onPause->onResume所以當Activity被部分遮擋時,

情形四、 開啟程式,啟動a,點擊a,啟動AlertDialog,按返回鍵從AlertDialog返回。a經曆的過程是:onCreate->onStart->onResume當啟動和退出Dialog時,Activity的狀態始終未變,可見,Dialog實際上屬於Acitivity內部的介面,不會影響Acitivty的生命週期。入onPause,並沒有進入onStop,從Activity2返回後,執行了onResume

 

2、Service的生命週期

使用context.startService() 啟動Service

其生命週期為context.startService() ->onCreate()- >onStart()->Service running-->(如果調用context.stopService() )->onDestroy() ->Service shut down

如果Service還沒有運行,則android先調用onCreate()然後調用onStart();
如果Service已經運行,則只調用onStart(),所以一個Service的onStart方法可能會重複調用多次。 調用stopService的時候直接onDestroy,
如果是調用者自己直接退出而沒有調用stopService的話,Service會一直在後台運行。
該Service的調用者再啟動起來後可以通過stopService關閉Service。
所以調用startService的生命週期為:onCreate --> onStart(可多次調用) --> onDestroy

 

對於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。
一但銷毀activity它就結束,如果按home把它放到後台,那他就不退出。

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

ps:Service 類兩種啟動方法:

? Context.startService()
? Context.bindService() 

1.  在同一個應用任何地方調用 startService() 方法就能啟動 Service 了,然後系統會回調 Service 類的 onCreate() 以及 onStart() 方法。這樣啟動的 Service 會一直運行在後台,直到 Context.stopService() 或者 selfStop() 方法被調用。
另外如果一個 Service 已經被啟動,其他代碼再試圖調用 startService() 方法,是不會執行 onCreate() 的,但會重新執行一次 onStart() 。 

2. 另外一種 bindService() 方法的意思是,把這個 Service 和調用 Service 的客戶類綁起來,如果調用這個客戶類被銷毀,Service 也會被銷毀。用這個方法的一個好處是,bindService() 方法執行後 Service 會回調上邊提到的 onBind() 方發,你可以從這裡返回一個實現了 IBind 介面的類,在用戶端操作這個類就能和這個服務通訊了,比如得到 Service 啟動並執行狀態或其他動作。如果 Service 還沒有運行,使用這個方法啟動 Service 就會 onCreate() 方法而不會調用 onStart()。

總結: 

1. startService()的目的是回調onStart()方法,onCreate() 方法是在Service不存在的時候調用的,如果Service存在(例如之前調用了bindService,那麼Service的onCreate方法已經調用了)那麼startService()將跳過onCreate() 方法。

2.  bindService()目的是回調onBind()方法,它的作用是在Service和調用者之間建立一個橋樑,並不負責更多的工作(例如一個Service需要串連伺服器的操作),一般使用bindService來綁定到一個現有的Service(即通過StartService啟動的服務)。

 

Android activity和service的生命週期對比

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.