Activity在onCreate和onResume中finish时,生命周期的不同表现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activity在onCreate和onResume中finish时,生命周期的不同表现相关的知识,希望对你有一定的参考价值。

参考技术A

最近细看android docs,发现finish()在不同地方的生命周期有所区别。

在Android Studio中新建Android项目,分别重写onCreate、onResume、onPause、onStop、onDestroy方法,并打印相关信息。

好显然,在onCreate中finish是跳过了onPause和onStop方法,直接执行onDestroy。

原因:开发文档中说到,Activity只有在Resumed、Paused、Stopped这三种状态下存在较长时间(即可以运行较长时间),Activity在其他状态下都是一闪而过。其中,在onResume中,Activity变为用户可见并且可以交互。因此,如果Activity不存在交互的概念(即在onCreate()中finish掉),就不会回调onPause、onStop等需要用户交互的方法。

Activity从启动到销毁的过程

目录

1.Activity的生命周期

2.Activity启动和销毁的过程

3.Activity停止过程

4.Activity重新创建的过程


1.Activity的生命周期


2.Activity启动和销毁的过程

    在系统调用onCreate()方法之后,就会马上调用onStart(),然后继续调用onResume()来进入运行状态,最后会停在onResume状态,完成启动后,系统会调用onDestory()来结束一个Activity的生命周期让他毁掉kill状态。

  1. onCreate中创建基本的UI元素;

  2. onPause和onStop:清除Activity的资源,避免浪费;

  3. onDestory:因为引用会在activity销毁的时候销毁,而线程不会,所以清除开启的线程。  


3.Activity停止过程

  1. 栈顶的Activity部分不可见的时候,实际上后续会有两种可能,从部分不可见到可见,也就是恢复过程,从部分不可见到完全不可见,也就是停止过程,系统在当前Activity不可见时调用onPause。

4.Activity重新创建的过程

  1. 系统长时间处于stop状态,此时系统需要更多的内存或者内存比较紧张的时候,系统就会回收你的Activity,为了补偿你,会将你的Activity状态通过onRestoreInstanceState()方法保存到Bundle中,也可以额外增加键值对去保存这些状态,当需要重新创建这个Activity的时候,保存的Bundle对象就会传递到Activity的onRestoreInstance()方法和onCreate()方法中去,这就是onCreate的重要参数--saveInstanceState;

  2. 但是saveInstanceState并非每次当Activity离开前台就会调用,如果用户使用finish方法结束,则不会调用,而且Android系统已经默认实现了控件的缓存状态。


  如有错误,希望各位观摩的大佬能指出嘻嘻嘻~

以上是关于Activity在onCreate和onResume中finish时,生命周期的不同表现的主要内容,如果未能解决你的问题,请参考以下文章

重识Activity——生命周期详解

Application + Activity + onResume == NULL POINTER EXCEPTION

为啥说安卓activity的onCreate()方法 只调用一次

在超类中中断 super.onCreate()

Activity从启动到销毁的过程

Activity从启动到销毁的过程