学向勤中得,萤窗万卷书。这篇文章主要讲述Android中ViewPager+Fragment的销毁机制相关的知识,希望能为你提供帮助。
无意间发现viewPager中绑定三个Fragment后,在初始化最后一个Fragment时,发现控件初始化时为null的情况,
【Android中ViewPager+Fragment的销毁机制】排查了控件id重复及layout文件名称无冲突情况后,发现依旧无效。
然后换一个思路,排查fragment生命周期。
在使用ViewPager与Fragment的时候,ViewPager会自动缓存1页内的数据,
当我们当前处在页面2的时候,页面1和页面3的View实际上已经创建好了,所以在我们拖动的时候是可以看见他们的界面的。
但是当我们的页面处在1的时候,页面3实际上就已经销毁了。直到跳转到页面2的时候,页面3才会创建View。
这时,如果页面3中有需要耗时的事件,比如网络访问。那么,在我们进行 1-->
2 的操作的时候,就会不断的出现页面3加载的对话框(如果有的话)。
而且如果快速的 1-->
2-->
3的切换,3中的内容很可能还没加载出来。
这样重复的加载,既影响体验、又耗费时间和流量,在Fragment移出的时候不要销毁,或者保存状态。
经过努力尝试后,发现解决方案:
pager.setOffscreenPageLimit(2);
就可以让ViewPager多缓存一个页面,这样上面的问题就得到了解决。
By:yzl
推荐阅读
- 基于uni-app创建小程序项目
- Leetcode202 Happy number
- vue与Android之间的数据传值
- Android程序闪退时写日志并上传到服务器
- 内网状态配置Androidstudio离线状态运行项目
- Android开发 使用shapeshifter制作矢量图
- ionic (webApp)软qv键盘打开时视口高度变小导致样式问题的解决方案
- CRUD和Mapper.xml参数
- appium 启动参数配置