• 一句话、一张图记住Activity和Fragment之间错综复杂的生命周期关系


    如果我们在Fragment和它的宿主Activity的生命周期中都加上Log日志,你能顺利写出他们的执行顺序吗?我们先来看一张Google官方的图片:

    咋一听,Activity生命周期有七个方法,Fragment生命周期有十一个方法,貌似挺复杂的,其实我们只需要明白到底是谁带领着谁去执行生命周期的方法,就能很快弄明白这个问题。

    在创建的过程中,是Activity带领Fragment执行生命周期中的方法,所以生命周期方法的执行顺序是这样的:

    1.Activity--onCreate();

    2.Fragment--onAttach();

    3.Fragment--onCreate();

    4.Fragment--onCreateView();

    5.Fragment--onActivityCreated();


    接着是这样的:

    6.Activity--onStart();

    7.Fragment--onStart();

    8.Activity--onResume();

    9.Fragment--onResume();

    我们知道,无论对于Activity还是对于Fragment,onResume这个生命周期都是他们执行时间最长的,当我们的Activity或者Fragment打开之后,它就一直处于这个生命周期中。

    当销毁的时候,春江水暖鸭先知,当然是Fragment先感知到,于是销毁的时候就是Fragment带领Activity:

    10.Fragment--onPause();

    11.Activity--onPause();

    12.Fragment--onStop();

    13.Activity--onStop();

    14.Fragment--onDestroyView();

    15.Fragment--onDestroy();

    16.Fragment--onDetach();

    17.Activity--onDestroy();

    上面这个顺序有一个前提,就是我们所有的日志打印代码都是紧挨着super方法写。因为如果我们如果把Fragment写在了布局文件中,同时又在Activity的onCreate()方法中的setContentView之后打印日志,那么我们看到的生命周期的执行顺序就会有所不同,不过只是细微的差别,这点大家自己研究,道理也很好明白。

    总之一句话,在创建的过程中,是Activity带领着Fragment,在销毁的过程中,是Fragment带领着Activity。

  • 相关阅读:
    work two year[转]
    知名技术博客内容聚合网站
    VS2010注册码
    某公司的一个题面试题(wfcfan)
    asp.net控件开发基础系列
    .NET (C#) Internals: Delegates1
    可空类型细微见真知!
    C#中操作XML Node节点细节操作
    sql server数据库性能的优化
    字符串精确匹配算法改进的探讨
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461714.html
Copyright © 2020-2023  润新知