【问题标题】:Android live wallpaper service not getting destroyedAndroid动态壁纸服务没有被破坏
【发布时间】:2011-05-25 14:51:39
【问题描述】:

我创建了一个动态壁纸,它将用户选择的文件作为背景图像。

我遇到的问题是,当我点击“设置壁纸”时,它会启动我的壁纸服务,然后如果我回到我的动态壁纸并再次点击“设置壁纸”,它似乎并没有关闭上一个服务,但也只是运行另一个。这意味着每次单击“设置壁纸”时,用户 SD 卡中的图像都会被读入位图变量并增加每次使用的内存,最终会引发 OutOfMemoryError。

我的 onDestroy() 方法使所有 Bitmap 引用无效并执行 System.gc(),但是在这种情况下,在其上设置相同的壁纸时似乎服务没有被破坏。

例如,如果我设置了壁纸,然后选择设置“银河”动态壁纸,这会破坏我的壁纸服务,但再次设置我的壁纸时,它不会破坏原来的服务。

以前有人遇到过这种情况吗?有没有我应该取消和垃圾收集的不同方法?任何帮助将不胜感激。

【问题讨论】:

    标签: android live-wallpaper


    【解决方案1】:

    再次设置壁纸之前。销毁以前的墙纸。 这对我有用。并在您调用 WallpaperService 的 Activity 中销毁壁纸。在 WallpaperService 内部销毁会导致设备的默认壁纸。

    WallpaperManager wallpaperManager = WallpaperManager.getInstance(getApplicationContext());
        try {
            wallpaperManager.clear();
        } catch (IOException e) {
            e.printStackTrace();
        }
    

    希望这会有所帮助。

    【讨论】:

    • 当您从预览屏幕返回而不设置任何壁纸时,这也会清除您的壁纸
    【解决方案2】:

    我很确定我已经为遇到此问题的其他人解决了这个问题。

    似乎当我已经在运行我的壁纸时,然后我在其预览中单击“设置壁纸”,onDestroy() 方法没有被调用。但是,可以将取消位图和调用 stopSelf() 放在 onSurfaceDestroyed 方法中,这似乎适用于每个打开的 WallpaperService Engine 实例。这可能不是正确的做事方式,但目前似乎可以正常工作。

    感谢 GeekYouUp 对 stopSelf() 的帮助。

    【讨论】:

    • 你可以完全写一个方法吗?
    • stopSelf();对我不起作用,我还删除了 onSurfaceDestroyed() 中的处理程序,但没有任何效果
    【解决方案3】:

    服务完成后是否调用 stopSelf()?

    【讨论】:

    • 不,不是,应该在 onDestroy() 方法中吗?
    • 我尝试在 onDestroy() 方法中调用 stopSelf() 但没有任何改变。为了测试它,我将手机设置为在 onDestroy() 方法内振动,当我退出可以更改设置等的壁纸预览部分时,该方法有效。但在将壁纸设置为相同时,它似乎没有这样做墙纸。除非我设置新壁纸,否则它不会调用 onDestroy。
    • 不,应该在服务完成您启动它的目的后调用它。阅读此developer.android.com/reference/android/app/…
    • 很抱歉,如果它很明显,但我有点困惑。壁纸将继续运行,直到用户选择另一个壁纸,所以调用 onDestroy 方法时,它不是结束了吗?再次道歉,如果这很简单,但我对 Android 开发场景比较陌生,这是我自己无法解决的唯一问题。
    • 我在我创建的动态壁纸上运行了一些测试,并且 WallpaperService onCreate() 只被调用一次,无论我重新应用多少次,然后 onDestory() 也只会被调用有一次,当我应用不同的壁纸时。所以我现在更好地理解了你的问题,但我不确定是什么原因造成的。这是代码 j.mp/lNzGK1 ,我在 onCreate 和 onDestory 中添加了 Lod.d() 行以进行调试。有什么帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多