2013-10-09 56 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
  • ,然后最终显示它