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启动和销毁的过程
在系统调用onCreate()方法之后,就会马上调用onStart(),然后继续调用onResume()来进入运行状态,最后会停在onResume状态,完成启动后,系统会调用onDestory()来结束一个Activity的生命周期让他毁掉kill状态。
-
onCreate中创建基本的UI元素;
-
onPause和onStop:清除Activity的资源,避免浪费;
-
onDestory:因为引用会在activity销毁的时候销毁,而线程不会,所以清除开启的线程。
3.Activity停止过程
- 栈顶的Activity部分不可见的时候,实际上后续会有两种可能,从部分不可见到可见,也就是恢复过程,从部分不可见到完全不可见,也就是停止过程,系统在当前Activity不可见时调用onPause。
4.Activity重新创建的过程
-
系统长时间处于stop状态,此时系统需要更多的内存或者内存比较紧张的时候,系统就会回收你的Activity,为了补偿你,会将你的Activity状态通过onRestoreInstanceState()方法保存到Bundle中,也可以额外增加键值对去保存这些状态,当需要重新创建这个Activity的时候,保存的Bundle对象就会传递到Activity的onRestoreInstance()方法和onCreate()方法中去,这就是onCreate的重要参数--saveInstanceState;
-
但是saveInstanceState并非每次当Activity离开前台就会调用,如果用户使用finish方法结束,则不会调用,而且Android系统已经默认实现了控件的缓存状态。
如有错误,希望各位观摩的大佬能指出嘻嘻嘻~
以上是关于Activity在onCreate和onResume中finish时,生命周期的不同表现的主要内容,如果未能解决你的问题,请参考以下文章
Application + Activity + onResume == NULL POINTER EXCEPTION