作者baobomb (baobomb)
看板AndroidDev
標題[問題] 關於載入多張圖片時out of memry
時間Wed Dec 25 09:44:59 2013
小弟不才 最近正在學習開發app
遇上了一個小問題
使用bitmap讀入sd卡中的圖檔
並且讓ImageView取得圖片並顯示後
下一步我設置了一個button
並監聽按鈕 當我按下按鈕時觸發事件
更換ImageView的圖檔
但是每當我按下button觸發了更換圖片的事件後
就會出現out of memory 的錯誤
上網google後 大部份提供的意見
都是因為圖檔過大 造成調用記憶體時記憶體不足 建議的方法都是適時使用recycle()
來做記憶體回收的動作
但是照著建議實做了一次
在ImageView自bitmap取得圖片後
就釋放了bitmap所佔用的記憶體
然後再觸發更換圖片的按鈕
卻還是有一樣的問題
請問該如何解決呢 不知道有沒有大大能夠提供一點想法
手機排版差請見諒
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.90.203
1F:推 btsken:版上搜尋image loader 12/25 10:36
2F:→ ted66:bitmap simplesize條2看看 12/25 11:51
3F:→ baobomb:simplesize 這我試過 縮小圖片尺寸到原始的四分之一了 還 12/25 14:24
4F:→ baobomb:是會報錯 12/25 14:24
5F:→ baobomb:從ddms給的訊息看來 應該是bitmap 12/25 14:25
6F:→ baobomb:每次取得圖片資料 都會調用ram ram不足導致 12/25 14:26
7F:推 aiweisen:雖然我不是載入圖片 我是上傳大檔案發生OOM 12/25 21:16
8F:→ aiweisen:我都初找到的OOM大部份都是在說明圖片的問題 12/25 21:16
9F:→ aiweisen:最後用偷吃步的方式 去AndroidManifest中的application 12/25 21:17
10F:→ aiweisen:後面加上 android:largeHeap="true" 暫時解決OOM 12/25 21:18
11F:→ aiweisen:<application ... android:largeHeap="true"> 12/25 21:19
12F:→ aiweisen:我用這個方式 大概可以一次上傳50M大小的檔案 12/25 21:19
13F:→ aiweisen:但是largeHeap我當初找的是說 每個手機提供的heap不同 12/25 21:20
14F:→ aiweisen:所以這個不是最佳解= = 12/25 21:20
15F:推 zxc190:!! android:largeHeap="true" 樓上你怎麼不早說呢XD 12/25 21:44
16F:→ aiweisen:因為我記得使用這個方法好像有風險 所以當初觀望不提 哈 12/25 21:49
17F:→ zxc190:風險是..? 12/25 23:04
18F:→ zxc190:google了一下會佔用記憶體 其他app可能會有問題 12/25 23:14
19F:→ zxc190:真的還假的=.= 12/25 23:15
20F:→ zxc190:還有只能在3.0以上使用 這可能有點不太好XD 12/25 23:17
21F:→ zxc190:更正一下 上面這一點還要查證 12/25 23:30
22F:→ baobomb:ai大的方法真不錯 感謝 12/27 13:23
23F:→ baobomb:另外後來解決的辦法 是把圖片的尺寸解析度做更改 縮小檔 12/27 13:24
24F:→ baobomb:案大小 讓每次讀入檔案時 不會oom 不過還是要適時的 12/27 13:25
25F:→ baobomb:釋放記憶體 至於一次性載入多個檔案時 我目前是 12/27 13:25
26F:→ baobomb:採用了開多個thread去讀檔 等到需要取用檔案時在寫入 12/27 13:26
27F:推 cloudfly:搜尋universal-image-loader看看 12/28 01:12