Activity生命週期與狀態保存

彈出系統對話框,程序仍部分可見

onPause

對話框消失時

onResume

 

調用一個新的Activity,老的Activity不可見時

onPause->onStop

重新的Activity返回時

onRestart->onStart->onResume

 

正常運行的Activity正常結束時

onPause->onStop->onDestroy

 

onResume

這不是用來判斷Activity是否對用戶可見的最好方法。即便這個方法被調用後,也可能有一些系統窗口在咱們的Activity前面,如keyguard。onWindowFocusChanged是最準確的。

對於一些沒有經過相似managedQuery(android.net.Uri , String[], String, String[], String)這樣的方法交給系統管理的Cursor來講,這個時候應該從新獲取。由於,按照理論來講,在onStop時,你把它們deactive了。

 

假設Activity A啓動一個Activity B,那麼,系統會先調用A的onPause,而後調用B的onCreate、onStart、onResume。而後纔會調用A的onStop方法。

所以,在舊的Activity的onPause返回以前,新的Activity不會被建立。所以,這裏不要作太費時的事情。

onPause方法中建議作的操做有:中止動畫這樣大量消耗CPU的動做,使Activity的切換更快速;關掉相機這樣獨佔式訪問的資源。

 

後臺Activity由於資源緊張被系統終止時,不管是否可見,都不會調用任何方法,除onSaveInstanceState。

 

經過android.os.Process.killProcess殺死時,不會調用任何方法,包括onSaveInstanceState.

 

 

關於狀態保存:android

onSaveInstanceState動畫

當Activity被切換到後臺(部分可見或者不可見,但己不與用戶交互)時,就有可能由於資源緊張而被kill,會調用這個方法。spa

若是這個方法被調用的話,會在onStop以前,但與onPause誰先誰後不肯定。.net

這個方法的默認實現中,保存了當前可見的View樹的狀態,重寫時,若是要保留這個特性的話,調一下super.onSaveInstanceState。xml

 

onRestoreInstanceState生命週期

這個方法在onStart和onResume之間被調用。資源

絕大部分狀況下,使用onCreate就能夠恢復上一次保存的狀態 it

 

旋轉屏幕的時候須要對一些數據進行保存。有以下方法:io

 1.AndroidManifest.xml配置文件中的Activity標籤下面添加:android:configChanges="orientation|keyboardHidden"後臺

而後在activity中重寫onConfigurationChanged()方法,每次旋轉時會調用該方法,能夠再該方法中處理數據[不管你怎麼旋轉都不會銷燬當前的Activity,只會執行onConfigurationChanged()方法,所以只要在該方法中處理響應的數據便可

生命週期以下:

onCreate->onStart->onResume->onConfigurationChanged()->

onConfigurationChanged() 

2. 若是銷燬當前的Activity,那麼就要重寫Activity的兩個方法onSaveInstanceState()和 onRestoreInstanceState(),顯然從方法名字能夠看出一個是保存

數據,一個是還原數據,生命週期以下:

 onCreate->onStart->onResume->onSaveInstanceState

->onPause->onStop->onDestroy->onCreate->onStart

->onRestoreInstanceState->onResume 

相關文章
相關標籤/搜索