Fragment总结

Fragment的什么周期

1.onAttach ->onCreate->onCreateView-onActivityCreated ->onStart->onResume->onPause->onStop->onDestoryView->onDestory->onDetach
2.onAttach 在fragment和activityt关联之后调用
3.onCreate 在fragment第一次创建的时候调用,这个时候ac还没创建完成 ,所以不能获取当前ac的一些资源
onCreateView是在构造视图时调用,这个时候 ac也没创建完成
4.onActivityCreated ac调用onCreate之后调用,可以用ac的一些资源了
5.onStart onResume onStop onPause 同ac一样
6.onDestoryView fragment即将被结束活保存的时候调用
7.onDestory 当这个fragment不再使用时调用。但是还能被ac找到,因为没有被detach
8.onDetach 最后调用的,调用之后fragmetn就不再和ac想绑定了。
9.有一点很重要,Activity的onResume是可见,而Fragment不能这样理解, 要理解为预加载的几个界面都是现实的,因为预加载的时候都已经把onResume走了。他是根据setUserVisibleHint(boolean show)这个方法.

Fragment的另一个重要的东西FragmetnPageAdapter 和FragmetnStatePageAdapter

用FragmetnPageAdapter的话

第一次进来 当前第一个界面和右边的界面都会走attach onCreate onCreateView onActivityCreated onStart onResume
向右滑动到第二个界面 虽然第一个界面不显示了 但是不会走第一个的生命周期, 会走第三个界面的 attach onCreate onCreateView onActivityCreated onStart onResume,
在向右滑动到第三个界面 第四个界面会走上面的attach 到onResume ,这个时候因为预加载默认是1,所以第一个界面会走onPause—onStop —onDestoryView,这个时候只摧毁了view视图,而没有吧fragment摧毁掉,如果要把fragmetn摧毁掉肯定会走onDetach()
再向右滑动到第四个界面,这个时候,因为第四个界面已经预加载过了,所以只会走第二个界面的onPause—onStop —onDestoryView
现在向左滑动到第三个界面,会走第二个界面的onCreateView onActivityCreateView onstart 和onResume
再向左同上
如果直接屏幕关了 这个时候会走这预加载的三个界面的onPause 和onStop,再开屏幕就是onStart 和onResume

用FragmentStatePageAdapter的话

其余的都和FragmetnPageAdapte一样
第三点不一样,滑动到第三个的时候,预加载还是默认为1的时候,第一个界面不是摧毁view视图了,而是直接把fragment摧毁了,所有走的是onPause—onStop —onDestoryView —onDestory —onDetach。这就是他们的区别 一个摧毁view视图,一个摧毁整个fragment。不带state的adapter会吧所有的Fragmetn都加载到内存中,而带state的只会加载预加载的几个界面,所以内存消耗小,但是每次都要重新去创建view视图,也就是要从新走了attach 到onResume,这个会需比较耗时间

https://www.jianshu.com/p/9f538c3a1918

你可能感兴趣的:(Fragment总结)