做android也有段时间了,但总是感觉自己的知识很散乱,今天开始就整理整理。我们就从activity开始吧。
我们不扯东扯西,我们把activity生命周期中的每个方法搞清楚,各种切换中的生命流程梳理搞清楚,我想我们也就达到目的了。
activity的生命周期包括:onCreate、onStart、 onRestart、onResume、onPause、onStop、onDestroy。
从名称上可以看出 onCreate--onDestroy、onStart--onStop、onRestart--onPause有着相对用的关系,安卓初学者可以按照这个方式去记忆。
onCreate:一个activity被创建,会最先调用此方法,它是生命周期 的第一个方法,此方法中主要做一些初始化工作,比如加载布局资源,初始化activity所需的数据等。该方法
在正常的生命周期内只会被执行一次。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
1.该方法中有一个Bundle类型的参数savedInstanceState,下面我们来说说他作用:
举个例子:
资源相关的系统配置发生改变导致activity被杀死并重建:比如从竖屏切换到横屏的过程中,因为横竖屏对应的资源文件,系统配置的不同,activity会被先被销毁后重建。此过
程中activity的主要几个生命周期为 onSaveInstanceState-----onDestroy------------->>onCreate-----onRestoreInstanceState。
接着我们说一下onSaveInstanceState方法和onRestoreInstanceState方法。
onSaveInstanceState:(保存数据)
系统只有在activity即将被销毁并且有可能被重新创建时才会调用此方法,就比如上面的情况。换言之activity如果是正常被销毁则不会调用该方法,该方法执行在onDestroy之
前。同理当activity被重新创建以后也才会调用onRestoreInstanceState方法。此方法中会把需要保存的数据封装成一个Bundle对象,当此activity被重新创建时将该Bundle对象
传递给onCreate、onRestoreInstanceState方法。
onRestoreInstanceState:(恢复数据)
此方法会取出Budle中的数据将activity恢复到原来的状态。所以正常启动的activity此方法是不会被调用的,而onCreate方法中的savedInstanceState的值也为null
2.setContentView(R.layout.activity_main):加载resource--layout--activity_main对应的布局资源,这个方法在我看来不必深究,我们只要知道他是加载我们当前activity所对应
的布局资源即可。
onStart:表示activity正在被启动,此时的activity已经可见了,只是还未出现在前台无法跟用户进行交互。另外此方法可能会被多次执行,这一点要和onCreate区分开。
onRestart:表示一个activity正在被重启,一般来说是activity在未被销毁的情况下,从完全不可见到可见会调用该方法。这里要和另一种情况做一下区分,举两个例子:
1.从activity A启动activity B,再点击返回键回到activity A . activity A具体生命周期如下:
onPause--onStop------> onRestart--onStart--onResume。(可以看出此时onStart再次被执行了)
这里有一种特殊情况,当被启动的activity B采用的是透明主题时,activity A的onStop方法不会被执行,具体的生命流程就类似下面的这种情况。
2.activity A 中弹出一个dialog,dialog消失回到activity activity A具体生命周期如下:
onPause-------> onResume。 弹出dialog activity A 仍然是可见的所以不会调用onRestart方法。
这里我只列举了这两种情况,其他的复杂情况读者可以重写对应的生命周期方法,做相关的打印,来探究其具体的生命流程。
onResume:表示当前的activity已近显示到前台开始活动,并且可以和用户进行交互。这里可以和 onStart 来做对比,此方法也可能会被多次执行。
onPause:表示activity正在被停止,它的实质是将activity由活动状态转变为非活动状态。
onStop :它的实质是将activity由可见状态转变为不可见状态。
所以你理解了每一个方法它的实质作用,你不用打印,你都能感觉出某一个方法他是否会被调用。
onDestroy:销毁当前activity,做一些回收工作。
主要切换过程的生命周期下图给出了详细过程。
最后这是我第一次写博客,文章中有不对的地方,希望大家帮我指出来,免得误导别人,同时我们也可以一起进步不是。