我正在尝试创建一个
Handler
它将在自己的线程上处理消息
我目前正在做的是在
onCreate
活动的一部分此代码:
lateinit var _handler: Handler
lateinit var hThread: HandlerThread
fun setUpHandler() {
hThread = HandlerThread("HandlerThread")
hThread.start()
_handler = Handler(hThread.looper, this::callback)
}
问题是,即使我使用不同线程的循环器,回调也会在UI线程上运行。
我通过运行创建此方法来测试它:
fun callback(msg: Message): Boolean {
Log.d("Handler", "got message ${msg.what} in thread main? ${Looper.myLooper() == Looper.getMainLooper()}")
return true
}
当我这样称呼它时:
_handler.dispatchMessage(Message.obtain(_handler, 1))
我得到:
Handler: got message 1 in thread main? true
但是当我这样运行它时:
Handler(hThread.looper).post {
val msg = Message.obtain()
msg.what = 2
callback(msg)
}
我收到这个消息:
Handler: got message 2 in thread main? false
我目前使用第二种方法,但出于好奇,有没有办法使第一种方法起作用?
作为一个附带问题,正在运行
hThread.quit()
在活动的
onDestroy
方法足以终止我启动的额外线程,还是必须执行其他操作?