1. 程式人生 > >Android-Activity生命週期

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();

    @Override
    
protected 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()"); } @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()"); } 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