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。加油!!!!

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