0

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

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?>()

这会解决内存泄漏吗?如果是这样,为什么?

非常感谢

4

1 回答 1

2

静态 UI 元素在 Android 中毫无意义 首先,UI 对象绑定到特定的 Activity。它们不能在其他活动中使用,也不能在其活动之外显示。因此,使它们成为静态不会带来价值

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

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

于 2021-11-21T21:56:10.137 回答