前言
最近公司动荡,我在的项目受大环境影响收益每年下滑,可能要领盒饭了,所以最近都在复习相关基础内容,毕竟小脑袋瓜会忘记以前学过的东西。
在ViewPager和Fragment的懒加载中,具体的原理是怎么样的呢?为什么能只执行显示的Fragment的onResume方法?
疑问
借用一篇文章的说明
1.Lifecycle.State.STARTED对应Fragment的STARTED状态,如果当前Fragment状态低于STARTED,那么Fragment的状态会变为STARTED,以当前Fragment状态为CREATED为例,接下来会依次执行onCreateView()、onActivityCreate()和onStart()方法;
2.如果当前Fragment状态高于STARTED,也就是RESUMED,那么Fragment的状态会被强制降为STARTED,接下来会执行onPause()方法。
疑问一:设置STARTED后是否执行onResume?那是否能交互?
疑问二:FragmentPagerAdapter如果设置STARTED的话,就不会执行到onResume方法,懒加载就无法实现,更没有降级一说?
探索
疑问一:
实践是检验最好的结果,
设置CREATE的:只走了onCreate方法,onStart和onResume不触发,fragment也不显示
设置STARTED的话:不执行onResume,但也不影响页面可交互。
前备知识在疑问二有记录
疑问二
原有的懒加载是用 setUserVisibleHint实现,但查看源码已经给设置成@Deprecated
注释的setMaxLifecycle是什么呢?单看意思就是最大生命周期,就是一个生命周期阻断的作用。
用法如下
FragmentTransaction mCurTransaction = getSupportFragmentManager().beginTransaction();
mCurTransaction.setMaxLifecycle(mCurrentPrimaryItem, Lifecycle.State.STARTED);
其中的入参中LifeCycle.State是个枚举类型,