避免在android中出现OutOfMemoryError

时间:2012-11-16 09:05:25

标签: android

将图像加载到xml中的ImageView会占用更多内存吗?

我有大约7张图片浏览的活动(就像任何Android手机中的应用托盘一样。)

我正在为xml中的每个图像视图加载图像。这会导致OutOfMemoryError吗?

有没有办法回收这些?

3 个答案:

答案 0 :(得分:1)

是的,可以将drawable张图片附加到ImageView,您可以在需要时将其删除。

imageview.setBackgroundResource(R.drawable.image);
                or    
imageview.setImageDrawable(drawable);

它不会导致任何内存不足问题。 Link to Doc

答案 1 :(得分:0)

我在加载图片时遇到了这个问题。有时此错误只能在Android模拟器中看到,有时这也会导致移动设备中的应用程序崩溃。

我通过以下两个步骤解决了这个问题:

  1. 如果分辨率太高,请重新调整图像大小。

  2. 没有太多图像对象同时打开。

    您也可以通过在不再需要时将图像对象指定为NULL来帮助垃圾收集器。

  3. 除非必要,否则我会阻止同时打开太多图像。

    您必须重新调整大小的因素取决于图像的实际大小。

答案 2 :(得分:0)

解决Android中内存问题的一些提示:

1)。永远不要使用局部变量来专门在循环中存储大数据/位图,因为它会创建不必要的对象。在这种情况下,我更喜欢类/实例变量。除非有必要,否则尽量不要保留数据。

2)。避免在任何地方调用View.findViewById(..)。 Romain Guy在Google I/O 2010中明确指出这种方法成本很高(需要运行一些KB的内存),因此请像使用ViewHolder一样智能地调用此方法,因为它会占用更少的内存。

3)有效地使用字符串池,并在使用字符串进行大量操作时使用StringBuilder / StringBuffer。确保您知道何时必须使用StringBuffer,因为它是同步的,并且与StringBuilder相比再次成本高昂。