2011-12-03 60 views
5

我创建了一个动态壁纸,通过在数组中存储70个左右图像来显示动画,然后在创建动画时显示一个动画。我用CubeEngine的结构来设计它。它的大部分工作。动态壁纸 - “设置壁纸” - 需要用来清除内存的事件

当我第一次选择墙纸时,它会加载数组并显示动画。然后,当我点击“设置壁纸”按钮时,我得到一个“OutOfMemoryError:位图大小超过虚拟机预算”。我已经添加了bitmap.recycle()调用来尝试解决此问题。

我已经把Log.d放在所有的事件中去试图理解事件的流程。看起来像是当点击“Set Wallpaper”按钮时,流程直接进入构造器。

不会触发onDestroy事件或onSurfaceChanged事件,也不会触发除onTouchEvent之外的任何其他事件。

因此,我的原始图像数组存储在内存中,当它执行构造函数时,它会尝试将另一个数组与图像一起加载并耗尽内存。

我找不到一个事件来将逻辑放入以清除我的原始数组,当他们单击“设置壁纸”按钮时。

有没有办法给“设置壁纸”按钮添加逻辑,或者是否有另一个事件我可以添加到我的代码,我应该能够做到这一点?

我见过别人有这个问题,但还没有看到解决方案。

任何建议,将不胜感激。

回答

0

如果您想要执行任何加载或卸载,您可以通过覆盖onVisibilityChanged(布尔可见)来检测WallpaperService.Engine的可见性何时更改。
当可见性发生变化时,您还应该继续或暂停您的GlSurfaceView。

您可以在这里找到更多的信息:
http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html#onVisibilityChanged(boolean)
http://developer.android.com/reference/android/opengl/GLSurfaceView.html
请参见活动生命周期