作者fake01 (假面超人)
看板AndroidDev
标题[问题] viewPager Imageview OOM
时间Tue Jun 10 14:10:24 2014
大家好
最近用了viewPager + FrameLayout 可以玩玩相簿,
但不断的出现OOM已经快疯掉了,
已经使用AsyncTask处理了大图片溢出的问题,
(BitmapFactory.Options options;
options.inSampleSize = 2;
......)
主要会有问题的地方,是当imageview.setImageBitmap(Bmp)後
,会暂存住bitmap,在PagerAdapter有提供
destroyItem(View container, int position, Object object)
让我recycle掉存在imageview里的bitmap
imageview.setImageDrawable(null);
if(oldBitmap !=null && !oldBitmap.isRecycled())
{
oldBitmap.recycle();
oldBitmap = null;
}
我以为这样已经可以将bitmap给清除乾净,但是当换了多张图片後
,还是出现了oom的问题(Caused by: java.lang.OutOfMemoryError:
(Heap Size=98304KB, Allocated=91403KB),想请问各位,该如何解决呢?
(ps. 突然想到会不会有可能是,ViewPager 每滑动一次,所以新增一个view
所以除了删除旧有的bitmap 旧有的view 也须手动删除?)
谢谢大家
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.138.152.10
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1402380627.A.711.html
※ 编辑: fake01 (140.138.152.10), 06/10/2014 14:18:29
1F:→ fake01:加入((ViewPager) container).removeView(itemView); 06/10 14:24
2F:→ fake01:在destroyItem 中 还是oom 06/10 14:25
3F:推 visor:android:largeHeap="true" 试试看 06/10 16:50
4F:→ fake01:V大 是可行,不过超过一定张数还是会OOM 06/10 17:20
5F:→ fake01:刚试了一下 注解掉XX.setImageBitmap(bmp) 就不会oom 06/10 17:23
6F:→ fake01:imageview 好像会卡住暂存阿... 06/10 17:24
7F:推 lin1987www:你可以试试用 Android-Universal-Image-Loader 06/10 18:31
9F:推 sdyy:其实这是viewpager的问题 他会把每一页的图都锁住无法释放 06/10 21:52
10F:→ sdyy:所以你可以再背景用一个图片管理,在非浏览页面时释放Butmap 06/10 21:54
11F:→ sdyy:没看到你的p.s. 其实就是你所想的那样 view会把Butmap锁住 06/10 21:55
12F:→ sdyy:我的bitmap怎麽都打成butmap.... 06/10 21:55
13F:→ sdyy:所以在浏览页面+-1~2以外的view最好都要及时setBitmap = null 06/10 21:58
14F:→ sdyy:应该是imageview.setImageDrawable(null); 重点是即时而非 06/10 21:58
15F:→ sdyy:在destoryitem才呼叫 06/10 21:59