處理Activity的生命週期事件

 

 

這是官網的Activity生命週期結構圖,從這個圖中能夠看出Activity的生命週期函數挺多的,其實他的生命週期和以往咱們看到的其餘組件的生命週期同樣,都是從建立到銷燬的過程,只不過之間多加了幾個生命週期函數,將他的生命週期細化了。android

首先看到的事onCreate()函數,顧名思義這個函數在Activity開始建立時調用,能夠在其中定義一些初始化操做。接下來是onStart()方法,這個方法在Activity開始被執行時調用,它緊隨onCreate()方法以後調用,接着是onResume()方法,這個方法對咱們來講算是比較陌生的,這個方法是在該Activity或得用戶輸入焦點時被調用,這個或得用戶輸入焦點有點很差理解,若是咱們用過Android手機或者其餘系統的手機時,常常會看到有些窗口雖然能看到但沒法對他進行操做,這時的Activity就沒有或得用戶焦點。當這個方法調用後Activity開始真正的運行了,在Activity正在運行時用戶激活了另外一個Activity,這時將調用第一個Activity的onPause()方法,能夠理解爲第一個Activity被暫停了,這個時候若是系統的內存不夠用(手機內存不夠用的狀況常常發生),第一個Activity的進程可能被殺死(什麼時候被殺死是由系統決定的,不須要咱們參入),當下次咱們再運行第一個Activity時就須要從新建立這個Activity,那就又須要調用onCreate()方法。若是在這個Activity沒有被殺死的狀況下,咱們從新調用第一個Activity,就會直接調用它的onResume()方法後開始運行。若是第一個Activity好久都沒有獲得再次運行機會,就會調用onStop()被中止,這時若是Activity又或得用戶輸入焦點,就會調用onRestart()方法,從新開始執行這個Activity,或者被系統殺死,不然調用onDestroy()方法銷燬Activity。這整個過程看起來有點繞,其實在實際開發中咱們不多會用到全部的生命週期函數,但咱們要弄清它的原理,在使用時知道因此然就好了。函數

 ------------------------------------------------------------------------------------------------------------------------------------------spa

一些Activity可能比另一些要重要,好比一個打進來的電話比正在玩的遊戲重要;另外,android做爲手機系統,內存小於臺式機或者筆記本。線程

有時,當前的Activity可能會發現被關閉,是由於其餘Activity須要運行,系統須要當前Activity釋放內存資源。能夠將這些看作是生命週期,當前的Activity消亡了,其餘的則活了。對象

Activity的狀態生命週期

  1. 活躍的(active):用戶啓動了Activity,並正在前臺運行中;
  2. 暫停(pause):用戶啓動了Activity,正在運行,並且可見,可是一個通知或者其餘的提示出如今屏幕的最上層,此時能夠看到Activity可是不能和它交互。好比有電話進來,用戶能夠選擇接聽或者忽略;
  3. 中止(stop):用戶啓動了Activity,正在運行,可是由於其餘Activity的啓動或者切換而隱藏。這時該activity不能直接操做,除了經過通知;
  4. 消亡(dead):activity不在是啓動的,好比電話作了重置(reset),或者activity被終止,好比由於內存不夠了。

與activity狀態相關的方法遊戲

android系統經過調用一些約定的activity方法,來轉換activity的狀態。進程

onCreate()方法和onDestroy()方法事件

onCreate()方法被調用的狀況:內存

  1. 當activity第一次被建立的時候,帶null參數;
  2. 若是activity已經運行過,後來被kill掉,將調用帶Bundle參數的onCreate()方法,該參數來源於onSaveInstanceState()
  3. 當activity處於不一樣的設備狀態時,好比從豎顯到橫顯,將會調用onCreate()方法重建activity

onDestroy被調用的狀況,即當activity關閉的狀況:

  1. activity執行了finish()方法
  2. android須要RAM,可能會緊急關閉activity

須要注意的是,若是內存十分緊急,可能不會調用onDestroy方法,而是系統不顧一切的關閉掉,好比來電話的時候。onDestroy()一般用於釋放在onCreate()方法中得到的資源。

onStart()、onRestart()和onStop()方法

activity在前臺執行,可能由於是第一次啓動,或者從隱藏狀態從新帶回前臺(好比其餘的activity或者來電話)。以上狀況都會執行onStart()。

onRestart()方法會在activity已經中止,從新開始的時候調用。

onStop()方法在activity要中止的時候調用。

onPause()和onResume()方法

onResume()方法在activity要前臺運行的時候執行,好比第一次初始啓動後,或者從中止(stop)狀態從新開始,或者當一個彈出對話框被清除(好比來電話)。這是刷新UI的最佳位置,能夠在此方法中刷新視圖,或者調用後臺線程更新UI。

相應的,當其餘activity奪取了當前activity的控制權後,須要調用當前activity的onPause()方法。在此方法中,應該取消任何在onResume()方法中作的事情。好比關閉後臺線程,釋聽任何獨佔方位的資源(好比攝像頭)。

一旦onPause()方法被調用,android系統將保留對此activity所在進程在任什麼時候刻kill的權利。所以在此狀態下不會可靠的收到未來的事件消息。

對狀態的合理處理

通常狀況下,上述方法會處理應用程序通用的事情。好比經過onCreate()方法關聯出最後的UI,經過onPause()方法關閉後臺線程。

但有時須要爲activity保存狀態。好比有個計算器程序activity,計算結果後,可能又作了其餘事情,用戶回頭想查剛纔計算的結果。由於計算器有可能由於內存稀缺而關閉。

這時須要使用onSaveInstanceState()方法,android會經過該方法保存狀態,能夠覆蓋該方法保存本身的狀態值到Bundle。

而後經過onCreate()或者onRestoreInstanceState()方法獲得Bundle對象實例恢復這些自定義狀態。

相關文章
相關標籤/搜索