作者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://www.ptt.cc/bbs/AndroidDev/M.1402380627.A.711.html
※ 編輯: fake01 (140.138.152.10), 06/10/2014 14:18:29
→ fake01:加入((ViewPager) container).removeView(itemView); 06/10 14:24
→ fake01:在destroyItem 中 還是oom 06/10 14:25
推 visor:android:largeHeap="true" 試試看 06/10 16:50
→ fake01:V大 是可行,不過超過一定張數還是會OOM 06/10 17:20
→ fake01:剛試了一下 註解掉XX.setImageBitmap(bmp) 就不會oom 06/10 17:23
→ fake01:imageview 好像會卡住暫存阿... 06/10 17:24
推 lin1987www:你可以試試用 Android-Universal-Image-Loader 06/10 18:31
推 sdyy:其實這是viewpager的問題 他會把每一頁的圖都鎖住無法釋放 06/10 21:52
→ sdyy:所以你可以再背景用一個圖片管理,在非瀏覽頁面時釋放Butmap 06/10 21:54
→ sdyy:沒看到你的p.s. 其實就是你所想的那樣 view會把Butmap鎖住 06/10 21:55
→ sdyy:我的bitmap怎麼都打成butmap.... 06/10 21:55
→ sdyy:所以在瀏覽頁面+-1~2以外的view最好都要及時setBitmap = null 06/10 21:58
→ sdyy:應該是imageview.setImageDrawable(null); 重點是即時而非 06/10 21:58
→ sdyy:在destoryitem才呼叫 06/10 21:59