任何人都可以看到为什么这不起作用的原因吗?
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
看起来它在postDelay上的阻塞..即使我将值设置为1或用姿势替换postDelay,也不起作用。
更新
当我这样实施时,它有效;
private lateinit var handler : Handler
override fun onCreate(savedInstanceState: Bundle?) {
handler = Handler()
resetAnimations()
}
override fun resetAnimations() {
handler.postDelayed( { reset()}, 1500)
}
我认为这个问题与我从后台线程调用resetAnimations()并在后台线程上创建处理程序这一事实有关。
答案 0 :(得分:3)
我是从后台主题调用
resetAnimations()
。
这就是问题所在。您的处理程序无法将Message
发布到MessageQueue
,因为您的后台线程中没有MessageQueue
。
所以,而不是:
Handler().postDelayed( { reset()}, 1500)
执行此操作:
Handler(Looper.getMainThread()).postDelayed( { reset()}, 1500)