Activity生命週期

 

方法 描述 Killable? Next
onCreate() 在Activity開始時調用。這是大多數初始化應該做的:調用setContentView(int)來填充Activity的UI,使用findViewById以編程方式與UI中的小部件交互,調用managedQuery(Uri、String[]、String、String[]、String)來檢索顯示數據的遊標,等等。
您可以在這個函數中調用finish,在這種情況下,onDestroy()將在onCreate之後立即調用,而不執行活動生命週期的任何其他部分(onStart、onResume、onPause等)。
No onStart()
onRestart() 噹噹前Activity被重新顯示給用戶(用戶已導航回該Activity)時,在onStop之後調用。然後是onStart和onResume。
對於使用原始遊標對象的Activity(而不是通過managedQuery(Uri、String[]、String、String[]、String)創建它們),通常應該在這裏重新查詢遊標(因爲您在onStop中禁用了它)
No onStart()
onStart() 在onCreate之後調用,或者在onRestart之後調用,此時Activity已經停止,但是現在再次顯示給用戶。接下來是onResume。用戶可見 No onResume()or onStop()
onResume() 在onRestoreInstanceState、onRestart或onPause之後調用,以便您的活動開始與用戶交互。這是一個開始動畫打開獨佔訪問設備(如相機)等的好地方。
請記住,onResume並不是顯示您的活動對用戶可見的最佳指示器;系統窗口,如鍵盤保護,可能在前面。使用onWindowFocusChanged來確定您的活動對用戶是可見的(例如,恢復遊戲)。用戶可交互
No onPause()
onPause() 作爲活動生命週期的一部分調用,當一個活動進入後臺,但尚未被殺死時調用。onResume的對應版本。
當活動B在活動A之前啓動時,將在A上調用這個回調。B直到A的onPause返回時纔會創建,所以這裏不要做任何耗時的操作
這個回調主要用於保存活動正在編輯的任何持久狀態,向用戶顯示一個“editin place”模型,並確保如果沒有足夠的資源啓動新活動而不首先殺死這個活動,則不會丟失任何東西。這也是一個很好的地方,可以執行停止動畫和其他消耗大量CPU的操作,以便儘可能快地切換到下一個活動,或者關閉獨佔訪問的資源,比如攝像頭。
在系統需要更多內存的情況下,它可能會終止暫停的進程來回收資源。因此,您應該確保在從該函數返回時保存了所有狀態。通常onSaveInstanceState用於在活動中保存每個實例的狀態,該方法用於存儲全局持久數據(在內容提供程序、文件等中)。
在接收到這個調用之後,您通常會接收到一個對onStop的後續調用(在下一個活動已經恢復並顯示之後),但是在某些情況下,會有一個對onResume的直接調用,而不需要經過停止狀態。用戶不可交互
Pre-Build.VERSION_CODES.HONEYCOMB onResume()or
onStop()
onStop()

當用戶不再可見時調用。接下來,您將收到onRestart、onDestroy或什麼都不做,這取決於稍後的用戶活動。

可以做一些稍微耗時的操作。用戶不可見

Yes onRestart()or
onDestroy()
onDestroy() 在銷燬Activity之前執行最後的清理。這可能是因爲活動即將結束(有人在其上調用finish),也可能是因爲系統臨時銷燬了活動的這個實例以節省空間。您可以使用isfinish方法來區分這兩個場景。
注意:
不要指望調用此方法來保存數據!例如,如果一個活動正在內容提供程序中編輯數據,那麼這些編輯應該在onPause或onSaveInstanceState中提交,而不是在這裏。此方法通常用於釋放與活動關聯的線程之類的資源,以便被銷燬的Activity不會在其應用程序的其餘部分仍在運行時留下這些資源。在某些情況下,系統只會在不調用該方法(或任何其他方法)的情況下終止Activity的宿主進程,因此不應該使用該方法來做一些在進程消失後仍然存在的事情。
  nothing

啓動Activity的請求會由Instrumentation來處理,然後它通過Binder向AMS發請求,AMS內部維

護着一個ActivityStack並負責棧內的Activity的狀態同步,AMS通過ActivityThread去同步

Activity的狀態從而完成生命週期方法的調用。

Activity異常情況下的數據保存:

onRestoreInstanceState或者onCreate,二者的區別是:onRestoreInstanceState一旦被調用,其參數Bundle savedInstanceState一定是有值的,我們不用額外地判斷是否爲空;但是onCreate不行,onCreate如果是正常啓動的話,其參數Bundle savedInstanceState爲null,所以必須要額外判斷

Activity的優先級:

1)前臺Activity:正在和用戶交互的activity。

2)用戶可見但不可交互的Activity。

3)後臺Activity。

當系統內存不足時,系統就會按照上述優先級去殺死目標Activity所在的進程,並在後續通過onSaveInstanceState和onRestoreInstanceState來存儲和恢復數數據

State diagram for an Android Activity Lifecycle.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章