2013-10-09 80 views
1

這是初學者最常問的問題之一,但我仍然無法獲得任何幫助。在一個活動中,我有一個viewflipper,我通過編程方式將圖像分配給圖像(使用for循環將大約100張圖像添加到viewflipper中)。可能是由於圖像大小或由於大量的圖像,我得到的位圖OutOfMemory錯誤。我的問題是:Android中的圖像內存管理

  1. 如果這是因爲我的drawable需要內存空間,有什麼辦法可以釋放它們佔用的空間嗎?
  2. 可以垃圾回收的原因呢?如果是這樣的解決方案是什麼?
  3. 既然我正在使用viewflipper,有沒有什麼辦法可以加載我的當前,前一個和下一個viewflipper視圖?這有助於佔用更少的內存嗎?

如果我的問題很混亂或不可理解,請讓我知道。這對我來說是一個重要的話題,因爲我在幾乎所有的應用程序中都面臨着這個問題。

+0

從分配圖像中添加一點點代碼s programatically部分 –

回答

1

位圖由本機內存處理。這意味着當GC收集位圖的引用時,位圖的內存不會立即被刪除。要立即清除位圖的內存,您可以撥打bitmap.recycle()。 對於ViewFlipper,您將希望找到一種手動卸載並重新加載圖像的方式,因爲它們顯示給用戶。請記住使用recycle(),並且不要嘗試顯示已經被回收的位圖。

希望這有助於:)

4

避免,AQUIRE一大堆清單中使用這樣的:

android:largeHeap="true" 

,幾乎所有的問題的解決方案是存在於與記憶了錯誤的這些鏈接,希望他們中的一個可能解決您的問題:

meomry-out-of-error

Memory Leak and Out of memory Error using List,LinkedList and HashMap

Memory Leak and Out of memory Error using LRU Cache

Memory Leak and Out of memory Error using Disk LRU Cache

+0

您是否想要創建這些鏈接?你沒有... –

+0

看到我更新的答案@bhaijaan – Hamad

+0

@hamad這是我現在工作。但正如你的博客中提到的,這對3.0以上的目標有效。我的目標受衆超過2.3。此外,我有imageview對象,而不是位圖。你能提出更多的建議嗎? – Bhaijaan

0

現在是什麼在這裏發生過的是Android每一個應用程序被alotted堆大小的特定量是少20MB

位圖佔用了大量的內存,特別是對於像照片這樣的豐富圖像

因此,無論何時您加載沉重圖像或重磅圖像數組,它都會超出堆大小,android會自動關閉應用程序,因爲它使用的不止是a llotted堆大小

Documentaion

所以每當你與沉重的圖像時

  • 負載縮小版
  • 異步處理的圖像中的ImageView
  • ,然後最終顯示它