我在应用程序中有20到25个活动,每个活动扩展了一个共同的基础活动。每个活动都有一个背景图像,其中包含大小有些像800 * 1024的大小。此背景图像已在基本活动中设置。
为了显示这些图像,我根据设备宽度和高度计算了缩放比例。我将此比例设置为inSampleSize
的{{1}},然后重新创建了位图。
我在每个活动和基本活动的BitmapFactory.Options
方法中回收了位图。
即使我正在重新调整图像大小并回收位图,但在运行一段时间后我得到onDestroy
。
有人可以指导我如何避免这种情况OutOfMemoryError
吗?
答案 0 :(得分:0)
此处,在lifecycle
个活动中,您可以看到在Resume
被调用后,用户可以看到该活动。因此,您可以编写代码以在onResume()
方法中创建和设置位图。当您的活动进入background
时,onStop()
也会被调用。所以建议在这个阶段释放你的记忆。
在您的方法中,当活动为destroyed
时,您就可以释放内存。但是,在活动隐藏后,用户可以看到活动allocate
内存和free
,而不是这样做。
修改
您也可以在onPause()
中发布位图,但是当您执行此操作时,您会看到第一个背景将黑色然后活动将被更改。
答案 1 :(得分:0)
在设置“BitmapFactory.options”时检查代码。通常需要一些时间来创建UI。因此,如果在创建UI之前设置BitmapFactory.options,则getWidth()/ getHeight()方法将获得0。设置0到样本大小什么都不做。你必须在创建UI后设置BitmapFactory.options。
答案 2 :(得分:0)
您应该使用AQuery(Android查询)来实现此目的。这个Api易于使用,它可以自动处理内存错误。它为您提供了许多选项。
您可以从这里下载:
您可以从这里获得说明:
对于图像特定选项,您可以访问: