Android-Activity生命週期
MainActivity程式碼:
package liudeli.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; public class MainActivity extends Activity { private final String TAG = MainActivity.class.getSimpleName(); @Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(TAG, TAG + "--->onCreate()"); } @Override protected void onRestart() { super.onRestart(); Log.d(TAG, TAG + "--->onRestart()"); } @Overrideprotected void onStart() { super.onStart(); Log.d(TAG, TAG + "--->onStart()"); } @Override protected void onResume() { super.onResume(); Log.d(TAG, TAG + "--->onResume()"); } @Override protected void onPause() { super.onPause(); Log.d(TAG, TAG+ "--->onPause()"); } @Override protected void onStop() { super.onStop(); Log.d(TAG, TAG + "--->onStop()"); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, TAG + "--->onDestroy()"); } public void startActivity2(View view) { startActivity(new Intent(this, MainActivity2.class)); } }
MainActivity2程式碼:
package liudeli.activity; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class MainActivity2 extends Activity { private final String TAG = MainActivity2.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); Log.d(TAG, TAG + "--->onCreate()"); } @Override protected void onRestart() { super.onRestart(); Log.d(TAG, TAG + "--->onRestart()"); } @Override protected void onStart() { super.onStart(); Log.d(TAG, TAG + "--->onStart()"); } @Override protected void onResume() { super.onResume(); Log.d(TAG, TAG + "--->onResume()"); } @Override protected void onPause() { super.onPause(); Log.d(TAG, TAG + "--->onPause()"); } @Override protected void onStop() { super.onStop(); Log.d(TAG, TAG + "--->onStop()"); } @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG, TAG + "--->onDestroy()"); } }
1.點選桌面圖示開啟-->MainActivity
12-11 08:44:40.961 2284-2284/liudeli.activity D/MainActivity: MainActivity--->onCreate()
12-11 08:44:40.964 2284-2284/liudeli.activity D/MainActivity: MainActivity--->onStart()
12-11 08:44:40.964 2284-2284/liudeli.activity D/MainActivity: MainActivity--->onResume()
2.點選返回back建--->MainActivity
12-11 08:46:30.265 2284-2284/liudeli.activity D/MainActivity: MainActivity--->onPause()
12-11 08:46:30.656 2284-2284/liudeli.activity D/MainActivity: MainActivity--->onStop()
12-11 08:46:30.656 2284-2284/liudeli.activity D/MainActivity: MainActivity--->onDestroy()
3.在MainActivity點選啟動MainActivity2
12-11 08:48:53.919 2284-2284/liudeli.activity D/MainActivity: MainActivity--->onPause()
12-11 08:48:54.171 2284-2284/liudeli.activity D/MainActivity2: MainActivity2--->onCreate()
12-11 08:48:54.172 2284-2284/liudeli.activity D/MainActivity2: MainActivity2--->onStart()
12-11 08:48:54.172 2284-2284/liudeli.activity D/MainActivity2: MainActivity2--->onResume()
12-11 08:48:54.720 2284-2284/liudeli.activity D/MainActivity: MainActivity--->onStop()
4.在MainActivity2點選返回back鍵--->MainActivity
12-11 08:53:27.059 2284-2284/liudeli.activity D/MainActivity2: MainActivity2--->onPause()
12-11 08:53:27.062 2284-2284/liudeli.activity D/MainActivity: MainActivity--->onRestart()
12-11 08:53:27.062 2284-2284/liudeli.activity D/MainActivity: MainActivity--->onStart()
12-11 08:53:27.062 2284-2284/liudeli.activity D/MainActivity: MainActivity--->onResume()
12-11 08:53:27.492 2284-2284/liudeli.activity D/MainActivity2: MainActivity2--->onStop()
12-11 08:53:27.492 2284-2284/liudeli.activity D/MainActivity2: MainActivity2--->onDestroy()
5.在MainActivity點選啟動MainActivity2 注意⚠️:此時的MainActivity2是對話方塊)主題模式,意思就是MainActivity還可見的
Log日誌列印資訊:發現MainActivity只是暫停了onPause(),並沒有onStop(),因為MainActivity是可見的,並沒有完全覆蓋住,所以不會呼叫onStop()
12-11 09:01:16.527 3529-3529/liudeli.activity D/MainActivity: MainActivity--->onPause()
12-11 09:01:16.598 3529-3529/liudeli.activity D/MainActivity2: MainActivity2--->onCreate()
12-11 09:01:16.599 3529-3529/liudeli.activity D/MainActivity2: MainActivity2--->onStart()
12-11 09:01:16.599 3529-3529/liudeli.activity D/MainActivity2: MainActivity2--->onResume()
在MainActivity2(對話方塊主題) 中點選返回back鍵:
發現規律:MainActivity--->onResume() 為什麼只調用了 onResume(),沒有呼叫onRestart()和onStart(),因為MainActivity 沒有執行過 onStop(),所以就不會執行這兩個方法
12-11 09:09:20.348 3529-3529/liudeli.activity D/MainActivity2: MainActivity2--->onPause()
12-11 09:09:20.359 3529-3529/liudeli.activity D/MainActivity: MainActivity--->onResume()
12-11 09:09:20.377 3529-3529/liudeli.activity D/MainActivity2: MainActivity2--->onStop()
12-11 09:09:20.377 3529-3529/liudeli.activity D/MainActivity2: MainActivity2--->onDestroy()
自己理解到Activity生命週期圖:
總結:
1.第一次開啟Activity會執行初始化一次 onCreate() ,所以在onCreate方法裡面左初始化工作最合適
2.當Activity被殺死或者被回收,或者被back返回鍵後,等等,onDestroy方法才會被呼叫,和onCreate很像,只會被執行一次,就像動物 只出生一次,只死一次
3.只有執行onResume方法後,介面才會被繪製出來,onCreate ---> onStart ---> onResume / onRestart---> onStart ---> onResume
4.當前Activity不在最頂端,就會執行onPause方法,當Activity被完全覆蓋後,就會執行onStop方法。onPause---> onStop / onPause ---> onStop ---> onDestroy