Fragment生命周期小常识
一、生命周期的作用。
onAttach():fragment已经关联到activity
onCreate() :系统创建fragment的时候回调他,在他里面实例化一些变量
这些个变量主要是:当你 暂停 停止的时候 你想保持的数据
如果我们要为fragment启动一个后台线程,可以考虑将代码放于此处。
参数是:Bundle savedInstance, 用于保存 Fragment 参数, Fragement 也可以
重写 onSaveInstanceState(BundleoutState) 方法, 保存Fragement状态;
可以用于 文件保护
他只调用一次。
onCreateView() :关联XML布局,用于显示UI的
onActivityCreate() :Activity的onCreate生命周期执行完成之后调用这个方法,
一般用于与Activity UI践行交互操作的
onResume():和activity一致 在activity中运行是可见的
激活, Fragement 进入前台, 可获取焦点时激活;onPause() : 和activity一致 其他的activity获得焦点,这个仍然可见
第一次调用的时候,指的是 用户 离开这个fragment(并不是被销毁)
通常用于 用户的提交onStop() : 和activity一致
fragment不可见的, 可能情况:activity被stopped了 OR fragment被移除但被加入到回退栈中
一个stopped的fragment仍然是活着的如果长时间不用也会被移除
onDestoryView() :Fragment中的布局被移除是调用,
表示fragment销毁相关联的ui布局
清除所有跟视图有关的资源
onDestory() :销毁Fragment对象
onDetach :Fragment和activity解除关联时调用 脱离activity
二、应用场景:
切换到该Fragment:
onCreate
onCreateView
onActivityCreated
onStart
onResume
屏幕灭掉:
onPause
onSaveInstanceState
onStop
屏幕解锁:
onStart
onResume
切换到其他Fragment:
onPause
onStop
onDestroyView
切换回本身的Fragment:
onCreateView
onActivityCreated
onStart
onResume
回到桌面:
onPause
onSaveInstanceState
onStop
回到应用:
onStart
onResume
退出应用:
onPause
onStop
onDestroyView
onDestroy
onDetach
三、遇到的那些坑:
横竖屏切换:
1、切换成横屏时
2、切换成竖屏时,发现打印了两次相同的log
3、修改AndroidManifest.xml,把该Activity添加 Android:configChanges="orientation",横屏切换为竖屏
4、竖屏切换为横屏,发现不会再打印相同信息
5、把android:configChanges="orientation" 改成 android:configChanges="orientation|keyboardHidden",竖屏切换横屏,就只打印
onConfigChanged
onConfigurationChanged-->
总结 :
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行 onConfigurationChanged方法
赏: