一、Fragment生命周期方法概述
public class ExampleFragment extends Fragment {
public ExampleFragment() {
// Required empty public constructor
}
// Fragment创建
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
}
// Fragment创建视图
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// ...
return rootView;
}
// Fragment添加到Activity
@Override
public void onAttach(Context context) {
super.onAttach(context);
// ...
}
// Fragment即将显示
@Override
public void onStart() {
super.onStart();
// ...
}
// Fragment可交互
@Override
public void onResume() {
super.onResume();
// ...
}
// Fragment不可交互
@Override
public void onPause() {
super.onPause();
// ...
}
// Fragment不可见
@Override
public void onStop() {
super.onStop();
// ...
}
// Fragment解除与Activity的关联
@Override
public void onDetach() {
super.onDetach();
// ...
}
// Fragment销毁视图
@Override
public void onDestroyView() {
super.onDestroyView();
// ...
}
// Fragment销毁
@Override
public void onDestroy() {
super.onDestroy();
// ...
}
}
Fragment是Android开发中常见的一个关键组件,因此学习Fragment的生命周期也就成为了必须掌握的内容之一。在这里,我们将围绕着生命周期方法,在接下来的段落中对Fragment的生命周期进行详细的讲解。
二、Fragment生命周期方法是用来加载
在Fragment的生命周期中,其中被广泛运用的就是onCreateView()方法,这个方法用来加载Fragment的视图,还可以在这个过程中完成一些初始化的工作。
这个方法通常在Fragment创建时调用,具体调用时机为:
1、如果Fragment离线并且它具有UI,则在它被更新为在线并从其视图层次结构中删除时调用onCreateView()。
2、如果Fragment在线并且它具有UI,则在将其视图从其视图层次结构中删除时调用onCreateView()。
三、Fragment生命周期变化
Fragment的生命周期是会发生变化的。当它被创建时,将会经历onAttach()、onCreate()、onCreateView()、onActivityCreated()、onStart()和onResume()等生命周期方法。当Fragment被销毁时,将会经历onPause()、onStop()、onDestroyView()、onDestroy()和onDetach()等生命周期方法。
在这些生命周期方法的调用过程中,Fragment的状态也随之发生变化,如下表所示:
四、Fragment生命周期有哪些
在Android开发者中,常见的对Fragment的生命周期方法的描述通常是这样的:
onCreateView() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()
虽然这个描述可以大致了解Fragment的生命周期,但是其实还有很多细节和变化。常用的生命周期方法及其作用如下所示:
五、Fragment生命周期4种状态
Fragment的生命周期状态一共分为4种,即:
1、Active:Fragment当前处于活跃状态,也就是当前用户正在与Fragment进行交互。
2、Paused:Fragment处于失去焦点的状态。
3、Stopped:Fragment不可见,但是仍然和Activity相关联。
4、Destroyed:Fragment已被销毁,其上下文已被完全销毁,并且它与Activity的链接已断开。
六、Fragment生命周期表
下面是对Fragment生命周期的详细描述:
生命周期方法 | 调用时机 | 作用 |
---|---|---|
onAttach() | 当Fragment被添加到Activity时 | Fragment与Activity相关联 |
onCreate() | 当Fragment被创建时 | 完成初始化工作 |
onCreateView() | 当Fragment首次创建View时 | 加载并返回Fragment的布局 |
onActivityCreated() | 当Fragment所依附的Activity完成onCreate()时 | 完成Fragment添加到Activity后的操作,如恢复ABD, 延迟动画等 |
onStart() | 当Fragment开始可见时 | Fragment是可见且已经附加到Activity |
onResume() | 当Fragment可交互时 | Fragment处于栈顶,用户可以与之交互 |
onPause() | 当Fragment失去焦点时 | Fragment不可见,但是仍然存活 |
onStop() | 当Fragment不可见时 | Fragment未销毁,但是不可见,可能已被回收 |
onDestroyView() | 当Fragment的视图被销毁时 | 解除View的引用,避免内存泄漏 |
onDestroy() | 当Fragment被销毁时 | 释放资源 |
onDetach() | 当Fragment与Activity解除关联时 | 释放所有与Activity相关联的资源 |
七、Fragment生命周期图
为了更加方便地理解Fragment的生命周期,下面是一张生命周期的图表。
八、Fragment生命周期方法详解
1、onCreate()
在Fragment创建时回调。这个生命周期方法可以完成一些初始化,如创建数据集或者一些文件。
2、onAttach()
当Fragment被附加到Activity时回调。在这个生命周期方法中,我们可以获取与当前Fragment相关联的Activity,通过调用getActivity()方法来实现。
@Override
public void onAttach(Context context) {
super.onAttach(context);
//获取到当前 Fragment 所属 activity 的引用
mActivity = (MainActivity) context;
}
3、onCreateView()
在Fragment首次创建视图时调用。这个方法通常用于初始化Fragment的布局,并返回这个布局的根View。此外,在onCreateView()方法中还可以设置Fragment的显示风格、添加事件监听和初始化一些控件等。
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// 最好加上root 参数,否则报错
View root = inflater.inflate(R.layout.fragment_layout, container, false);
// 初始化布局
initView(root);
return root;
}
private void initView(View root) {
}
4、onActivityCreated()
在Activity创建之后,Fragment将触发onActivityCreated()方法。在这个生命周期方法中,Fragment已经关联到Activity,并且Activity的视图层次结构已经完全初始化,所以这里可以扩展Activity的UI等。
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// ...
}
5、onStart()
在用户可以看见Fragment时回调。这个生命周期方法表示Fragment可见,已经添加到Activity中,但是可能不在前台。在onStart()方法中我们可以处理Fragment相关的可见性,比如是否显示广告、是否展示一些提示、是否刷新数据等。
@Override
public void onStart() {
super.onStart();
// ...
}
6、onResume()
这个生命周期方法表示Fragment正在前台,可以与用户进行交互。在onResume()方法中,我们可以开启或恢复一些服务或线程,从而维护Fragment的UI显示。
@Override
public void onResume() {
super.onResume();
// ...
}
7、onPause()
Fragment正在前台并与用户进行交互时,如果发生了一些影响到了页面可见性的事情,比如打开了另一个Activity、弹出了Dialog等,那么onPause()方法将会被调用。在这里,我们可以暂停一些资源的使用,比如MediaPlayer、网络操作等。
@Override
public void onPause() {
super.onPause();
// ...
}
8、onStop()
当Fragment不再可见时回调,比如被另一个Fragment覆盖或者当Activity进入后台时。onStop()方法可以用来停止或释放资源,比如停止动画、取消网络访问等。
@Override
public void onStop() {
super.onStop();
// ...
}
9、onDestroyView()
当Fragment视图被销毁时回调。在onDestroyView()方法中,我们可以销毁那些与UI相关的资源,如View和Dialog等。但是,Fragment所关联的Activity仍然存在,所以Fragment不能被销毁。
@Override
public void onDestroyView() {
super.onDestroyView();
// ...
}
10、onDestroy()
当Fragment将要被销毁时回调。在这个生命周期方法中,我们可以销毁一些资源,比如停止动画、取消网络访问等。此外,如果在onCreateView()方法中创建了非View相关的资源,那么onDestroy()方法中也要进行释放。
@Override
public void onDestroy() {
super.onDestroy();
// ...
}
11、onDetach()
当Fragment与Activity解除关联时回调。在这个生命周期方法中,我们可以进行资源释放或者清除操作。例如在onAttach()方法中获取到的Activity的应用需要在onDetach()方法中清除掉。
@Override
public void onDetach() {
super.onDetach();
// ...
}
九、Fragment生命周期方法包括
Fragment的生命周期包括Fragment的创建周期、Fragment的可见性和状态周期、Fragment的交互周期及Fragment的系统相关周期。
十、总结
经过这么详