我听说内部类比 Kotlin 中的嵌套类使用更多内存。
有人说在 RecyclerView(ViewHolder)
中使用内部类是不好的。但是,如果没有内部类,很难使用 onClickListener 。
我无法完全理解为什么RecyclerView中的内部类会发生memory leak
。并且必须使用嵌套类而不是内部类吗? 那么...内部类存在的原因是什么? 有人可以告诉我答案吗
我问了Chatgpt,但它只说内存泄漏...... 我想了解详细的动作!
内部类和嵌套类的区别
内存泄漏。
当你在RecyclerView的同样,您不必总是使用嵌套类,但是当您想要一个紧密连接的类而无需访问其非静态部分或为了防止内存问题时,它们会很方便。内部类的存在是因为它们有助于在类中组织相关函数,可以轻松访问非静态部分,并在某些情况下提供更大的灵活性。所以,这不是必须的,但它们带来了一些很酷的好处!
ViewHolder
中使用内部类作为监听器时, 如果ViewHolder
保留对其的引用,则会出现问题 内部类监听器。这样可以延长ViewHolder
的使用寿命 超出其预期范围,即使 RecyclerView 将其从 视图层次结构。然后ViewHolder
及其内部类监听器 让彼此在内存中存活,导致内存泄漏。
所以,根据你的情况,我可以建议你使用Lambda(我个人的意见)。请参阅下面的示例代码片段 -
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView = view.findViewById(R.id.text_view)
init {
textView.setOnClickListener { position ->
// Your click handler logic here with access to position
}
}
}
Lamda 与匿名类类似,lambda 提供了一种简洁的方法来定义侦听器,而无需单独的类。这样可以提高代码可读性并避免内存泄漏。
希望有帮助!