引言
其实Fragment的生命周期与Activity的生命周期有很多相似之处,但是本身也有自己特有的生命周期。
正文
1.Fragment生命周期介绍
(1) onAttach():与Activity进行一个绑定
(2) onCreate():创建Fragment时的回调
(3) onCreateView:创建、绘制Fragment的View时回调该方法
(4) onActivityCreated:当Fragment所在的Activity被完全创建时回调该方法
(5) onStart():调用该方法时Fragment可见,但不可与用户进行交互
(6) onResume():调用该方法时Fragment可见也可与用户交互
(7) onPause():Fragment失去焦点,不可与用户交互
(8) onStop():Fragment停止,失去焦点、不可与用户交互、不可见
(9) onDestroyView():销毁Fragment视图,但未与Activity解除绑定
(10) onDestroy():销毁Fragment时的调用
(11) onDetach():与Activity解除绑定
2.执行流程
(1) Fragment创建:onAttach() --- onCreate() --- onStart() --- onResume()
(2) Fragment销毁:onPause() --- onStop() --- onDestroyView() --- onDestroy() --- onDetach()
(3) 按下Home键/锁屏:onPause() --- onStop()
(4) 从桌面回到Fragment/解锁:onStart() --- onResume()
(5) 切换到其他Fragment A-B:A执行的生命周期onPause() --- onStop() --- onDestroy() ,B执行的生命周期:onCreateView() --- onActivityCreated() --- onStart() ---onResume()
3.Fragment的setRetainInstance(true/false)方法
setRetainInstance(true/false)这个方法我们在平时可能没有注意到,其实我也是刚发现,这个方法可以帮我们有效的提高运行效率,当Fragment调用该方法后重建Activity时我们的Fragment可以不完全销毁,可以有效的提高我们App的运行效率,这个方法在Fragment的onCreate()方法中调用最合适,但是有一点需要注意,就是当Fragment调用setRetainInstance(true/false)方法后,在回复Fragment时不会再走我们的onCreate()和onDestroy()方法,所以不要再我们的onCreate()方法中进行一些逻辑处理或者初始化一些变量。
4.Fragment回退栈
我们的Activity是以压栈和出栈的方式来进行一个Activity的切换,但是我们的Fragment一般都是以销毁重建的方法来进行一个切换,所以我们可以将我们的Fragment添加到会退栈中,这样我们的Fragment也就有了跟Activity一样的栈管理。关于Fragment回退栈我只简单介绍一下,具体使用就不再做详细的演示。
4.1 Fragment回退栈中的一些方法
(1) addToBackStack(tag):将Fragment添加到回退栈中
(2) popBackStack():销毁回退栈中栈顶的Fragment
(3) getBackStackImmediate():立刻销毁回退栈中栈顶的Fragment
(4) getBackStackEntryAt(int index):获取回退栈中该索引值下的Fragment
(5) getBackStackEntryCount():获取Fragment回退栈中的Fragment个数