一句话、一张图记住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。
一句话、一张图记住Activity和Fragment之间错综复杂的生命周期关系的更多相关文章
- activity和fragment之前运行的生命周期
1.activity生命周期 2.fragment的生命周期 3.对比图 4.测试代码 package com.goso.testapp; import android.app.Activity; i ...
- Activity和Fragment之间解耦
看鸿洋博客:http://blog.csdn.net/lmj623565791/article/details/42628537,整理下一些关键点 public class ContentFragme ...
- activity与fragment之间的传递数据
首先activity之间的数据传递就是 用intent和intent+bundle intent 传递 Intent i= new Intent(MainActivity.this,TheAty.cl ...
- 一句话+两张图搞定JDK1.7HashMap,剩下凑字数
JDK1.7 HashMap一探究竟 HashMap很简单,原理一看散列表,实际数组+链表;Hash找索引.索引若为null,while下一个.Hash对对碰,链表依次查.加载因子.75,剩下无脑扩数 ...
- activity与fragment之间传递数据
总结:无论是activity给fragment传递数据,还是fragment给activity传递数据,都把activity和fragment都当做一个普通的对象,调用它的方法,传递参数. 1.Fra ...
- Android 数据传递(二)Activity与fragment之间的通信
在网上找到了一篇总结的非常好的文章,我这里就贴出他的博文地址.自己就不再写这个方面的总结了. Activity与Fragment通信(99%)完美解决方案
- Activity与Fragment之间的通信
由于Fragment的生命周期完全依赖宿主Activity,所以当我们在使用Fragment时难免出现Activity和Fragment间的传值通信操作. 1.Activity向Fragment,通过 ...
- 小结Fragment与FragmentPagerAdapter的生命周期及其关系
本博客部分内容是来自http://blog.csdn.net/dreamzml/article/details/9951577 FragmentPagerAdapter FragmentPagerAd ...
- Android Activity、Service、BroadcastReceiver 的生命周期
Activity.Service.BroadcastReceiver这三个组建是Android开发中最常使用到的组件,在它们的生命周期的各个阶段我们需要针对性的做些事情,了解这些组件的生命周期有利于我 ...
随机推荐
- Spring AOP实现方式一【附源码】
基本代理模式 纯POJO切面 源码结构: 1.首先我们新建一个接口,love 谈恋爱接口. package com.spring.aop; /** * 谈恋爱接口 * * @author Admin ...
- HDU4739Zhuge Liang's Mines(状压)
链接 预处理出只有四个1的情况存入数组中 然后状压下 #include <iostream> #include<cstdio> #include<cstring> ...
- bzoj1797
其实我觉得这种题目风格很像今天省选第三轮D1T1 都是在一个算法模型上去探索规律: 首先我们要做一遍最大流毫无疑问 第一问看起来很好想,只要是满流边就可以了? 错,反例不难找到 如:1--->2 ...
- 软件介绍(apache lighttpd nginx)
一.软件介绍(apache lighttpd nginx) 1. lighttpd Lighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点.lighttpd是众多 ...
- 用css控制cellspacing、cellpadding
用css控制cellspacing.cellpadding 发表于 2006 年 12 月 24 日 由 Silbo 在table中控制单元格之间的间距要用到cellspacing.cellpaddi ...
- 面试准备--struts2.x
对象解析: 1.HttpServletRequest对象是tomcat对用户请求信息的封装,该对象提供了多个方法可以获取用户的请求信息. 2.ActionContextCleanUP是一个可选过滤器, ...
- Android学习笔记(1)—Android Studio安装
Android Studio 是一个全新的 Android 开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工 ...
- [liu yanling]软件测试用例的基本要素包括哪些?
用例编号: 测试用例的编号有一定的规则,比如系统测试用例的编号这样定义规则: PROJECT1-ST-001 ,命名规则是项目名称+测试阶段类型(系统测试阶段)+编号.定义测试用例编号,便于查找测试用 ...
- 执行sql update use c#
今天犯了个大错 public static void ChangeGoodsCounts(int GoodsID, int changCounts) { int lastCount; using (S ...
- flume服务的搭建
搭建前先统一时间,关闭防火墙,使用的jar包版本是1.6.0的 服务配置有两种方式 第一种:具体步骤如下: 1.将jar包传至node1上,解压至根目录 2.更改目录名,使用如下命令:mv apach ...