壁纸管理器内存泄漏

问题描述

我在 Android 上使用 leakcanary 检测内存泄漏。第一次使用 WallpaperManager。我不知道您是否recycle 或在销毁时清理 WallpaperManager

val wallpaperManager = WallpaperManager.getInstance(this)
wallpaperManager.setStream(file.inputStream())

我认为这两行代码导致了这个问题,因为如果我注释这两行,就不会发生内存泄漏。

private fun setWallpaper() {
    val dir = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)!!.absoluteFile
    val file = File("$dir${File.separator}wallpaper.jpg")
    val wallpaperManager = WallpaperManager.getInstance(this)
    wallpaperManager.setStream(file.inputStream())

    toast(getString(R.string.wallpaper_set_successfully))
}

leakcanary result

解决方法

尝试拨打 WallpaperManager.getInstance(this.getApplicationContext());

这绝对看起来像是 AOSP 中的一个错误,您应该提交一个工单,但同时使用应用上下文应该可以避免泄漏。