安卓Fragmnet的生命周期
Android Fragment生命周期概述
Fragment的生命周期包含以下几个主要状态:
-
创建阶段
● onAttach() - Fragment与Activity关联时调用
● onCreate() - Fragment被创建时调用
● onCreateView() - 创建Fragment的视图层次结构
● onViewCreated() - 视图创建完成后调用
● onActivityCreated() - Activity的onCreate()完成后调用 -
可见阶段
● onStart() - Fragment变为可见时调用
● onResume() - Fragment可以与用户交互时调用 -
暂停阶段
● onPause() - Fragment失去焦点时调用
● onStop() - Fragment不可见时调用 -
销毁阶段
● onDestroyView() - Fragment的视图被销毁时调用
● onDestroy() - Fragment被销毁时调用
● onDetach() - Fragment与Activity分离时调用
onAttach() → onCreate() → onCreateView() → onViewCreated() → onActivityCreated() →onStart() → onResume() → onPause() → onStop() → onDestroyView() → onDestroy() → onDetach()
生命周期回调方法详解
public class MyFragment extends Fragment {@Overridepublic void onAttach(Context context) {super.onAttach(context);// Fragment与Activity关联}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 初始化Fragment}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {// 创建并返回Fragment的视图return inflater.inflate(R.layout.fragment_layout, container, false);}@Overridepublic void onViewCreated(View view, Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);// 视图创建完成后的初始化工作}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);// Activity创建完成}@Overridepublic void onStart() {super.onStart();// Fragment变为可见}@Overridepublic void onResume() {super.onResume();// Fragment可以与用户交互}@Overridepublic void onPause() {super.onPause();// Fragment失去焦点}@Overridepublic void onStop() {super.onStop();// Fragment不可见}@Overridepublic void onDestroyView() {super.onDestroyView();// 视图被销毁}@Overridepublic void onDestroy() {super.onDestroy();// Fragment被销毁}@Overridepublic void onDetach() {super.onDetach();// Fragment与Activity分离}
}
Fragment生命周期中的资源释放时机
public class MyFragment extends Fragment {// 1. 在onDestroyView中释放View相关资源@Overridepublic void onDestroyView() {super.onDestroyView();// 释放View相关的资源// 取消网络请求// 停止动画// 释放监听器}// 2. 在onDestroy中释放Fragment级别的资源@Overridepublic void onDestroy() {super.onDestroy();// 释放Fragment级别的资源// 取消定时器// 释放数据库连接// 清理缓存}// 3. 在onDetach中释放Activity相关的引用@Overridepublic void onDetach() {super.onDetach();// 释放Activity相关的引用// 避免内存泄漏}
}