为不同的活动背景显示更多大小超过800 * 1024的图像

时间:2013-01-23 10:30:10

标签: android out-of-memory android-image bitmapimage

我在应用程序中有20到25个活动,每个活动扩展了一个共同的基础活动。每个活动都有一个背景图像,其中包含大小有些像800 * 1024的大小。此背景图像已在基本活动中设置。

为了显示这些图像,我根据设备宽度和高度计算了缩放比例。我将此比例设置为inSampleSize的{​​{1}},然后重新创建了位图。

我在每个活动和基本活动的BitmapFactory.Options方法中回收了位图。

即使我正在重新调整图像大小并回收位图,但在运行一段时间后我得到onDestroy

有人可以指导我如何避免这种情况OutOfMemoryError吗?

3 个答案:

答案 0 :(得分:0)

此处,在lifecycle个活动中,您可以看到在Resume被调用后,用户可以看到该活动。因此,您可以编写代码以在onResume()方法中创建和设置位图。当您的活动进入background时,onStop()也会被调用。所以建议在这个阶段释放你的记忆。

在您的方法中,当活动为destroyed时,您就可以释放内存。但是,在活动隐藏后,用户可以看到活动allocate内存和free,而不是这样做。

修改

您也可以在onPause()中发布位图,但是当您执行此操作时,您会看到第一个背景将黑色然后活动将被更改。

Activity Lifecycle

答案 1 :(得分:0)

在设置“BitmapFactory.options”时检查代码。通常需要一些时间来创建UI。因此,如果在创建UI之前设置BitmapFactory.options,则getWidth()/ getHeight()方法将获得0。设置0到样本大小什么都不做。你必须在创建UI后设置BitmapFactory.options。

答案 2 :(得分:0)

您应该使用AQuery(Android查询)来实现此目的。这个Api易于使用,它可以自动处理内存错误。它为您提供了许多选项。

您可以从这里下载:

AndroidQuery.jar

您可以从这里获得说明:

Android Query Complete Detail

对于图像特定选项,您可以访问:

Android Query Image Doc