[問題] 關於載入多張圖片時out of memry

看板AndroidDev作者 (baobomb)時間12年前 (2013/12/25 09:45), 編輯推噓4(4023)
留言27則, 6人參與, 最新討論串1/1
小弟不才 最近正在學習開發app 遇上了一個小問題 使用bitmap讀入sd卡中的圖檔 並且讓ImageView取得圖片並顯示後 下一步我設置了一個button 並監聽按鈕 當我按下按鈕時觸發事件 更換ImageView的圖檔 但是每當我按下button觸發了更換圖片的事件後 就會出現out of memory 的錯誤 上網google後 大部份提供的意見 都是因為圖檔過大 造成調用記憶體時記憶體不足 建議的方法都是適時使用recycle() 來做記憶體回收的動作 但是照著建議實做了一次 在ImageView自bitmap取得圖片後 就釋放了bitmap所佔用的記憶體 然後再觸發更換圖片的按鈕 卻還是有一樣的問題 請問該如何解決呢 不知道有沒有大大能夠提供一點想法 手機排版差請見諒 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.90.203

12/25 10:36, , 1F
版上搜尋image loader
12/25 10:36, 1F

12/25 11:51, , 2F
bitmap simplesize條2看看
12/25 11:51, 2F

12/25 14:24, , 3F
simplesize 這我試過 縮小圖片尺寸到原始的四分之一了 還
12/25 14:24, 3F

12/25 14:24, , 4F
是會報錯
12/25 14:24, 4F

12/25 14:25, , 5F
從ddms給的訊息看來 應該是bitmap
12/25 14:25, 5F

12/25 14:26, , 6F
每次取得圖片資料 都會調用ram ram不足導致
12/25 14:26, 6F

12/25 21:16, , 7F
雖然我不是載入圖片 我是上傳大檔案發生OOM
12/25 21:16, 7F

12/25 21:16, , 8F
我都初找到的OOM大部份都是在說明圖片的問題
12/25 21:16, 8F

12/25 21:17, , 9F
最後用偷吃步的方式 去AndroidManifest中的application
12/25 21:17, 9F

12/25 21:18, , 10F
後面加上 android:largeHeap="true" 暫時解決OOM
12/25 21:18, 10F

12/25 21:19, , 11F
<application ... android:largeHeap="true">
12/25 21:19, 11F

12/25 21:19, , 12F
我用這個方式 大概可以一次上傳50M大小的檔案
12/25 21:19, 12F

12/25 21:20, , 13F
但是largeHeap我當初找的是說 每個手機提供的heap不同
12/25 21:20, 13F

12/25 21:20, , 14F
所以這個不是最佳解= =
12/25 21:20, 14F

12/25 21:44, , 15F
!! android:largeHeap="true" 樓上你怎麼不早說呢XD
12/25 21:44, 15F

12/25 21:49, , 16F
因為我記得使用這個方法好像有風險 所以當初觀望不提 哈
12/25 21:49, 16F

12/25 23:04, , 17F
風險是..?
12/25 23:04, 17F

12/25 23:14, , 18F
google了一下會佔用記憶體 其他app可能會有問題
12/25 23:14, 18F

12/25 23:15, , 19F
真的還假的=.=
12/25 23:15, 19F

12/25 23:17, , 20F
還有只能在3.0以上使用 這可能有點不太好XD
12/25 23:17, 20F

12/25 23:30, , 21F
更正一下 上面這一點還要查證
12/25 23:30, 21F

12/27 13:23, , 22F
ai大的方法真不錯 感謝
12/27 13:23, 22F

12/27 13:24, , 23F
另外後來解決的辦法 是把圖片的尺寸解析度做更改 縮小檔
12/27 13:24, 23F

12/27 13:25, , 24F
案大小 讓每次讀入檔案時 不會oom 不過還是要適時的
12/27 13:25, 24F

12/27 13:25, , 25F
釋放記憶體 至於一次性載入多個檔案時 我目前是
12/27 13:25, 25F

12/27 13:26, , 26F
採用了開多個thread去讀檔 等到需要取用檔案時在寫入
12/27 13:26, 26F

12/28 01:12, , 27F
搜尋universal-image-loader看看
12/28 01:12, 27F
文章代碼(AID): #1IkZYU_7 (AndroidDev)