动态壁纸 - “设置壁纸” - 需要用于清除记忆的事件

时间:2011-12-03 17:17:44

标签: android memory live wallpaper

我创建了一个动态壁纸,通过在数组中存储70个左右的图像来显示动画,然后一次显示一个动画以创建动画。我使用CubeEngine的结构来设计它。在大多数情况下它都有效。

当我第一次选择壁纸时,它会加载数组并显示动画。然后,当我点击"设置壁纸"按钮我得到一个" OutOfMemoryError:位图大小超过VM Budget"。我添加了bitmap.recycle()调用以尝试解决此问题。

我已将Log.d放入所有事件中,以尝试了解事件流。它看起来像是什么时候设置壁纸"按钮被点击,流程直接进入构造函数。

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

所以我的原始图像数组在内存中,当它执行构造函数时,它会尝试加载带有图像的另一个数组并且内存不足。

当他们点击" Set Wallpaper"时,我找不到一个事件来放置逻辑以清除我的原始数组。按钮。

有没有办法为" Set Wallpaper"添加逻辑?按钮或是否有另一个事件,我可以添加到我的代码,我应该能够做到这一点?

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

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分: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
参见活动生命周期