1

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

为了显示这些图像,我根据设备宽度和高度计算了缩放比例。我将此比例设置为inSampleSizeof BitmapFactory.Options,然后我重新创建了位图。

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

尽管我正在重新调整图像大小并回收位图,但我OutOfMemoryError在运行一段时间后得到了改善。

谁能指导我如何避免这种情况OutOfMemoryError

4

3 回答 3

0

为此,您应该使用 AQuery(Android Query)。此 Api 易于使用,它会自动处理内存错误。它为您的应用程序提供了很多选项。

你可以从这里下载:

AndroidQuery.jar

你可以从这里得到描述:

Android 查询完整详情

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

Android 查询图片文档

于 2013-01-23T10:58:52.770 回答
0

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

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

编辑:

您也可以在 中释放位图onPause(),但是当您这样做时,您会看到第一个背景将变为黑色,然后活动将被更改。

活动生命周期

于 2013-01-23T10:42:37.953 回答
0

设置 "BitmapFactory.options" 时检查您的代码。通常创建 UI 需要一些时间。因此,如果您在创建 UI 之前设置 BitmapFactory.options,您将从 getWidth()/getHeight() 方法获得 0。将 0 设置为样本大小没有任何作用。您必须在创建 UI 后设置 BitmapFactory.options。

于 2013-01-23T10:44:01.937 回答