处理程序 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)
谁能告诉我哪里出了问题?
我尝试使用 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)