一句话、一张图记住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开发中最常使用到的组件,在它们的生命周期的各个阶段我们需要针对性的做些事情,了解这些组件的生命周期有利于我 ...
随机推荐
- bzoj3171
不难发现,每个点出度显然为1,要想整个图形成环,必然每个点的入度也为1: 所以,不难想到将每个点i拆成两个点i1,i2构成二分图, 连边s--->i1 流量为1,费用为0,i2--->t流 ...
- Qt: The State Machine Framework 学习
State Machine,即为状态机,是Qt中一项非常好的框架.State Machine包括State以及State间的Transition,构成状态和状态转移.通过状态机,我们可以很方便地实现很 ...
- EFI脚本
https://software.intel.com/en-us/articles/efi-shells-and-scripting
- ☀【组件】数组 array
<!doctype html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- JS中document.createElement()用法及注意事项
今天处理了一个日期选择器的ie和ff的兼容问题,本来这种情况就很难找错误,找了好久才把错误定位到js中创建元素的方法document.createElement(),这个方法在ie下支持这样创建元素 ...
- (转载)PHP的内存限制 Allowed memory size of 134217728 bytes exhausted (tried to allocate 1099 bytes) in
(转载)http://blog.csdn.net/beyondlpf/article/details/7794028 Fatal error: Allowed memory size of 13421 ...
- [codevs1073]家族
题目描述 Description 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 规定:x和y是亲戚,y和z是亲戚,那么x和 ...
- 【CSS】Intermediate5:Specificity
1.More Specific=Greater Precedence =>nested selectors 2. the selectors are the same then the last ...
- delphi 提取字符中的数字
Function Setstring(cString:string):string; {提取数字} VAr i:integer; str:string; begin str:='' ...
- POJ1423 - Big Number(Stirling公式)
题目大意 求N!有多少位 题解 用公式直接秒杀... 代码: #include<iostream> #include<cmath> using namespace std; # ...