其实现在网上关于android的Activity生命周期的描述的文章很多,大多都写的很细致而且很详细,在此处,我做了些总结,还有针对各个生命周期的详解。
这张图大家相比已经看到过很多次了,确实,它精简且详细的把Activity的生命周期调用的过程表现了出来。网上有很多对此图的理解,其实综合一下,本图的字面意思就足够让你了解Activity生命周期的运作,万变不离其宗,把握原则就能解决各种相应的情况。
由图可知,Activity的生命周期包括:onCreate,onStart,onResume,onPause,onStop,onRestart,onDestory,网上很多关于这些方法对应的情况举例介绍的比较多,多(如需要可自行查找)。
综合一下,可以得出以下结论:
1,onCreate(创建):一个Activity启动时会先调用onCreate,绘制视图,然后调用onStart(开始)使Activity可见,再调用onResume(继续或重新开始),使的Activity可被操作即可交互。
2,onPause(暂停):当前的Activity失去了焦点,就是不可操作和交互的时候,系统会调用这个方法。
3,onStop(停止):在上图中所说The activity is no longer visible(当前这个Activity不再可见,也就是你现在看不到这个Activity对应的界面了),这句话涵盖了所有会调用这个方法的情况,也是这个方法调用的唯一标准。
4,onDestory(销毁):手动Finish或者系统内存不足回收当前Activity的时候,系统会调用这个方法。
5,onRestart(重新开始):当前Activity从不可见到可见的状态时(前提是这个Activity没有被销毁),先调用onRestart,再调用onStart,然后再调用onResume
这里分享一个博主最近找工作面试时面试官提出的一道面试题,即当前Activity中被一个Dialog覆盖和一个Dialog形式的Activity所覆盖时,生命周期的调用情况分别是什么。
首先,被一个Dialog覆盖,虽然表面上是Activity失去了焦点,不可交互了,但是,别忘了Dialog也是当前Activity的一部分,它是可以进行操作的,所以此处不会执行别的方法。但是,当一个Dialog形式的Activity所覆盖时,它的生命周期是否会发生改变呢,咱们来分析一下:
(1)当前Activity被一个常规的Activity覆盖失去焦点变的不可交互,这里的覆盖指的是被完全覆盖,你已经完全看不到之前的Activity界面了,这里系统会调用onPause后,再调用onStop方法。然后,当前Activity由覆盖状态回到前台显示后,系统会调用onRestart,再调用onStart,onResume方法
(2)当前Activity被一个Dialog(弹出框)形式的的Activity覆盖失去焦点不可交互,然后当前Activity的一部分被覆盖,此时你还是可以看到之前Activity的部分界面的,这里的话系统会调用onPause方法,而不会再调用onStop方法。然后,当前Activity由覆盖状态回到前台显示后,系统会调用onResume方法
综上,这个问题的答案就出来了,前者不调用,后者只调用onPause方法。
因此,只需要记住The activity is no longer visible这句话,就可以应对各种关于类似的情况。
这里小结一下吧,关于Activity的生命周期,建议大家直接动手写实例真正的去测试一下,好多博主的文章里贴上了自己的测试过程和结果,收获的是博主自己,我们做为一个学习者,需要多多实践,毕竟学习也好,开发也罢,我始终认为,收获多少是这样排列的:自己写>抄代码>复制代码>只看代码,想要真正熟悉和理解,除了天赋异禀,是没有捷径的,望你我共勉。
以上为博主一家之言,如有错误之处,望大家指出,定当改正。