处理程序 post 在 Kotlin Android 中不工作

Handler post is not working in Kotlin Android

谁能告诉我哪里出了问题?

我尝试使用 Handler post 和 Runnable 但它没有执行

var mHandler: Handler? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    mHandler = Handler()
    var runnable = Runnable {
        Log.d("TEST", "++++ runable")
        Log.d("TEST", "++++ come end")
    }
    Log.d("TEST", "++++ runnable" + runnable)
    Log.d("TEST", "++++ handle" + mHandler)
    mHandler!!.post { runnable }
}

这是输出

09-21 00:56:04.067 4419-4419/? D/TEST: ++++ runnablecom.vpioneer.activity.MainActivity$onCreate$runnable@529b8fb4 09-21 00:56:04.067 4419-4419/? D/TEST: ++++ handleHandler (android.os.Handler) {529b8cb4}

您没有开始 runnbale。试试这个:

mHandler!!.post { runnable.run() }

这也是有效的:

mHandler!!.post { 
    Log.d("TEST", "++++ runable")
    Log.d("TEST", "++++ come end")
}

首先,不要使用 !! 运算符,这是一个非常糟糕的做法(来自 doc)。使用 ? 您将达到相同的行为,但在执行之前检查实例是否变为空。

这样说,使用:

mHandler?.post { runnable }

您实际上是在创建一个包含可运行行的新 lambda。以更易读的方式查看下面的内容:

mHandler?.post { 
   runnable 
}

这相当于 Java:

mHandler.post(new Runnable(){
    public void run(){
        runnable;
    }
});

要解决这个问题:

选项 1: 去掉 runnable 声明

mHandler?.post { /*the content of your runnable*/ }

选项 2: 使用您的可运行实例

mHandler?.post(runnable) // normal parentheses

选项3:疯狂的方式

mHandler?.post { runnable.run() }

试试这个代码,希望它能正常工作

   Handler().postDelayed({
            // You code and delay time
   }, 1000L)