来自后台线程的处理程序 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)
谁能看出这不起作用的任何原因?
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)