son*_*610 7 android handler runnable kotlin
有人能告诉我什么是错的,我试着用一个Handler
帖子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 }
}
Run Code Online (Sandbox Code Playgroud)
这是输出
09-21 00:56:04.067 4419-4419 /?D/TEST:++++ runnablecom.vpioneer.activity.MainActivity$onCreate$runnable$1@529b8fb4 09-21 00:56:04.067 4419-4419 /?D/TEST:++++ handleHandler(android.os.Handler){529b8cb4}
crg*_*dos 15
首先,不要使用!!
运算符,这是一个非常糟糕的做法(来自doc).随着?
你会到达相同的行为,但如果检查实例执行前变成了空.
这样说,使用:
mHandler?.post { runnable }
Run Code Online (Sandbox Code Playgroud)
您实际上正在创建一个包含可运行行的新lambda.请以更易读的方式在下面看到:
mHandler?.post {
runnable
}
Run Code Online (Sandbox Code Playgroud)
这在Java中是等价的:
mHandler.post(new Runnable(){
public void run(){
runnable;
}
});
Run Code Online (Sandbox Code Playgroud)
要解决这个问题:
选项1:摆脱可运行的声明
mHandler?.post { /*the content of your runnable*/ }
Run Code Online (Sandbox Code Playgroud)
选项2:使用runnable实例
mHandler?.post(runnable) // normal parentheses
Run Code Online (Sandbox Code Playgroud)
选项3:疯狂的方式
mHandler?.post { runnable.run() }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9065 次 |
最近记录: |