来自后台线程的处理程序 postDelayed()

Handler postDelay() from background thread

谁能看出这不起作用的任何原因?

 override fun resetAnimations() {
    Log.d("MainActivity", "start")
    Handler().postDelayed( { reset()}, 1500)
    Log.d("MainActivity", "end")
 }

 fun reset(){
     Log.d("MainActivity", "reset")
  }

我在我的 activity 中的任意位置调用它,但从未调用过 reset() 方法。在日志中我只得到以下

D/MainActivity: start

它看起来像是在 postDelay 上阻塞.. 即使我将值设置为 1 或将 postDelay 替换为姿势,也不起作用。

更新:

当我这样实现时,它起作用了;

 private lateinit var handler : Handler

 override fun onCreate(savedInstanceState: Bundle?) {
    handler = Handler()
    resetAnimations()
 }

 override fun resetAnimations() {
    handler.postDelayed( { reset()}, 1500)
 }

我认为问题与我从后台线程调用 resetAnimations() 并在后台线程上创建处理程序有关。

I was calling resetAnimations() from a background thread.

这就是问题所在。您的处理程序无法 post 一个 Message 到一个 MessageQueue,因为您的后台线程上没有任何 MessageQueue

所以,而不是这个:

Handler().postDelayed( { reset()}, 1500)

执行此操作:

Handler(Looper.getMainThread()).postDelayed( { reset()}, 1500)