Android中用于kotlin的静态等价物,以避免处理程序内存泄漏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中用于kotlin的静态等价物,以避免处理程序内存泄漏相关的知识,希望对你有一定的参考价值。

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

class TaskDetailActivity : AppCompatActivity() {

   private val handlerComment = MyOptionMenuBarHandler(this)

   private fun setUpToolBar() { 
        handlerComment.sendEmptyMessage(0)
   }

   private class MyOptionMenuBarHandler(activity: TaskDetailActivity) : Handler() {

       private val activity: WeakReference<TaskDetailActivity> = WeakReference<TaskDetailActivity>(activity)

       override fun handleMessage(msg: Message) {
        //do the work
        .....
       }

   }
}

为了避免使用Kotlin泄漏内存,我需要做些什么特别的事情吗?

答案

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

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

如果要将封闭类的引用添加到内部类,可以将其标记为inner

简而言之:

  1. Kotlin和Java在内部类方面有不同的默认值。在Kotlin中,内部类默认没有引用封闭类,在java中它没有。
  2. 如果要在Kotlin中隐式引用外部类,请将内部类标记为inner
  3. 如果您不想在Java中使用此类引用,请将内部类标记为static

以上是关于Android中用于kotlin的静态等价物,以避免处理程序内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

解决克隆 Kotlin 应用程序在 Android Studio 中缺少运行配置的问题

初识—Kotlin

初识—Kotlin

初识—Kotlin

Android kotlin静态属性静态方法

软输入键盘将我的静态底部视图向上移动 Android Kotlin