【问题标题】:Live Wallpaper - "Set Wallpaper" - Need event to use to clear memory动态壁纸 - “设置壁纸” - 需要使用事件来清除内存
【发布时间】:2011-12-03 17:17:44
【问题描述】:

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

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

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

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

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

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

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

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

任何建议将不胜感激。

【问题讨论】:

    标签: android memory live wallpaper


    【解决方案1】:

    如果您想要进行任何加载或卸载,您可以通过覆盖 onVisibilityChanged(boolean visible) 来检测 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
    查看活动生命周期

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多