【安卓学习_3】活动的生存周期

安卓中,不同的活动是通过类似栈的结构来进行切换的,即最晚发生的活动位于栈顶,当这个操作结束,从栈顶弹出该活动,再次执行新的栈顶活动。

其主要有以下的状态(图片源于菜鸟教程),这个是个安卓中活动的生存周期过程,类似Java中的 Servlet的周期,不过更复杂些。
在这里插入图片描述

其中,每个活动周期的使用场景为:
1 onCreate() 这是第一个回调,在活动第一次创建时调用,仅在整个活动中调用一次,用来创建整个工程
2 onStart() 这个回调在活动为用户可见时被调用,开始我们的操作
3 onResume() 这个回调在应用程序与用户开始可交互的时候调用,也就是继续执行,在活动创建结束后,会依次经过 onCreate ->onStart->onResume,等待继续操作
4 onPause() 被暂停的活动无法接受用户输入,不能执行任何代码。当前活动将要被暂停,上一个活动将要被恢复时调用,一般在没有全屏覆盖情况下,让底层的活动先暂停
5 onStop() 当活动不在可见时调用,相当于在安卓页面中发生了页面跳转
6 onDestroy() 当活动被系统销毁之前调用,也只调用一次,用来销毁活动
7 onRestart() 当活动被停止以后重新打开时调用
在这里插入图片描述
在这里插入图片描述

具体实例

代码部分,包括三个活动,MainActivity DialogActivity SecondActivity ,其中MainActivity 和 SecondActivity 之间发生页面的切换,MainActivity DialogActivity 两者之间不发生页面切换,只是DialogActivity 会浮于 MainActivity 上方。

1 MainActivity

 //声明组件名称
    private Button button1,button2;
    private final String TAG="MainActivity";
    //创建
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init_view();
        Log.d(TAG,"onCreate()");
    }
    //开始
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG,"onStart()");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG,"onResume()");
    }
    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG,"onPause()");
    }
    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG,"onStop()");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG,"onDestroy()");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG,"onRestart()");
    }
    /**
     * 初始化视图
     */
    public void init_view(){
        //根据id加载按钮对象
        button1=findViewById(R.id.button1);//SecondActivity
        button2=findViewById(R.id.button2);
        // 为按钮添加事件监听器
        button1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                //接收来自其他页面的返回值
                Intent intent=new Intent(MainActivity.this,SecondActivity.class);
                startActivityForResult(intent,1);
            }
        });
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,DialogActivity.class);
                startActivity(intent);
            }
        });
    }

**2 DialogActivity SecondActivity 为两个空的 Activity **


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);
    }

MainActivity 对应的 activity_main 布局文件中添加按钮,同时整体布局更改为LinearLayout 布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="SecondActivity" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="DialogActivity" />

</LinearLayout>

DialogActivity 对应的 AndroidManifest.xml 设置为对话弹出框的布局

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

        </activity>

SecondActivity 对应的 activity_second 布局文件中添加按钮

 <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="button2"
        />

主页面布局

在这里插入图片描述

运行过程

1 打开运行虚拟机,打印的日志为:
D/MainActivity: onCreate()
D/MainActivity: onStart()
D/MainActivity: onResume()

2 点击 SecondActivity按钮时:
D/MainActivity: onPause()
D/MainActivity: onStop()
3 点击下面的返回按钮时:
D/MainActivity: onRestart()
onStart()
D/MainActivity: onResume()

4 点击 DialogActivity 时
D/MainActivity: onPause()
在这里插入图片描述

5 对话框运行结束:
D/MainActivity: onResume()

以上是关于Android 生存周期的简要介绍,有问题请指正!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值