学习笔记01.activity的生命周期

    xiaoxiao2021-04-12  32

    做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,做一些回收工作。

    主要切换过程的生命周期下图给出了详细过程。

    最后这是我第一次写博客,文章中有不对的地方,希望大家帮我指出来,免得误导别人,同时我们也可以一起进步不是。

    转载请注明原文地址: https://ju.6miu.com/read-667770.html

    最新回复(0)