Android小Demo理解活動的生命週期

1.前期準備

1.1創建三個活動 MainActivity,NormalActivity,DialogActivity

創建活動
在這裏插入圖片描述在這裏我創建的是三個EmptyActivity,生成了三個對應的Layout

1.2爲Dialog添加主題

接下來要在配置文件Mainfest.xml內爲DialogActivity設置一個Dialog主題,這樣做的目的是爲了讓Dialog頁面在onStart進入onResume狀態後,跳轉前的頁面MainActivity能夠處於onPause的狀態。

<activity android:name=".DialogActivity"
            android:theme="@style/Theme.AppCompat.Dialog">
            android:Theme=
        </activity>

1.3添加按鈕跳轉活動

然後我們在MainActivity的Layout中添加兩個按鈕,一個按鈕期望跳轉至普通活動另一個按鈕期望跳轉至Dialog活動
activity_main.xml文件如下:

  <Button
        android:id="@+id/normal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打開新的普通活動" />

    <Button
        android:id="@+id/dialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打開一個對話框式活動" />

效果如下:
在這裏插入圖片描述

1.4重寫方法,爲按鈕綁定監聽事件

接下來要在MainActivity.class內爲按鈕綁定監聽事件進行頁面跳轉,並且我們要重寫onCreat()/onStrat()/onStop()/onPause()/onDestroy()和onResume(),另外兩個頁面對方法重寫如法炮製

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG,"onCreate");
        Button normal_button=findViewById(R.id.normal);
        normal_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,NormalActivity.class);
                startActivity(intent);
            }
        });
        Button dialog_button=findViewById(R.id.dialog);
        dialog_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,DialogActivity.class);
                startActivity(intent);
            }
        });
    }

    @Override
    protected void onStart()
    {
        super.onStart();
        Log.d(TAG,"onStrat");
    }
        @Override
    protected void onPause()
    {
        super.onPause();
        Log.d(TAG,"onPause");
    }
    @Override
    protected void onResume()
    {
        super.onResume();
        Log.d(TAG,"onResume");
    }
    @Override
    protected void onStop()
    {
        super.onStop();
        Log.d(TAG,"onStop");
    }
    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        Log.d(TAG,"onDestory");
    }
    @Override
    protected void onRestart()
    {
        super.onRestart();
        Log.d(TAG,"onRestart");
    }

}

重寫好後準備工作就完成啦,可以運行程序並觀察Logcat啦

2.運行並觀察結果

當運行程序後彈出界面MainActivity

在這裏插入圖片描述
此時在Logcat中可以看到如下信息:

2020-03-15 01:45:05.332 11016-11016/com.example.javaproject D/MainActivity: onCreate
2020-03-15 01:45:05.464 11016-11016/com.example.javaproject D/MainActivity: onStrat
2020-03-15 01:45:05.473 11016-11016/com.example.javaproject D/MainActivity: onResume

onCreate說明MainActivity創建活動完畢,接下來進入到onStart的啓動階段,然後進入到onResume階段,在該階段下我們在程序內可以看到界面。也就是開始和用戶進行交互,此時該頁面處於棧頂。

然後我們點擊第一個按鈕加粗樣式點擊該按鈕後,期望進入到新的活動中,新的活動NormalActivity能夠完全遮擋住MainActivity
在這裏插入圖片描述成功進入新頁面,此時在logcat中追蹤MainActivity的信息和NormalActivity的信息

2020-03-15 01:55:25.220 12500-12500/com.example.javaproject D/MainActivity: onStop

此時MainActivity處於onStop停止狀態
觀察一下NormalActivity的信息

2020-03-15 01:55:24.948 12500-12500/com.example.javaproject D/NormalActivity: onCreat
2020-03-15 01:55:24.951 12500-12500/com.example.javaproject D/NormalActivity: onStrat
2020-03-15 01:55:24.960 12500-12500/com.example.javaproject D/NormalActivity: onResume

此時NormalActivity和MainActivity一樣經歷了onCreat,onSrarr和onResume

接下來點擊返回到MainActivity
回到了最初的頁面
此時Logcat追蹤NormalActivity顯示

2020-03-15 01:58:18.683 12500-12500/com.example.javaproject D/NormalActivity: onStop
2020-03-15 01:58:18.685 12500-12500/com.example.javaproject D/NormalActivity: onDestory

NormalActivity停止並銷燬,這個過程是將該活動出棧,此時MainActivity重新置於棧頂

2020-03-15 01:59:02.842 12500-12500/com.example.javaproject D/MainActivity: onRestart
2020-03-15 01:59:02.844 12500-12500/com.example.javaproject D/MainActivity: onStrat
2020-03-15 01:59:02.846 12500-12500/com.example.javaproject D/MainActivity: onResume

MainActivity onReatart並重復onStart和onResume階段

那麼如果我們點擊Dialog會發生什麼呢?
點擊按鈕後DilogActivity的Logcat顯示如下:

2020-03-15 02:02:09.659 12500-12500/com.example.javaproject D/DialogActivity: onCreate
2020-03-15 02:02:09.661 12500-12500/com.example.javaproject D/DialogActivity: onStrat
2020-03-15 02:02:09.667 12500-12500/com.example.javaproject D/DialogActivity: onResume

不多贅述
但是我們觀察MainActivity的Logcat它會顯示什麼呢?

2020-03-15 02:04:09.688 13556-13556/com.example.javaproject D/MainActivity: onResume
2020-03-15 02:04:11.801 13556-13556/com.example.javaproject D/MainActivity: onPause

這裏出現了onPause!
這就意味着目前MainActivity處於一個暫停狀態
在這裏插入圖片描述爲什麼此時MainActivity處於暫停狀態,是因爲Dialog活動啓動並開始交互後並沒有完全佔據屏幕,此時MainActivity我們也可以看到但是無法進行交互,所以MainActivity處於Pause狀態。此時DialogActivity處於棧頂。

通過這個簡單的Demo,就可以簡單的瞭解活動的生命週期,瞭解活動的生命週期有助於我們在開發中寫出更加流暢的app。加油!!!!

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