標籤:
從以下幾個方面詳細說一下Activity的生命週期:
1.回到主畫面再開啟和退出程式的時候。
2.旋轉螢幕的時候。
3.開啟其它的Activity的情況。
4.開啟一個Layou透明的Activity的情況。
原始碼:MyApplication.7z
先來一張Activity的生命週期圖鎮樓。
建立一個工程,實現的生命週期的所有方法,只是在方法裡添加一個列印輸出,讓我們能清楚的看到
當前Activity執行的生命週期回調方法。
@Override protected void onStart() { System.out.println("onStart"); super.onStart(); } @Override protected void onResume() { System.out.println("onResume"); super.onResume(); } @Override protected void onPause() { System.out.println("onPause"); super.onPause(); } @Override protected void onStop() { System.out.println("onStop"); super.onStop(); } @Override protected void onRestart() { System.out.println("onRestart"); super.onRestart(); } @Override protected void onDestroy() { System.out.println("onDestroy"); super.onDestroy(); }
當我們第一次運行我們的程式,app進入首頁面,看一下logcat的輸出:執行了onCreate、onStart、onResume方法。
1.返回到主畫面的時候。
我們按一下Home鍵返回到主畫面,看一下它的執行的動作。
執行了onPause和onStop方法。點擊我們的app,進入主程式發現它執行了onRestart、onStart和onResume。
我們第一次運行app的時候是沒有執行onRestart方法的。和我們看官方的文檔一至,在Activity被停止後再次啟用的時候
才會被調用。
Called after your activity has been stopped, prior to it being started again. Always followed by onStart()
我們點擊關閉app看一下它會回調哪些生命週期函數。
這時它會執行onStop和onDestory方法。至此我們走完了一個最簡單的生命週期流程。
2.旋轉螢幕的時候。
運行我們的應用程式,和第一次開啟一樣調用create,start.和resume
接下來我們旋轉一下螢幕看一下會發生什麼。
一下子。調用了好多。它是先把Activity關閉掉,再重新new一個activity。這裡就要注意了,如果我們的程式
需要支援旋轉螢幕,那我這就要調用onSaveInstanceState()方法來儲存當前的資料狀態,在onCreate方法裡恢複
這些狀態的值。
3.開啟一個其它的Activity.
修改一個我們的程式,在首頁面加一個按鈕,再加一個Activity。
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Button" android:id="@+id/button" android:layout_below="@+id/textView" android:layout_centerHorizontal="true" />
點擊按鈕的時候開啟我們新添加的Activity
final Button btn = (Button) findViewById(R.id.button); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, MessageTip.class); startActivity(intent); } });
運行我們的App.還是和之前一樣調用 onCreate(),onStart() 和onResume.
然後在首頁面上按一下我們的按鈕,開啟另一個Activity.
按返回鍵看一下。
它會調用onRestart(),onStart(),onResume。這樣和我們講的方法1.進入主畫面再返回是一樣的。
4.開啟透明的Activity.
透明的Activity我們做一個簡單的,直接在AndroidManifest.xml裡添加一個行代碼
再運行我們的app.調用那三個方法。
點擊首頁上的按鈕開啟透明的Activity.看一下調用了哪些函數。
只調用了onPause。點擊返回
調用了onResume()方法。
發現沒開啟透明的Activity,原Acitvity沒有調用onStop()方法,關閉透明的Activity。原Activity沒有調用onRestart()
和onStart()方法。
ok就到這裡,activity的生命週期非常重要!activity的生命週期非常重要!activity的生命週期非常重要!
重要的事情說三遍!!
原始碼:MyApplication.7z
詳解 Android Activity 生命週期