zoukankan      html  css  js  c++  java
  • 一句话、一张图记住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。

  • 相关阅读:
    robotframework-ride1.7.3.1更新安装
    批量删除新浪微博
    Redis
    GET和POST两种基本请求方法的区别
    selenium2自动化测试实战--基于Python语言
    同步/异步/阻塞/非阻塞/BIO/NIO/AIO
    HTTP抓包实战
    LCT模板(BZOJ2631)
    树链剖分模板(BZOJ3083)
    凸包(BZOJ1069)
  • 原文地址:https://www.cnblogs.com/lenve/p/5865919.html
Copyright © 2011-2022 走看看