Android开发实践中的OOM
2016-03-07 14:00
676 查看
1.ViewPager+fragment +多图的OOM
项目组有一个项目,是做一个像ppt效果的apk,于是就用到了ViewPager+fragment来实现,每个页面加入想要的动画即可,虽然他们图片已经控制的很小了,虽然我的ViewPager使用的adater是FragmentStatePagerAdapter的子类,但是滑动到20页的时候,还是会OOM,最后才在这里找到了答案:http://blog.csdn.net/u011291302/article/details/50177507
原因:虽然FragmentStatePagerAdapter会销毁不需要的fragment,但是如果该图片一直被imageview保持引用就会出现无法回收的状态,最终这些图片越来越多,导致内存溢出。然后要解决的问题就是在适当的时间释放掉这些引用。
这里viewpager和fragment配合使用,当然是以fragment为一个单位,那么在fragment的onDestroyView释放引用。代码如下
项目组有一个项目,是做一个像ppt效果的apk,于是就用到了ViewPager+fragment来实现,每个页面加入想要的动画即可,虽然他们图片已经控制的很小了,虽然我的ViewPager使用的adater是FragmentStatePagerAdapter的子类,但是滑动到20页的时候,还是会OOM,最后才在这里找到了答案:http://blog.csdn.net/u011291302/article/details/50177507
原因:虽然FragmentStatePagerAdapter会销毁不需要的fragment,但是如果该图片一直被imageview保持引用就会出现无法回收的状态,最终这些图片越来越多,导致内存溢出。然后要解决的问题就是在适当的时间释放掉这些引用。
这里viewpager和fragment配合使用,当然是以fragment为一个单位,那么在fragment的onDestroyView释放引用。代码如下
protected void unbindDrawables(View view) { if (view.getBackground() != null) { view.getBackground().setCallback(null); } if (view instanceof ViewGroup && !(view instanceof AdapterView)) { for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { unbindDrawables(((ViewGroup) view).getChildAt(i)); } ((ViewGroup) view).removeAllViews(); } }
相关文章推荐
- 【Xamarin开发 Android 系列 4】 Android 基础知识
- Android SVG转化VectorDrawable
- 【Xamarin开发 Android 系列 3】循序渐进的学习顺序
- 【Xamarin开发 Android 系列 2】VS2015跨平台开发的几种方式
- 【Xamarin开发 Android 系列 1】环境部署搭建
- android系统手机限制cpu频率让手机省电
- android常用的弹出提示框
- Xamarin.Android真机调试时闪退解决办法
- socket——本地服务器和android手机客户端通讯(防止中文乱码)
- Android SQLite是线程安全的吗?
- xamarin.forms 版本自动更新(针对android)
- 另类vs2015+xamarin 的android界面乱码 解决
- vs2015 Xamarin.Android安装
- android View 的生命周期
- 深入理解Android的startservice
- android平台获取手机IMSI,IMEI ,序列号,和 手机号的方法
- Android开发之发送自定义广播
- Android实现类淘宝多图评价
- Android 动态加载 (二) 态加载机制 案例二
- Android5.x新特性之 Toolbar和Theme的使用