从背景线程中的处理程序PostDelay()



任何人都可以看到任何原因无法正常工作吗?

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

我在活动中的某个任意位置将其称为" reset()方法"。在日志中,我只得到以下

D/MainActivity: start

它看起来像是在邮政邮局上的阻塞。即使我将值设置为1或用姿势替换邮政postdelay也行不通。

更新:

当我这样实施时,它可以工作;

 private lateinit var handler : Handler
 override fun onCreate(savedInstanceState: Bundle?) {
    handler = Handler()
    resetAnimations()
 }
 override fun resetAnimations() {
    handler.postDelayed( { reset()}, 1500)
 }

我认为这个问题与我从背景线程调用resetanimations()并在背景线程上创建处理程序有关的事实。

我是从背景线程调用resetAnimations()的。

这就是问题所在。您的处理程序无法将Message发布到MessageQueue上,因为您的背景线程没有任何MessageQueue

所以,而不是这样:

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

执行此操作:

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

相关内容

  • 没有找到相关文章

最新更新