Android 生命周期

不同于使用 main() 方法启动应用的其他编程范例,Android 系统会通过调用对应于其生命周期中特定阶段的特定回调方法在 Activity 实例中启动代码。有一系列可启动 Activity 的回调方法,以及一系列可分解 Activity 的回调方法。

本篇我们就通过几个常见的场景来看一下Activity的是生命周期。下面是一张关于其生命周期的图,大家可以参考以下。

这里写图片描述

从这幅图中我们可以看出,android程序的启动最初是应该是onCreate->onStart->onResume这三个经过,然后在Rusumed状态等待状态变化。

那么我们通过程序实际看一下,运行过程是否和我们想象的一致。

首先,我们定义一个log打印函数,输出进入对应的生命周期的时间和是哪一个过程。

 private void refreshActivityLife(String desc)
    {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date date = new Date(System.currentTimeMillis());
        mStr = String.format("%s:%s at %s\n",TAG,desc,simpleDateFormat.format(date));
        textView.append(mStr);
        Log.d(TAG,mStr);


    }

接下来,我们实现与Activity相关的方法:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.android_life);
        button = findViewById(R.id.jump_bttton);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,JumpActivity.class);
                startActivity(intent);
            }
        });
        refreshActivityLife("onCreate");
    }

    @Override
    protected void onStart() {
        refreshActivityLife("onStart");
        super.onStart();
    }

    @Override
    protected void onStop() {
        refreshActivityLife("onStop");
        super.onStop();
    }

    @Override
    protected void onResume() {
        refreshActivityLife("onResume");
        super.onResume();
    }

    @Override
    protected void onPause() {
        refreshActivityLife("onPause");
        super.onPause();
    }

    @Override
    protected void onRestart() {
        refreshActivityLife("onRestart");
        super.onRestart();
    }

    @Override
    protected void onDestroy() {
        refreshActivityLife("onDestroy");
        super.onDestroy();
    }

这里我们在说明一下各个方法:

  • onCreate
    这个不用多说,只要我们新建一个activity,必定会看到这个方法。显而易见,这个是activity的入口方法。
    该方法是用来创建页面的,在这个过程中把页面上的各个元素都加载到内容中去。
  • onStart
    开始页面,把页面显示在屏幕上去
  • onStop
    停止页面,把页面从屏幕上撤下
  • onResume
    -恢复页面,让页面在屏幕上活动
  • onPause
    暂停页面,让页面在屏幕上的动作停止
  • onRestart
    重启页面,重新加载内存中的页面数据
  • onDestroy
    销毁页面,将页面从内存中删除

我们首先启动程序,查看logcat输出:

07-14 02:22:20.706 30700-30700/com.liusir.activitysimple D/MainActivity: MainActivity:onCreate at 2018071402:22:20
07-14 02:22:20.708 30700-30700/com.liusir.activitysimple D/MainActivity: MainActivity:onStart at 2018071402:22:20
07-14 02:22:20.712 30700-30700/com.liusir.activitysimple D/MainActivity: MainActivity:onResume at 2018071402:22:20

接下来我们就常用的几个场景进行演示:

  • 页面跳转
    首先我们从MainActivity跳转至JumpActivity:
07-14 02:25:58.350 919-919/com.liusir.activitysimple D/MainActivity: MainActivity:onPause at 2018071402:25:58
07-14 02:25:58.431 919-919/com.liusir.activitysimple D/JumpActivity: JumpActivity:onCreate at 2018071402:25:58
07-14 02:25:58.433 919-919/com.liusir.activitysimple D/JumpActivity: JumpActivity:onStart at 2018071402:25:58
07-14 02:25:58.439 919-919/com.liusir.activitysimple D/JumpActivity: JumpActivity:onResume at 2018071402:25:58
07-14 02:25:59.183 919-919/com.liusir.activitysimple D/MainActivity: MainActivity:onStop at 2018071402:25:59

大家可以看到,首先是将MainActivity暂停,然后开始加载JumpActivity,等待JumpActivity加载完成后,将MainActivity从屏幕撤下去。

此时,如果我们在返回主页面:

07-14 02:27:45.263 919-919/com.liusir.activitysimple D/JumpActivity: JumpActivity:onPause at 2018071402:27:45
07-14 02:27:45.326 919-919/com.liusir.activitysimple D/MainActivity: MainActivity:onRestart at 2018071402:27:45
07-14 02:27:45.350 919-919/com.liusir.activitysimple D/MainActivity: MainActivity:onStart at 2018071402:27:45
07-14 02:27:45.377 919-919/com.liusir.activitysimple D/MainActivity: MainActivity:onResume at 2018071402:27:45
07-14 02:27:45.932 919-919/com.liusir.activitysimple D/JumpActivity: JumpActivity:onStop at 2018071402:27:45
07-14 02:27:45.963 919-919/com.liusir.activitysimple D/JumpActivity: JumpActivity:onDestroy at 2018071402:27:45

这里也很清楚了,首先是将当前页面暂停,然后重新加载主页面,最后销毁当前页面。

  • 横屏和竖屏切换
    这里我们的流程如下:
    首先进入程序是竖屏:
07-14 02:30:51.013 5188-5188/com.liusir.activitysimple D/MainActivity: MainActivity:onCreate at 2018071402:30:50
07-14 02:30:51.016 5188-5188/com.liusir.activitysimple D/MainActivity: MainActivity:onStart at 2018071402:30:51
07-14 02:30:51.022 5188-5188/com.liusir.activitysimple D/MainActivity: MainActivity:onResume at 2018071402:30:51

切换屏幕至横屏:

07-14 02:32:45.115 5188-5188/com.liusir.activitysimple D/MainActivity: MainActivity:onPause at 2018071402:32:45
07-14 02:32:45.153 5188-5188/com.liusir.activitysimple D/MainActivity: MainActivity:onStop at 2018071402:32:45
07-14 02:32:45.176 5188-5188/com.liusir.activitysimple D/MainActivity: MainActivity:onDestroy at 2018071402:32:45
07-14 02:32:45.634 5188-5188/com.liusir.activitysimple D/MainActivity: MainActivity:onCreate at 2018071402:32:45
07-14 02:32:45.664 5188-5188/com.liusir.activitysimple D/MainActivity: MainActivity:onStart at 2018071402:32:45
07-14 02:32:45.738 5188-5188/com.liusir.activitysimple D/MainActivity: MainActivity:onResume at 2018071402:32:45

可以看出,切换屏幕会导致activity重新创建,那么在切换至竖屏应该也是同样的过程。

最后我们看下home键返回app:

07-14 02:36:02.576 5188-5188/com.liusir.activitysimple D/MainActivity: MainActivity:onPause at 2018071402:36:02
07-14 02:36:02.781 5188-5188/com.liusir.activitysimple D/MainActivity: MainActivity:onStop at 2018071402:36:02

此时程序处于暂停状态,我们返回app:

07-14 02:36:58.851 5188-5188/com.liusir.activitysimple D/MainActivity: MainActivity:onRestart at 2018071402:36:58
07-14 02:36:58.872 5188-5188/com.liusir.activitysimple D/MainActivity: MainActivity:onStart at 2018071402:36:58
07-14 02:36:58.895 5188-5188/com.liusir.activitysimple D/MainActivity: MainActivity:onResume at 2018071402:36:58

那么我们点击返回时,状态是怎么变换的呢?

07-14 02:38:37.519 11582-11582/com.liusir.activitysimple D/MainActivity: MainActivity:onPause at 2018071402:38:37
07-14 02:38:38.187 11582-11582/com.liusir.activitysimple D/MainActivity: MainActivity:onStop at 2018071402:38:38
07-14 02:38:38.215 11582-11582/com.liusir.activitysimple D/MainActivity: MainActivity:onDestroy at 2018071402:38:38

页面被销毁了。

好了,关于生命周期我们暂时就说到这里了。仅凭这么点说明大家是不可能完全理解的,让我们一起慢慢学习吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值