分析fragment中api(setUserVisibleHin
作者:
爱你为你做饭 | 来源:发表于
2020-07-10 15:15 被阅读0次
- fragment的生命周期不像activity的生命周期,activity的切换会触发前面activity的onpause,但是fragment的切换不一定会触发fragmengt的生命周期,比如在viewpager中fragment的切换不一定会走onresume和onpause(后面会详细分析)。
- 针对单个fragment,api(setUserVisibleHint)优先级高于onresume(设置了显示才会走onresume)
- 在viewpager中两者之间的关系如下:
3.1. viewpager的加载机制是:加载第一项的同时预加载第二项,此时显示第一项但是维护了两个子view,滑动到第二项的时候预加载第三项,滑动到第三项的时候,预加载第四项,此时会回收第一项。即viewpager会始终维护三个view(当前显示和前后两个view)
3.2. 由上面机制看到fragment在viewpager的生命周期(以onresume和onpause为例)为:
先走0的onresume由于预加载同时会走1的onresume,滑动到1的时候会走2的onresume,滑动到2的时候会走3的onresume此时由于第一项被回收,所以0的onpause会被触发,继续向下滑动以此类推,若向上滑动到1的时候0会被重建,则走0的onresume,3被回收则3的onpause会被触发。
两者之间的关系:针对第0项(第一次加载时的第一项),setUserVisibleHint优先级高于onresume,但是由于viewpager的预加载的存在,针对后面滑动onresume要优先于setUserVisibleHint。onpause则相反,onpause的优先级低于setUserVisibleHint()。
- 分析两者的关系要结合fragment所依赖的容器的机制去分析。
- setUserVisibleHint()并不是系统调用,而是在容器的切换中手动调用api,所以在某些容器中可能并没有处理这个逻辑。
参考文章:
分析setUserVisibleHint和OnhiddenChange和isVisible的坑
本文标题:分析fragment中api(setUserVisibleHin
本文链接:https://www.haomeiwen.com/subject/dfkmcktx.html
网友评论