Fragment生命周期与Activity相似
Fragment必须依赖于Activity才能运行,所以Activity生命周期调用优先于Fragment,并且Fragment比Activity要轻量很多。
- onAttach:Fragment与Activity的建立关联时调用,用于获得Activity传递的值
- onCreate:视图创建之前调用
- onCreateView:创建Fragment视图时调用
- onActivityCreated:视图创建完成之后调用
- onStart:界面视图显示状态下调用
- onResume:界面视图有焦点的状态下调用
- onDestroyView:在Fragment视图被移除时调用
- onDestroy : 销毁时调用
- onDetach : 当Fragment不再依附于Activity时调用
Fragment启动流程
Fragment创建时调用:
onAttach——>onCreate——>onCreateView——>onActivityCreated——>onStart——>onResume
Fragment不可见时调用:
onPause——>onStop
Fragment销毁时调用:
onPause——>onStop——>onDestroyView——>onDestory——>onDetach
流程图
开发过程中需要注意,可能会常用到的方法
setUserVisibleHint() 该方法是在onCreateView之前调用,所以该方法不能操作视图。不然回报空指针错误
使用场景:当与ViewPager使用时内部有个提前缓存的机制(默认是提前缓存一页),可以通过该方法做懒加载的处理。因为ViewPager的机制,初始化的过程中会加载前与后两个Fragment,用户还未手动触发第二页时就已经加载了后一个Fragment并进行网络请求渲染数据,完全违背了懒加载机制。所以需要使用该方法,当此Fragment可见时则进行网络请求并实现数据渲染刷新界面。
注意事项:在未使用ViewPager,而是自己通过FragmentTransaction 对Fragment进行add hide show操作,setUserVisibleHint()方法没有被调用。原因是hide()和show()方法调用时Fragment不走任何的生命周期。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
//界面可见
} else {
//界面不可见
}
}
onHiddenChanged() 用FragmentTransaction来控制fragment的hide和show时,那么这个方法就会被调用。每当你对某个Fragment使用hide或者是show的时候,那么这个Fragment就会自动调用这个方法。
(使用情况:你自己去管理Fragment,而不是用viewpager管理的时候)
来源:CSDN
作者:怀君
链接:https://blog.csdn.net/u013290250/article/details/103991926