Handler的post在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 } }
这是输出
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}
首先,不要使用!!
操作员,这是一个非常糟糕的做法(从文档 )。 用?
你将达到相同的行为,但在执行之前检查实例是否为空。
说这个,使用:
mHandler?.post { runnable }
实际上你正在创建一个新的包含可运行行的lambdaexpression式。 在下面以更可读的方式看到这里:
mHandler?.post { runnable }
这在Java中是相当的:
mHandler.post(new Runnable(){ public void run(){ runnable; } });
要解决这个问题:
方案1:摆脱可运行的声明
mHandler?.post { /*the content of your runnable*/ }
选项2:使用您的可运行实例
mHandler?.post(runnable) // normal parentheses
选项3:疯狂的方式
mHandler?.post { runnable.run() }
你没有启动runnbale
。 尝试这个:
mHandler!!.post { runnable.run() }
这也是有效的:
mHandler!!.post { Log.d("TEST", "++++ runable") Log.d("TEST", "++++ come end") }