Android动态壁纸服务没有被破坏

时间:2011-05-25 14:51:40

标签: android live-wallpaper

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

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

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

例如,如果我设置了我的壁纸,然后选择设置'Galaxy'动态壁纸,这会破坏我的壁纸服务,但是当再次设置我的壁纸时,它不会破坏原始服务。

有没有人遇到过这个?是否有一种不同的方法我应该取消和垃圾收集?任何帮助将不胜感激。

谢谢,

威廉。

3 个答案:

答案 0 :(得分:3)

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

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

希望这有帮助。

答案 1 :(得分:1)

我很确定我已经找到了其他有这个问题的人。

似乎当我已经运行了我的壁纸时,我在其预览中单击“设置壁纸”,未调用onDestroy()方法。但是,使bitmaps无效并调用stopSelf()可以放在onSurfaceDestroyed方法中,这似乎适用于每个WallpaperService Engine打开的实例。它可能不是正确的做事方式,但目前似乎工作正常。

感谢GeekYouUp对stopSelf()的帮助。

答案 2 :(得分:0)

服务一旦完成就调用stopSelf()吗?