Activity ViewPager Fragment框架的生命周期
1、Fragment的生命周期函数
onAttach、onCreate、onCreateView、onViewCreated、onActivityCreated、onStart、onResume、onPause、onStop、onDestroyView、onDestroy、onDettach
Activity的各种生命周期函数先执行,然后各个Fragment不论是不是可见与否紧接着调用同样的生命周期函数。比如Activity的onResume,几个Fragment的onResume紧跟着执行。
2、Activity和Fragment的生命周期函数的顺序如下:
05-25 13:49:42.757 7242-7242/com.yunzhiyuan100.wish D/Linghu MainActivity.onCreate: ============MainActivity===onCreate
05-25 13:49:42.760 7242-7242/com.yunzhiyuan100.wish D/Linghu MainActivity.onStart: ============MainActivity===onStart
05-25 13:49:42.762 7242-7242/com.yunzhiyuan100.wish D/Linghu MainActivity.onResume: ============MainActivity===onResume
05-25 13:49:42.785 7242-7242/com.yunzhiyuan100.wish D/Linghu HomeFragment.onAttach: ===================HomeFragment===onAttach
05-25 13:49:42.786 7242-7242/com.yunzhiyuan100.wish D/Linghu HomeFragment.onCreate: ===================HomeFragment===onCreate
05-25 13:49:42.786 7242-7242/com.yunzhiyuan100.wish D/Linghu FindFragment.onAttach: ===================FindFragment===onAttach
05-25 13:49:42.787 7242-7242/com.yunzhiyuan100.wish D/Linghu FindFragment.onCreate: ===================FindFragment===onCreate
05-25 13:49:42.787 7242-7242/com.yunzhiyuan100.wish D/Linghu MineFragment.onAttach: ===================MineFragment===onAttach
05-25 13:49:42.787 7242-7242/com.yunzhiyuan100.wish D/Linghu MineFragment.onCreate: ===================MineFragment===onCreate
05-25 13:49:42.788 7242-7242/com.yunzhiyuan100.wish D/Linghu HomeFragment.onCreateView: ===================HomeFragment===onCreateView
05-25 13:49:42.908 7242-7242/com.yunzhiyuan100.wish D/Linghu HomeFragment.onViewCreated: ===================HomeFragment===onViewCreated
05-25 13:49:42.908 7242-7242/com.yunzhiyuan100.wish D/Linghu HomeFragment.onActivityCreated: ===================HomeFragment===onActivityCreated
05-25 13:49:42.920 7242-7242/com.yunzhiyuan100.wish D/Linghu HomeFragment.onStart: ===================HomeFragment===onStart
05-25 13:49:42.920 7242-7242/com.yunzhiyuan100.wish D/Linghu HomeFragment.onResume: ===================HomeFragment===onResume
05-25 13:49:42.921 7242-7242/com.yunzhiyuan100.wish D/Linghu FindFragment.onCreateView: ===================FindFragment===onCreateView
05-25 13:49:42.955 7242-7242/com.yunzhiyuan100.wish D/Linghu FindFragment.onViewCreated: ===================FindFragment===onViewCreated
05-25 13:49:42.956 7242-7242/com.yunzhiyuan100.wish D/Linghu FindFragment.onActivityCreated: ===================FindFragment===onActivityCreated
05-25 13:49:42.956 7242-7242/com.yunzhiyuan100.wish D/Linghu MineFragment.onCreateView: ===================MineFragment===onCreateView
05-25 13:49:43.004 7242-7242/com.yunzhiyuan100.wish D/Linghu MineFragment.onViewCreated: ===================MineFragment===onViewCreated
05-25 13:49:43.004 7242-7242/com.yunzhiyuan100.wish D/Linghu MineFragment.onActivityCreated: ===================MineFragment===onActivityCreated
05-25 13:49:43.005 7242-7242/com.yunzhiyuan100.wish D/Linghu FindFragment.onStart: ===================FindFragment===onStart
05-25 13:49:43.005 7242-7242/com.yunzhiyuan100.wish D/Linghu FindFragment.onResume: ===================FindFragment===onResume
05-25 13:49:43.006 7242-7242/com.yunzhiyuan100.wish D/Linghu MineFragment.onStart: ===================MineFragment===onStart
05-25 13:49:43.006 7242-7242/com.yunzhiyuan100.wish D/Linghu MineFragment.onResume: ===================MineFragment===onResume
MainActivity onCreate-----onStart-----onResume---------》HomeFragment onAttach------onCreate
FindFragment onAttach------onCreate
MineFragment onAttach------onCreate
HomeFragment onCreateView------onViewCreated-------onActivityCreeated---onStart-----onResume
FindFragment onCreateView------onViewCreated--------onActivityCreated
MineFragment onCreateView-------onViewCreated-------onActivityCreated
FindFragment onStart-------onResume
MineFragment onStart-------onResume
Activity 生命周期走到可见,然后依次执行Fragment的onAttach----onCreate, 然后依次onCreateView、onViewCreated、onActivityCreated,第一个Fragment的onstart、onResume一起执行了,然后最后是后两个Fragment的onStart、onResume。
2、下面是加入了setUserVisibleHint
Activity和Fragment的生命周期函数的顺序如下:
MainActivity onCreate-----onStart-----onResume-------------》 HomeFragment setUserVisibleHint(false)
FindFragment setUserVisibleHint(false)
MineFragment setUserVisibleHint(false)
HomeFragment setUserVisibleHint(true)
HomeFragment onAttach------onCreate
FindFragment onAttach------onCreate
MineFragment onAttach------onCreate
HomeFragment onCreateView------onViewCreated-------onActivityCreeated---onStart-----onResume
FindFragment onCreateView------onViewCreated--------onActivityCreated
MineFragment onCreateView-------onViewCreated-------onActivityCreated
FindFragment onStart-------onResume
MineFragment onStart-------onResume
切换tab,点击FindFagment
HomeFragment setUserVisibleHint(false)
FindFragment setUserVisibleHint(true)
切换tab,点击MineFragment
FindFragment===setUserVisibleHint(false)
MineFragment===setUserVisibleHint(true)
log如下:
05-25 14:11:09.453 8685-8685/com.yunzhiyuan100.wish D/Linghu MainActivity.onCreate: ============MainActivity===onCreate
05-25 14:11:09.454 8685-8685/com.yunzhiyuan100.wish D/Linghu MainActivity.onStart: ============MainActivity===onStart
05-25 14:11:09.456 8685-8685/com.yunzhiyuan100.wish D/Linghu MainActivity.onResume: ============MainActivity===onResume
05-25 14:11:09.481 8685-8685/com.yunzhiyuan100.wish D/Linghu HomeFragment.setUserVisibleHint: ===================HomeFragment===setUserVisibleHint(false)
05-25 14:11:09.482 8685-8685/com.yunzhiyuan100.wish D/Linghu FindFragment.setUserVisibleHint: ===================FindFragment===setUserVisibleHint(false)
05-25 14:11:09.482 8685-8685/com.yunzhiyuan100.wish D/Linghu MineFragment.setUserVisibleHint: ===================MineFragment===setUserVisibleHint(false)
05-25 14:11:09.483 8685-8685/com.yunzhiyuan100.wish D/Linghu HomeFragment.setUserVisibleHint: ===================HomeFragment===setUserVisibleHint(true)
05-25 14:11:09.484 8685-8685/com.yunzhiyuan100.wish D/Linghu HomeFragment.onAttach: ===================HomeFragment===onAttach
05-25 14:11:09.484 8685-8685/com.yunzhiyuan100.wish D/Linghu HomeFragment.onCreate: ===================HomeFragment===onCreate
05-25 14:11:09.484 8685-8685/com.yunzhiyuan100.wish D/Linghu FindFragment.onAttach: ===================FindFragment===onAttach
05-25 14:11:09.485 8685-8685/com.yunzhiyuan100.wish D/Linghu FindFragment.onCreate: ===================FindFragment===onCreate
05-25 14:11:09.485 8685-8685/com.yunzhiyuan100.wish D/Linghu MineFragment.onAttach: ===================MineFragment===onAttach
05-25 14:11:09.486 8685-8685/com.yunzhiyuan100.wish D/Linghu MineFragment.onCreate: ===================MineFragment===onCreate
05-25 14:11:09.486 8685-8685/com.yunzhiyuan100.wish D/Linghu HomeFragment.onCreateView: ===================HomeFragment===onCreateView
05-25 14:11:09.609 8685-8685/com.yunzhiyuan100.wish D/Linghu HomeFragment.onViewCreated: ===================HomeFragment===onViewCreated
05-25 14:11:09.609 8685-8685/com.yunzhiyuan100.wish D/Linghu HomeFragment.onActivityCreated: ===================HomeFragment===onActivityCreated
05-25 14:11:09.615 8685-8685/com.yunzhiyuan100.wish D/Linghu HomeFragment.onStart: ===================HomeFragment===onStart
05-25 14:11:09.615 8685-8685/com.yunzhiyuan100.wish D/Linghu HomeFragment.onResume: ===================HomeFragment===onResume
05-25 14:11:09.616 8685-8685/com.yunzhiyuan100.wish D/Linghu FindFragment.onCreateView: ===================FindFragment===onCreateView
05-25 14:11:09.646 8685-8685/com.yunzhiyuan100.wish D/Linghu FindFragment.onViewCreated: ===================FindFragment===onViewCreated
05-25 14:11:09.646 8685-8685/com.yunzhiyuan100.wish D/Linghu FindFragment.onActivityCreated: ===================FindFragment===onActivityCreated
05-25 14:11:09.646 8685-8685/com.yunzhiyuan100.wish D/Linghu MineFragment.onCreateView: ===================MineFragment===onCreateView
05-25 14:11:09.695 8685-8685/com.yunzhiyuan100.wish D/Linghu MineFragment.onViewCreated: ===================MineFragment===onViewCreated
05-25 14:11:09.695 8685-8685/com.yunzhiyuan100.wish D/Linghu MineFragment.onActivityCreated: ===================MineFragment===onActivityCreated
05-25 14:11:09.695 8685-8685/com.yunzhiyuan100.wish D/Linghu FindFragment.onStart: ===================FindFragment===onStart
05-25 14:11:09.696 8685-8685/com.yunzhiyuan100.wish D/Linghu FindFragment.onResume: ===================FindFragment===onResume
05-25 14:11:09.696 8685-8685/com.yunzhiyuan100.wish D/Linghu MineFragment.onStart: ===================MineFragment===onStart
05-25 14:11:09.696 8685-8685/com.yunzhiyuan100.wish D/Linghu MineFragment.onResume: ===================MineFragment===onResume
点击切换到FindFragment(第二个tab)
05-25 14:13:46.807 8685-8685/com.yunzhiyuan100.wish D/Linghu HomeFragment.setUserVisibleHint: ===================HomeFragment===setUserVisibleHint(false)
05-25 14:13:46.808 8685-8685/com.yunzhiyuan100.wish D/Linghu FindFragment.setUserVisibleHint: ===================FindFragment===setUserVisibleHint(true)
点击切换到MineFragment(第三个tab)
05-25 14:13:48.659 8685-8685/com.yunzhiyuan100.wish D/Linghu FindFragment.setUserVisibleHint: ===================FindFragment===setUserVisibleHint(false)
05-25 14:13:48.660 8685-8685/com.yunzhiyuan100.wish D/Linghu MineFragment.setUserVisibleHint: ===================MineFragment===setUserVisibleHint(true)
3、总结:
Activity 生命周期走到可见,然后先执行Fragment的setUserVisibleHint(false)并把第一个Fragment置setUserVisibleHint(true), 然后依次执行Fragment的onAttach----onCreate, 然后依次onCreateView、onViewCreated、onActivityCreated,第一个Fragment的onstart、onResume一起执行了,然后最后是后两个Fragment的onStart、onResume.
Fragment的setUserVisibleHint()执行会在onAttach方法前面。
如果点击切换Fragment的时候会调用切换两个Fragment的setUserVisibleHint(false-----true)。
Fragment的OnResume方法和Activity的OnResume方法是调用时机是一致。
Activity ViewPager Fragment框架的生命周期的更多相关文章
- 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)
1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...
- Activity学习(二)——生命周期
一.什么是Activity? 简单的说:Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面.在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的Ac ...
- Android Fragment详解(二):Fragment创建及其生命周期
Fragments的生命周期 每一个fragments 都有自己的一套生命周期回调方法和处理自己的用户输入事件. 对应生命周期可参考下图: 创建片元(Creating a Fragment) To c ...
- fragment hide/show 生命周期
Fragment的使用越来越普遍了,掌握它的生命周期以及注意事项时非常有必要的,首先 All subclasses of Fragment must include a public empty co ...
- 深入了解asp.net框架。生命周期以及事件处理机制
刚接触asp.net框架觉得很好奇.他的快速开发是怎么实现的.控件的状态又是怎么保持的.我们都知道http是无状态的.而且网上很多人都说使用asp.net框架使用服务器框架是非常慢的. 带着这些疑问我 ...
- activity学习(1) 生命周期理解
可以忽略onWindowFocusChanged.onSaveInstanceState.onRestoreInstanceState几个事件,这几个事件官网中的生命周期里面没有提到.忽略掉这几个方法 ...
- Android Activity横竖屏转换的生命周期
新创建一个Activity,用来此次测试. 先贴代码 package com.hugo.apj.activitylifetest; import android.support.v7.app.AppC ...
- [android] activity横竖屏切换的生命周期
模拟器横竖屏切换,ctrl+f11 界面activity会销毁,重新打开创建 第一种做法: 定死就是横屏 在清单文件,<activity/>节点部分,添加属性,设置屏幕朝向 android ...
- Django框架请求生命周期
先看一张图吧! 1.请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(Flask.Django) - 中间件,帮助我们对请求进行校 ...
随机推荐
- mysql索引优化续
(1)索引类型: Btree索引:抽象的可以理解为“排好序的”快速查找结构myisam,innodb中默认使用Btree索引 hash索引:hash索引计算速度非常的快,但数据是随机放置的,无法对范围 ...
- Qemu创建KVM虚拟机内存初始化流程
转载请注明:[转载自博客xelatex KVM],并附本文链接.谢谢. [注]文章中采用的版本: Linux-3.11,https://www.kernel.org/pub/linux/kernel/ ...
- XiaoMi Interview Log
面试题目 PHP 弱类型 实现? COW 写时复制 实现? COW的时候内存的变化 12 $a = $b = 1;$b = 2; 的内存变化 ? 提供一个rand()函数[函数输出0 - 正无穷] 想 ...
- C# 实现快速闪电关机、快速重启
using System; using System.Runtime.InteropServices; namespace FastReboot { static class Program { pr ...
- pythonNet08
线程通信 通信方法:多个线程共用进程空间,所以进程的全局变量对进程内线程均可见.线程往往使用全局变量进行通信 注意事项:线程间使用全局变量进行通信,全局变量为共享资源,往往需要同步互斥机制 线程的同步 ...
- 七.jQuery源码解析之.toArray()
toArray()是将jQuery对象转换成数组 从源码中可以看到,这些常见的方法,都是直接从原生的 javascript中"借鉴"过来的.为什么这么说呢? 225行中,在运行时, ...
- C++11新特性介绍 02
阅读目录 1. 范围for语句 2. 尾置返回类型 3. =default 生成默认构造函数 4. 类对象成员的类内初始化 5. lambda表达式与bind函数 6. 智能指针share_ptr,u ...
- solr之高级查询--联表 join查询
例如有两个业务表:文章表,评论表 . 场景: 一个文章可以由多个人评论. 创建两个core,一个core叫article,一个叫comment.article实例的schema.xml文件中定义几个简 ...
- Python开发一个堡垒机
项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是堡垒 ...
- leetcode69
public class Solution { public int MySqrt(int x) { long r = x; while (r * r > x) r = (r + x / r) ...