Fragment生命周期

本文深入解析Android中Fragment的生命周期,通过代码演示了Fragment在不同操作下的状态变化,包括Attach、Create、CreateView、ActivityCreated、Start、Resume等关键阶段,并展示了与Activity生命周期的对比。此外,还详细记录了当屏幕灭掉、解锁、切换到其他Fragment以及切换回本身Fragment时Fragment的状态变化。

原文:http://blog.youkuaiyun.com/forever_crying/article/details/8238863/

官网帮助文档链接:
http://developer.android.com/guide/components/fragments.html
主要看两张图,和跑代码
一,Fragment的生命周期
这里写图片描述
二,与Activity生命周期的对比
这里写图片描述
场景演示 : 切换到该Fragment
11-29 14:26:35.095: D/AppListFragment(7649): onAttach
11-29 14:26:35.095: D/AppListFragment(7649): onCreate
11-29 14:26:35.095: D/AppListFragment(7649): onCreateView
11-29 14:26:35.100: D/AppListFragment(7649): onActivityCreated
11-29 14:26:35.120: D/AppListFragment(7649): onStart
11-29 14:26:35.120: D/AppListFragment(7649): onResume
屏幕灭掉:
11-29 14:27:35.185: D/AppListFragment(7649): onPause
11-29 14:27:35.205: D/AppListFragment(7649): onSaveInstanceState
11-29 14:27:35.205: D/AppListFragment(7649): onStop

屏幕解锁
11-29 14:33:13.240: D/AppListFragment(7649): onStart
11-29 14:33:13.275: D/AppListFragment(7649): onResume

切换到其他Fragment:
11-29 14:33:33.655: D/AppListFragment(7649): onPause
11-29 14:33:33.655: D/AppListFragment(7649): onStop
11-29 14:33:33.660: D/AppListFragment(7649): onDestroyView

切换回本身的Fragment:
11-29 14:33:55.820: D/AppListFragment(7649): onCreateView
11-29 14:33:55.825: D/AppListFragment(7649): onActivityCreated
11-29 14:33:55.825: D/AppListFragment(7649): onStart
11-29 14:33:55.825: D/AppListFragment(7649): onResume
回到桌面
11-29 14:34:26.590: D/AppListFragment(7649): onPause
11-29 14:34:26.880: D/AppListFragment(7649): onSaveInstanceState
11-29 14:34:26.880: D/AppListFragment(7649): onStop
回到应用
11-29 14:36:51.940: D/AppListFragment(7649): onStart
11-29 14:36:51.940: D/AppListFragment(7649): onResume

退出应用
11-29 14:37:03.020: D/AppListFragment(7649): onPause
11-29 14:37:03.155: D/AppListFragment(7649): onStop
11-29 14:37:03.155: D/AppListFragment(7649): onDestroyView
11-29 14:37:03.165: D/AppListFragment(7649): onDestroy
11-29 14:37:03.165: D/AppListFragment(7649): onDetach

比Activity多了一些生命周期,完整和Activity对接上,大家好好利用。

Android 中的 Fragment 是一种模块化 UI 组件,可以嵌入到 Activity 中并拥有自己的生命周期Fragment生命周期与宿主 Activity 紧密相关,但又具备独立的生命周期流程。以下是 Fragment 生命周期的详细解析: ### Fragment 生命周期阶段 Fragment生命周期由多个回调方法组成,这些方法在特定的生命周期事件发生时被调用。 1. **onAttach()** 当 Fragment 被附加到宿主 Activity 时调用。此时 Fragment 与 Activity 建立了联系,可以获取到 Activity 的引用。这是 Fragment 生命周期的第一个回调方法[^5]。 2. **onCreate()** 在 Fragment 初始化时调用。通常用于执行一些非 UI 相关的初始化操作,例如恢复状态或创建 ViewModel 实例。这个阶段与 Activity 的 onCreate() 类似,但不涉及视图创建。 3. **onCreateView()** 用于创建 Fragment 的视图层次结构。在此方法中通常会通过 `LayoutInflater` 加载布局资源并返回根视图。如果不需要 UI,则可以返回 `null`。此阶段是 Fragment UI 初始化的核心部分。 4. **onViewCreated()** 在 onCreateView() 返回的视图创建完成后调用。适合进行视图的绑定和初始化操作,例如设置监听器或加载数据。 5. **onActivityCreated()** 表示宿主 Activity 已经完成其 onCreate() 方法。此时可以安全地访问 Activity 的 UI 元素和数据。此方法在 Fragment 与 Activity 完全绑定后调用[^5]。 6. **onStart()** Fragment 变得可见时调用。此时 Fragment 已经附加到窗口,并准备显示给用户。 7. **onResume()** Fragment 进入活跃状态,用户可以与之交互。此阶段是 Fragment 生命周期中最活跃的部分。 8. **onPause()** 当 Fragment 失去焦点但仍部分可见时调用。通常用于保存数据或释放资源。 9. **onStop()** 当 Fragment 完全不可见时调用。此时 Fragment 仍保留其状态和视图层次结构,但可能被系统回收以节省资源。 10. **onDestroyView()** 当 Fragment 的视图被销毁时调用。通常发生在 Fragment 被替换或移除时。此时可以释放与视图相关的资源。 11. **onDestroy()** Fragment 被销毁时调用。通常用于释放所有资源,例如取消异步任务或注销监听器。 12. **onDetach()** Fragment 与宿主 Activity 解除绑定时调用。这是 Fragment 生命周期的最后一个回调方法。 ### Fragment 与 Activity 生命周期的关系 Fragment生命周期与其宿主 Activity 紧密相关。当 Activity 的生命周期发生变化时,Fragment生命周期也会相应变化。例如: - 当 Activity 被创建时,Fragment 会依次执行 onAttach()、onCreate()、onCreateView() 和 onActivityCreated()。 - 当 Activity 被销毁时,Fragment 会依次执行 onDestroy() 和 onDetach()。 - 如果 Fragment 被隐藏或显示,可以通过 `onHiddenChanged(boolean hidden)` 方法进行处理[^2]。 ### Fragment 生命周期示例代码 以下是一个简单的 Fragment 示例,展示了如何实现部分生命周期方法: ```java public class ExampleFragment extends Fragment { @Override public void onAttach(@NonNull Context context) { super.onAttach(context); // Fragment 被附加到 Activity } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化非 UI 相关的数据 } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // 创建 Fragment 的 UI return inflater.inflate(R.layout.fragment_example, container, false); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // 初始化视图和数据 } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // 宿主 Activity 已经创建完成 } @Override public void onDestroyView() { super.onDestroyView(); // 释放与视图相关的资源 } @Override public void onDestroy() { super.onDestroy(); // 释放所有资源 } @Override public void onDetach() { super.onDetach(); // Fragment 与 Activity 解除绑定 } } ``` ### 生命周期图示 Fragment生命周期可以通过一张图来更直观地理解。生命周期图展示了 Fragment 从创建到销毁的整个过程,以及各个生命周期方法之间的关系。Fragment生命周期图可以在 [GitHub](https://github.com/xxv/android-lifecycle) 上找到[^2]。 ### 生命周期管理 在实际开发中,Fragment生命周期管理需要注意以下几点: - **避免内存泄漏**:在 Fragment 中持有 Activity 或 Context 的引用时,需要确保在生命周期结束时释放这些引用。 - **合理使用返回栈**:将 Fragment 添加到返回栈中可以实现用户点击返回键时回退到上一个 Fragment 的效果。未添加到返回栈的 Fragment 在替换时会被直接销毁。 - **动态管理 Fragment**:通过 `FragmentManager` 和 `FragmentTransaction` 可以动态地添加、替换或移除 Fragment。 ### 总结 Fragment生命周期是 Android 开发中的核心概念之一。通过理解 Fragment生命周期及其与 Activity 的关系,开发者可以更好地管理 UI 组件和资源,从而构建出更高效、更稳定的 Android 应用。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值