在Android的静态相当于kotlin,以避免处理程序内存泄漏

当我在使用java之前在Android中使用处理程序时,我会得到一个Android Studio lint消息,说我应该使用静态处理程序,否则会发生内存泄漏。 由于Kotlin没有静态关键字,我应该如何处理? 这是我的class级:

class TaskDetailActivity : AppCompatActivity() { private val handlerComment = MyOptionMenuBarHandler(this) private fun setUpToolBar() { handlerComment.sendEmptyMessage(0) } private class MyOptionMenuBarHandler(activity: TaskDetailActivity) : Handler() { private val activity: WeakReference = WeakReference(activity) override fun handleMessage(msg: Message) { //do the work ..... } } } 

有什么特别的我需要做,以避免使用Kotlin的内存泄漏?

Lint告诉你把你的内部Handler类标记为static以防止编译器将Handler类的引用添加到Handler实现中(它默认添加到所有内部的非静态类中),因为这可能会造成内存泄漏。

现在,Kotlin拥有innernested类的概念。 nested类是你默认获得的,如果你在另一个类中声明了一些Foo类。 嵌套类没有隐式引用来封闭类(在这方面,它们类似于Java的内部静态类)。 你的MyOptionMenuBarHandler类就是这样。

如果你想添加引用来封闭类到你的内部类,你可以把它标记为inner

总之

  1. Kotlin和Java在内部类中有不同的默认值。 在Kotlin中,内部类在默认情况下没有引用封装类,在java中它是这样做的。
  2. 如果要在Kotlin中隐式引用外部类,请将内部类标记为内部类。
  3. 如果你不想在Java中有这样的引用, static内部类标记为static