Fragment生命周期的奇怪设定

46 篇文章 0 订阅
29 篇文章 1 订阅

线上发生了一个神奇的问题: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值