Activity有三個狀態:當它在屏幕前臺時(位于當前任務堆棧的頂部),它是激活或運行狀態。它就是響應用戶操作的Activity。 當它上面有另外一個Activity,使它失去了焦點但仍然對用戶可見時,它處于暫停狀態。在它之上的Activity沒有完全覆蓋屏幕,或者是透明的,被暫停的Activity仍然對用戶可見,并且是存活狀態(它保留著所有的狀態和成員信息并保持和窗口管理器的連接)。如果系統處于內存不足時會殺死這個Activity。當它完全被另一個Activity覆蓋時則處于停止狀態。它仍然保留所有的狀態和成員信息。然而對用戶是不可見的,所以它的窗口將被隱藏,如果其它地方需要內存,則系統經常會殺死這個Activity。
當Activity從一種狀態轉變到另一種狀態時,會調用以下保護方法來通知這種變化:
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
這七個方法定義了Activity的 完整生命周期 。實現這些方法可以幫助我們監視其中的三個嵌套生命周期循環:
Activity的完整生命周期自第一次調用onCreate()開始,直至調用onDestroy()為止。
Activity在onCreate()中設置所有“全局”狀態以完成初始化,
而在onDestroy()中釋放所有系統資源。
例如,如果Activity有一個線程在后臺運行從網絡下載數據,它會在onCreate()創建線程,而在 onDestroy()銷毀線程。
Activity的
可視生命周期
自onStart()調用開始直到相應的onStop()調用結束。在此期間,用戶可以在屏幕上看到Activity,
盡管它也許并不是位于前臺或者也不與用戶進行交互。在這兩個方法之間,我們可以保留用來向用戶顯示這個Activity所需的資源。
例如,當用戶不再看見我們顯示的內容時,我們可以在onStart()中注冊一個BroadcastReceiver來監控會影響UI的變化,而在onStop ()中來注消。onStart() 和 onStop() 方法可以隨著應用程序是否為用戶可見而被多次調用。
Activity的
前臺生命周期
自onResume()調用起,至相應的onPause()調用為止。在此期間,Activity位于前臺最上面并與用戶進行交互。
Activity會經常在暫停和恢復之間進行狀態轉換——例如當設備轉入休眠狀態或者有新的Activity啟動時,將調用onPause() 方法。
當Activity獲得結果或者接收到新的Intent時會調用onResume() 方法。
Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它們不同于 onCreate()、onPause()等生命周期方法,它們并不一定會被觸發。
當應用遇到意外情況(如:內存不足、用戶直接按Home鍵)
由系統銷毀一個Activity時,onSaveInstanceState()才會被調用
。
但是當用戶主動去銷毀一個Activity時,例如在應用中按返回鍵,onSaveInstanceState()就不會被調用。因為在這種情況下,
用戶的行為決定了不需要保存Activity的狀態。通常onSaveInstanceState()只適合用于保存一些臨時性的狀態,而onPause()適合用于數據的持久化保存。
另外,當屏幕的方向發生了改變, Activity會被摧毀并且被重新創建,如果你想在Activity被摧毀前緩存一些數據,并且在Activity被重新創建后恢復緩存的數據。
可以重寫Activity的 onSaveInstanceState() 和 onRestoreInstanceState()方法,如下:
public class PreferencesActivity extends Activity {
private String name;
protected void onRestoreInstanceState(Bundle savedInstanceState) {
name = savedInstanceState.getString("name"); //被重新創建后恢復緩存的數據
super.onRestoreInstanceState(savedInstanceState);
}
protected void onSaveInstanceState(Bundle outState) {
outState.putString("name", "liming");//被摧毀前緩存一些數據
super.onSaveInstanceState(outState);
}
}
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
