Android 在退出线程之前,安全地将最后一个任务发布到处理程序
我有一个后台处理程序和相关的HandlerThreadAndroid 在退出线程之前,安全地将最后一个任务发布到处理程序,android,multithreading,Android,Multithreading,我有一个后台处理程序和相关的HandlerThread val handlerThread = HandlerThread("my background thread").apply { start() } val handler= Handler(handlerThread) 当退出此类的生命周期时,我想清理后台线程中的一些内容。所以我发布了一个runnable来清理它,然后调用handlerThread.quitsafety(): 但我得到了LogCat警告“向死线程上的处理程序发送消息”
val handlerThread = HandlerThread("my background thread").apply { start() }
val handler= Handler(handlerThread)
当退出此类的生命周期时,我想清理后台线程中的一些内容。所以我发布了一个runnable来清理它,然后调用handlerThread.quitsafety()
:
但我得到了LogCat警告“向死线程上的处理程序发送消息”,并且从未调用someObject.release()
quitsafety()
应该仅在处理完所有消息后停止线程,而不是延迟消息。查看源代码,我看到handler.post
以0的延迟发布runnable,所以我猜这意味着它还没有在队列中,并且quitsafety()
不会等待它发布吗
在发布之前,在后台线程中再运行一个clean-up runnable的正确方法是什么?它是否可以像包装
handlerThread.QuitSafety()
到runnable中一样简单,并在后台清理runnable结束时将其发布到主处理程序?这就是我最后要做的,它似乎工作得很好
fun onDestroy() {
handler.post {
someObject.release()
handlerThread.quitSafely()
}
}
所以你应该调用HandlerThread.quitSafety()。。。从
手柄线程
?我必须承认,我希望有一个更好的解释这个问题。。。☹
fun onDestroy() {
handler.post {
someObject.release()
handlerThread.quitSafely()
}
}