在 android 中使用静态上下文项时发生内存泄漏

Memory leaks when using static context items in android

所以我有一个带有静态 UI 元素的 class,如下所示:

class MyClass {
    companion object {
        lateinit var item:ChannelItem
    }
}
// Item from groupie
class ChannelItem(var channel:Channel): Item<ViewHolder>() {
    // bind
    // getLayout
}

这似乎会导致内存泄漏,有没有快速修复的方法而不需要过多更改代码?

我正在考虑将项目替换为

var map = mutableMapOf<String, ChannelItem?>()

这会修复内存泄漏吗?如果是,为什么?

非常感谢

静态 UI 元素在 Android 中没有意义 首先,UI 对象绑定到特定的 Activity。它们不能在其他活动中使用,也不能在 Activity 之外显示。所以让它们静态化并没有带来价值

其次,这始终是内存泄漏。每个视图都有对其 Activity 的引用。将 Activity 放在静态变量中意味着它不能被垃圾回收,因为存在对它的有效引用。这基本上会导致 Activity 中的每个变量泄漏。包括 UI 元素,它们往往会占用大量内存(每个图像每个像素占用 4 个字节)。

您需要重新考虑要使用此代码做什么。其实我也说不清。如果您将它们设为静态以便您可以从其他活动中更改它们 - 不要那样做。使它们基于模型对象,并改为更改模型中的数据。让 UI 根据模型重新初始化自身。