android五大组件之activity生命周期(LifeCycle)

上一篇博客概述了基本的Activity的启动流程以及需要注意事项,如果有不知道activity是什么的可以先去看看,链接android五大组件之activity初探

今天我要讨论的是activity生命周期相关问题, 生命周期其实很好理解,就是从存在到消亡的过程。这也非常符合自然规律,好比春天百花齐放,秋天落叶归根,人从出生到走向死亡也都是这样一个过程。

activity主要分为四个状态
- 运行
- 暂停
- 停止
- 销毁

先说运行,也就是activity处于栈顶,用户可交互状态即为运行状态。暂停状态是当activity被透明的activity或者dialog遮挡,此时的状态为暂停。停止状态是当用户按下home键应用退出前台时的状态。销毁状态是从栈顶位置移除或不处于栈顶时,比如用户按下返回键,或调用finish()方法,此时的状态是销毁状态。

相信很多人都看过下面这张图,这是google android developer官方文档对activity lifecycle的介绍文档中的一张图。

activity lifecycle
总体上来浏览下这个过程,总共有四个场景:

  1. 启动一个activity:onCreate->onStart->onResume
  2. 当按下home键退出当前activity: onPause->onStop
  3. 重新回到activity: onRestart->onStart->onResume
  4. 按下返回键或调用finish()方法:onPause->onStop->onDestory

当一个新的Activity被启动后,首先调用的是onCreate方法,这个方法可用来初始化布局和做一些初始化数据工作或者恢复数据,也是最常用的方法。接着是onStart,这个方法表示当前的界面处于可见状态,但是用户还不能交互。往下是onResume,这个方法被调用说明activity已经启动成功,用户可以交互。那么接下来如果用户启动了一个透明的activity或一个dialog activity,那么就会调用onPause方法。这个方法被调用说明当前的activity处于暂停状态,但用户还是可以看见。当用户此时按下home按键,那么我们的整个activity都看不见了,此时就会调用onStop,表示当前activity处于停止状态。用户重新打开这个activity会先调用onRestart,表示用户重新启动了activity,紧接着调用onStart-onResume。如果用户按下返回键,或者调用finish()方法,就会调用onDestory方法,此activity将不再处于任务栈顶位置(任务栈后续章节介绍)。既然有了大致流程,我们还是看看代码。下面这个代码前面android五大组件之activity初探讲过,其实就是启动新的一个activity, 这里的名字为FirstActivity。

public class MainActivity extends Activity {

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

        Intent intent = new Intent(this, FirstActivity.class);
        startActivity(intent);
    }
}

下面是FirstActivity重写了几个生命周期方法

public class FirstActivity extends Activity {

    private String TAG = "FirstActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        Log.d(TAG, "onCreate: ");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart: ");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: ");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop: ");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause: ");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: ");
    }
}

当我启动了FirstActivity 界面后看到的打印如下

打印

我主要需要验证三种情况

  1. 当按下home按键后的打印
  2. 当启动一个dialog activity后的打印
  3. 按下返回键或手动调用finish()的打印

场景1的验证,以下是打印结果, 打印了onPause, onStop验证前面所讲

按下home按键

重新打开 activity打印如下: 验证了前面所讲

 重新打开activity

场景2的验证,首先创建一个dialo 风格的activity。创建的方式我不讲了,只改了主题为dialog样式。

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

那我们来看看是否符合我们的猜想呢?前三个打印是创建红色背景activity,接着onPause是点击显示对话框按钮后弹出Dialog风格的activity
后调用。前面的说法也得到了验证。

这里写图片描述

场景三,按下返回键或调用finish()方法

mFinish = findViewById(R.id.btn_finish);
//省略了部分代码
 mFinish.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 手动调用finish()
                finish();
            }
        });

先看按下返回键的打印:前三个是创建调用,后三个是按下返回键后调用。

这里写图片描述

接着看下手动调用finish,可以看到跟上面完全一样,这个我就不贴图啦!可以自行验证。

好了,到这里就已经对activity生命周期分析完了。代码很简单就不上传啦!如果需要的朋友可以私下联系我。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值