大多数内存有效的方法来缩放动态壁纸的位图?

时间:2010-12-09 19:35:21

标签: android memory-management canvas bitmap scale

我不相信这是一个仅限于动态壁纸的问题,但它是我尝试使用的用例。

我有一个256 x 256位图,作为我的动态壁纸的“平铺”。我正在寻找一种内存有效的方法来扩展它以适应整个设备屏幕。每当设备来回旋转时,我都会继续遇到“超出VM内存”的问题,这表明我没有正确处理问题。

使用Canvas'drawBitmap()方法绘制图像。我尝试了以下选项:

  1. 创建位图,然后调用createScaledBitmap()
  2. 创建位图,然后在我的画布上调用scale()
  3. 创建位图,然后创建一个矩阵以“拉伸”宽度和高度,并将其应用于preScale()
  4. 如果我致电recycle(),动态壁纸会运行一帧,那么就会崩溃。如果我根本不旋转设备,我没有内存崩溃。

    感谢您的任何建议!

1 个答案:

答案 0 :(得分:2)

当您旋转时,您是否阻止应用程序像大多数Android应用程序一样“重新启动”?如果“重新启动”(不确定手头的术语),它将触发您再次创建图像。很可能是前一个图像尚未收集,因此内存不足。您应该做的是确保应用程序在您旋转时不会“重置”(我会记住正确的措辞),这是我认为的应用程序属性。然后捕获旋转事件并处理在那里更改绘图方向而不分配任何新对象。

希望这是有道理的。

相关问题