[問題] viewPager Imageview OOM

看板AndroidDev作者 (假面超人)時間11年前 (2014/06/10 14:10), 11年前編輯推噓3(3012)
留言15則, 4人參與, 最新討論串1/3 (看更多)
大家好 最近用了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

06/10 14:24, , 1F
加入((ViewPager) container).removeView(itemView);
06/10 14:24, 1F

06/10 14:25, , 2F
在destroyItem 中 還是oom
06/10 14:25, 2F

06/10 16:50, , 3F
android:largeHeap="true" 試試看
06/10 16:50, 3F

06/10 17:20, , 4F
V大 是可行,不過超過一定張數還是會OOM
06/10 17:20, 4F

06/10 17:23, , 5F
剛試了一下 註解掉XX.setImageBitmap(bmp) 就不會oom
06/10 17:23, 5F

06/10 17:24, , 6F
imageview 好像會卡住暫存阿...
06/10 17:24, 6F

06/10 18:31, , 7F
你可以試試用 Android-Universal-Image-Loader
06/10 18:31, 7F

06/10 18:32, , 8F
06/10 18:32, 8F

06/10 21:52, , 9F
其實這是viewpager的問題 他會把每一頁的圖都鎖住無法釋放
06/10 21:52, 9F

06/10 21:54, , 10F
所以你可以再背景用一個圖片管理,在非瀏覽頁面時釋放Butmap
06/10 21:54, 10F

06/10 21:55, , 11F
沒看到你的p.s. 其實就是你所想的那樣 view會把Butmap鎖住
06/10 21:55, 11F

06/10 21:55, , 12F
我的bitmap怎麼都打成butmap....
06/10 21:55, 12F

06/10 21:58, , 13F
所以在瀏覽頁面+-1~2以外的view最好都要及時setBitmap = null
06/10 21:58, 13F

06/10 21:58, , 14F
應該是imageview.setImageDrawable(null); 重點是即時而非
06/10 21:58, 14F

06/10 21:59, , 15F
在destoryitem才呼叫
06/10 21:59, 15F
文章代碼(AID): #1Jbg5JSH (AndroidDev)
文章代碼(AID): #1Jbg5JSH (AndroidDev)