这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战
Fragment 的生命周期
Fragment 在 Activity 内显示,Activity 有的生命周期回调 Fragment 也有,即 onCreate、onStart、onResume、onPause、onStop、onDestroy 等。
Fragment 也承担着管理 View 的责任,在 Fragment 的生命周期中还需要创建和销毁 View,对应着 onCreateView、onViewCreated 和 onDestroyView。
Fragment 与 Activity 的对比
Activity 的生命周期回调意味着 Activity 状态的变化,Fragment 是绑定 Activity 生命周期的 「View 管理器」,这导致 Fragment 有和 Activity 非常相似但又比 Activity 更加复杂的生命周期。
Fragment 不同于 Activity 的是,开发者是自己创建 Fragment 对象并将 Fragment 展示出来的,但同时在 Activity 销毁后恢复的时候也会由系统自动恢复,此时 Fragment 对象是 Android 通过反射创建的。两种创建来源上的区别导致 Fragment 的构造函数中加的参数不是稳定可用的,开发者必须通过 setArguments 向 Fragment 传递数据。
但 Fragment 的生命周期不是完全跟 Activity 同名生命周期绑定的,因为我们对 Fragment 的要求并不一样,一个 Activity 中并不是只能有一个 Fragment,甚至我们很多时候使用 Fragment 就是为了让 Activity 显示更多不同页面,单 Activity 架构的 App 也是存在的,虽然实践证明没必要追求非要单 Activity。
动态控制 Fragment 的时候,Fragment 的生命周期是由 FragmentManager 控制的,比如调用 replace 的时候 FragmentManager 会同时增加和删除 Fragment,这时候被删除的 Fragment 的 onPause、onDestroyView、onStop、onDestroy 被触发,新增 Fragment 的 onCreate、onCreateView、onViewCreated、onStart、onResume 被触发,但 Activity 并没有任何生命周期的变化。
结
今天遇到了匪夷所思的 bug,有点精神恍惚,不过反正是周五,周五就要有周五的态度,有什么 bug 周一再说。
这周末七夕,应该要断一天了,28 天的目标有点难啊。下次一定提前囤稿。
周末会有一天能写代码,希望实践部分能多写点,下周就能有足够的素材避免写纯文字的东西了…