前言:
本文以市面上常见的架构为例子,剖析fragment的声明周期
以下为正文->
1.打开页面
可以看到setUserVisibleHint方法首当其冲,优先于fragment的所有生命周期方法调用
随后是onAttach和onCreate两个生命周期的执行,
一直到onResume生命周期这里,
两个fragment的生命周期是交互执行的
2.这里切换到第二个fragment
ViewPager预加载特性,会预加载响铃的两个fragment,此时需要做懒加载操作,
一般在setUserVisibleHint方法里面做操作
详情请看fragment懒加载思路
3.然后是第三个fragment
非相邻fragment,视图会被销毁
4.第4个fragment
非相邻fragment,视图会被销毁
5.回到第三个fragment
这里,之前被销毁的fragment(相邻fragment)重新创建了视图
6.回到第二个fragment
非相邻fragment被销毁视图
这里,之前被销毁的fragment(相邻fragment)重新创建了视图
7.回到第一个fragment
非相邻的fragment会被销毁视图
setUserVisibleHint为true,说明已经进入可见状态
8.锁屏&解锁的操作
这里会进行失去焦点,获取焦点
9.后台&前台
可以看到,和锁屏走的生命周期一致
10.退出APP
这里依次执行了 onPause onStop onDestroyView onDestroy onDetach
viewpager让人又爱又恨,
最主要的是因为他的预加载,
有些业务场景需要我们对fragment的声明周期了解的足够清楚,
才能知道自己在哪个方法里面做懒加载操作,
最后,再重复一下->fragment懒加载思路