我创建了一个动态壁纸,它将用户选择的文件作为背景图像。
我遇到的问题是,当我单击“设置壁纸”时,它会启动我的壁纸服务,然后如果我回到我的动态壁纸并再次单击“设置壁纸”,它似乎并没有关闭以前的服务,但是也只是运行另一个。这意味着每次单击“设置墙纸”时,用户 SD 卡中的图像都会被读入位图变量并增加每次使用的内存,最终会引发 OutOfMemoryError。
我的 onDestroy() 方法使所有位图引用无效并执行 System.gc(),但是在这种情况下,在其上设置相同的墙纸时似乎服务没有被破坏。
例如,如果我设置了我的壁纸,然后选择设置“银河”动态壁纸,这会破坏我的壁纸服务,但再次设置我的壁纸时,它不会破坏原来的服务。
有没有人遇到过这个?有没有我应该取消和垃圾收集的不同方法?任何帮助将非常感激。