Fragment生命周期的奇怪设定
来源:互联网 发布:java多线程 无等待 编辑:程序博客网 时间:2024/06/03 14:35
线上发生了一个神奇的问题:fragment在onCreate的时候初始化数据,判断异常并finishActivity。然而居然走到了onViewCreated…
原因是Fragment的生命周期的调用关系跟臆想的不一样。在FragmentManager内部,Fragment会有几个[状态](http://grepcode.com/file/repo1.maven.org/maven2/com.google.android/support-v4/r7/android/support/v4/app/Fragment.java#Fragment.0INITIALIZING):
static final int INITIALIZING = 0; // Not yet created. static final int CREATED = 1; // Created. static final int ACTIVITY_CREATED = 2; // The activity has finished its creation. static final int STOPPED = 3; // Fully created, not started. static final int STARTED = 4; // Created and started, not resumed. static final int RESUMED = 5; // Created started and resumed.
这些状态的转换过程中会调用Fragment的生命周期方法。如果在同一个状态下调用的方法,不会因为Activity#finish的调用而导致后续方法不被调用。
神奇的是,状态可能一次跳转多次,所以很可能从起始态一路狂奔到中间态。比如从INITIALIZING一路干到STARTED。
更神奇的是,销毁状态是靠回滚state完成的。
创建过程中状态对应的方法:
- INITIALIZING:onAttach、onCreate、onCreateView、onViewCreated
- CREATED:onCreateView、onViewCreated、onActivityCreated
- ACTIVITY_CREATED、STOPPED:onStart
- STARTED:onResume
销毁过程中状态对应的方法:
- RESUMED:onPause
- STARTED:onStop
- ACTIVITY_CREATED:onDestroyView
- CREATED:onDestory、onDetach
总结起来,所有重写的生命周期方法,一定会被调到,所有异常状态都只能在最后一个重写的方法中处理。
阅读全文
0 0
- Fragment生命周期的奇怪设定
- Jmeter的一些不解的奇怪设定
- 关于Fragment的生命周期
- Fragment的生命周期
- 3.2 Fragment的生命周期
- Fragment的生命周期
- Fragment的生命周期初识
- Android-Fragment的生命周期
- Fragment的生命周期
- Fragment 的生命周期
- Fragment 的生命周期
- Fragment的生命周期
- Fragment的生命周期
- 【Android】Fragment的生命周期
- Fragment 的生命周期
- Fragment的生命周期
- Fragment的生命周期
- Android Fragment的生命周期
- 位运算
- js中的事件委托或是事件代理详解
- macOS zip 打包加密和 unzip 解压
- SQLite数据库对数据的基本操作(一)
- java反射
- Fragment生命周期的奇怪设定
- Android设计模式之(2)----Builder模式
- 当程序员老去...一位资深程序员的自白....
- FreeRTOS学习笔记(一)基础篇
- Android 7.0 应用间文件访问方法(FileProvider)
- 理解和使用html5shiv
- DOM解析HTML
- DataBinding 案例使用demo
- CentOS-7.0.中安装与配置Tomcat-7的方法