Fragment的陷阱
来源:互联网 发布:民族知识知多少 编辑:程序博客网 时间:2024/05/17 21:59
转载:泡在网上的日子 http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0729/1635.html
这个确实很多开发人员容易忽略:
以前做过的一个项目,Fragment嵌套高德地图,当再次进入Fragment的时候,会出现奇怪的现象。嵌套的地图会出现滑动不动的情况,起先还以为是高德的bug呢,经过一番研究,终确定这是一个坑。
一般很容易会被大家忽略了一个问题。那就是当和Fragment关联的view hierarchy正在被移除时,不会执行onDestroy()方法,而是会调用onDestroyView()。比如 ViewPager + Fragment,默认情况下当ViewPager滑动到第三页的时候,第一页的Fragment就会执行onDestroyView,当再次滑动到第二页的时候,第一页的Fragment的onCreateView又会重新执行绘制页面。伴随而来的问题就是成员变量要重新赋值一次,辛苦耗时加载出来的页面又要重新加载一次,这样也就给内存增加了无意思的压力,用户体验上也不大友好,尤其在有网络请求等开销时长比较长的情况下。
那有没有上面解决办法呢?答案是肯定的。onDestroyView的执行和Activity的onDestroy不一样,不会销毁当前的页面,所以Fragment的所有成员变量的引用都还在。那就好办了,我们在onCreateView的时候,先判断该取到的数据是否为空,比如Fragment的根视图rootView,网络请求获取到的数据等,如果不为空就不用再次执行。这样一来也就避免了上述说的那些问题的存在了。
但是需要注意的一点就是,如果重用rootView的话,一定要记得在onDestroyView里面把rootView先给移除掉,因为已经有过父布局的View是不能再次添加到另一个新的父布局上面的。代码如下
这样也就解决了最前面我遇到的那个bug,由于每次进入都会创建一个MapView,很多地图叠在了一起,所以就出现了"滑不动"的奇怪现象。
今天分享的只是一个优化策略罢了,希望能帮助到你。
- Fragment的陷阱
- Fragment的陷阱
- Fragment的陷阱
- 【PagerAdapter】Fragment的陷阱
- Fragment的陷阱
- Fragment的陷阱
- Fragment的陷阱
- Fragment的陷阱
- Fragment的陷阱(转)
- '\'的陷阱
- :?的陷阱
- Delphi的接口陷阱
- TWebBrowser的Cache陷阱
- groovy 的陷阱
- 决策者的七大陷阱
- 公司政治的陷阱
- iterator的陷阱
- typedef的两个陷阱
- Vue.js vs React vs Angular 深度对比
- 无限滚动的TableView
- 微服务实战:从架构到发布(一)
- 17个你必须牢记的Win7快捷键
- 人脸检测与人脸对齐指标
- Fragment的陷阱
- C#怎么实现文件下载功能
- MyBatis(6):MyBatis 集成 Spring 事务管理(下)
- "/"程序中的服务器错误
- easyui-datagrid 编辑模式详解
- 几种简单的负载均衡算法及其Java代码实现
- 32. Spring Boot使用@SpringBootApplication注解【从零开始学Spring Boot】
- 正则表达式入门
- 2016年,对我影响最大的三本书