使用ViewPage过程中遇到的OOM及EX

OOM
情景:需要在一个Fragment中使用autobanner轮播图 和一个静态viewPager  同时两者都有联动Indicator
考虑结构类似决定复用同一个bannerFragment;
然后就悲剧了;连续花了两个晚上折腾到2点都没有调试清楚;
直到真正空下来认真研究调试;
<-------------------------------以上唠叨,以下正文-------------------------------------->
来围观第一个Bug

情景:1.进入就死;2.多次启动程序加载完图片或者使用静态图填充后,静态banner滑动;
下面这个错误的原因 :
是在  同一个Fragment 中复用同一个bannenrFragment   viewpager  中pager  ID一样
系统无法识别。类似递归,导致OOM

解决:复用代码bannerFragment  但是需要  cpuyi个相同的bannerFragment  xml文件  并且  pager的ID 需要重新注册;然后在
bannerFragment中根据需要复用;
另:不同的viewPager需要不同的fm;

解决了这个Bug,但是别开心太早还有 问题 依旧是OOM  (暂时不太清楚原因,后来清楚了)
补充:savestate  触发机制 是在图片加载过程中  关闭或暂停Activity调用
destoryitem()     触发机制是在图片加载完成之后  关闭activity触发

解决bug思路: 重写fragmentStatePagerAdapter  中  instantiateItem()、 destroyItem()、saveState()、 restoreState()方法

下面这个错误 是因为commit的执行是在Activity 销毁前 onsaveInstanceState之后进行操作的,此时用commit提交可能
导致因State丢失而导致异常,解决方法是commitAllowStateLoss()
官方文档:
允许在状态丢失的情况下提交

触发情景  当Fragment正在加载图片   back退出app  


onResponse中调用replace()但是此时Activity已经Ondestory();
解决思路: 1.异步任务重调用片段方法前,判断Activity是否存在,2.重写Ondestory();当destory触发则停止所有异步任务;
<-------------------------------以上正文,以下唠叨-------------------------------------->
终于有一种便秘365天之后一泻千里的畅快了。
性格比较倔强,虽然重心是开发,但是还是想克服难题;但是值得注意的是,在工作中尽量不要这么
较真,先实现功能为主,闲暇之时可以来研究;迂回,规避都可以;

感触:
遇到Bug不要怕,无非两种情况,一,别人能处理,你暂时不能处理,最后你能处理,二、Google从来都没想过
一个coder要这么用代码,您珍重吧----绕行。
在解决一些陌生的Bug时,一开始是很痛苦的但是等真的解决掉,居然特么的上瘾了我了个xxx,我要打十个!
所以如果是解决bug的时候,首先是要能静下心自己分析代码逻辑,反复打日志,反复让程序炸;
反复看代码,查文档,问度娘;并且收集ex、error记录比对;逐一击破;然后你就上瘾了;

最后,以上情景适用个例,如有雷同请慎用。
同是天涯代码狗,相逢何必曾相识;开心,所以决定分享这次经历;若其他有疑问,大家共同探讨;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值