在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拥有inner
和nested
类的概念。 nested
类是你默认获得的,如果你在另一个类中声明了一些Foo
类。 嵌套类没有隐式引用来封闭类(在这方面,它们类似于Java的内部静态类)。 你的MyOptionMenuBarHandler
类就是这样。
如果你想添加引用来封闭类到你的内部类,你可以把它标记为inner
。
总之 :
- Kotlin和Java在内部类中有不同的默认值。 在Kotlin中,内部类在默认情况下没有引用封装类,在java中它是这样做的。
- 如果要在Kotlin中隐式引用外部类,请将内部类标记为内部类。
- 如果你不想在Java中有这样的引用,
static
内部类标记为static
。