Android 如何在Kotlin中使用Handler和handleMessage?

Android 如何在Kotlin中使用Handler和handleMessage?,android,kotlin,android-handler,Android,Kotlin,Android Handler,Java代码: private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // code here } }; 如何将此java代码转换为Kotlin 我试过这个: private val mHandler = object : Handler() { fun handleMessage(msg: Messag

Java代码:

private final Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
       // code here
    }
};
如何将此java代码转换为Kotlin

我试过这个:

private val mHandler = object : Handler() {
    fun handleMessage(msg: Message) {
       // code here
    }
}

但这似乎是不正确的,并在
对象上给出了编译时错误问题:重写
处理程序
类的
handleMessage()方法的语法不正确

解决方案:在要覆盖的函数之前添加
override
关键字

private val mHandler = object : Handler() {

    override fun handleMessage(msg: Message?) {
        // Your logic code here.
    }
}
更新:正如@BeniBela的评论,当使用上述代码时,将显示一个lint警告

此处理程序类应该是静态的,否则可能会发生泄漏

由于此处理程序被声明为内部类,因此可能会阻止 外部类被垃圾收集。如果处理程序正在使用 主线程以外的线程的循环器或MessageQueue,然后 没有问题

如果处理程序正在使用主线程的循环器或MessageQueue, 您需要修复处理程序声明,如下所示:声明 作为静态类的处理程序;在外部类中,实例化 WeakReference到外部类并将此对象传递给处理程序 当您实例化处理程序时;所有提到的都是 使用WeakReference对象的外部类

类外部类{
//在外部类中,实例化对外部类的WeakReference。
private val outerClass=WeakReference(此)
//将WeakReference对象传递给外部类,并将其传递给处理程序
//当您实例化处理程序时
private val mMyHandler=MyHandler(外部类)
私有变量outerVariable:String=“OuterClass”
私人娱乐外套路(){
}
//将处理程序声明为静态类。
类MyHandler(private val outerClass:WeakReference):Handler(){
覆盖有趣的handleMessage(消息:Message?){
//你的逻辑代码在这里。
// ...
//对外部类的成员进行所有引用
//使用WeakReference对象。
outerClass.get()?.outerVariable
outerClass.get()?.outerMethod()方法
}
}
}
就我而言:

@SuppressLint("HandlerLeak")
    private inner class MessageHandler(private val mContext: Context) : Handler() {
        override fun handleMessage(msg: Message) {
            when (msg.what) {

            }
        }
    }

通过将活套传递给处理程序,您可以轻松一点(不需要WeakReference):

val handler = object:  Handler(Looper.getMainLooper()) {
        override fun handleMessage(msg: Message) {
            doStuff()
        }
    }

这给了一个把手漏毛warning@BeniBela谢谢你的信息,请检查我的最新答案。
val handler = object:  Handler(Looper.getMainLooper()) {
        override fun handleMessage(msg: Message) {
            doStuff()
        }
    }