作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 worker 类,其中创建了一个处理程序。当我尝试使用在后台线程中创建的处理程序更新我的UI时,它会更新UI,并且这里没有崩溃。理想情况下,它应在后台线程中运行时崩溃。请在下面找到代码:
class WorkerThread(val mainThreadHandler: Handler, handlerThreadName: String) :
HandlerThread(handlerThreadName) {
lateinit var workerThreadHandler: Handler
override fun onLooperPrepared() {
super.onLooperPrepared()
Log.d("LLoyd", "onLooperPrepared")
}
override fun run() {
super.run()
Log.d("LLoyd", "run method called")
}
fun startTask(){
workerThreadHandler = object : Handler(this.looper) {
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
Log.d(
"Lloyd",
"Message from Main Thread received " + msg.what + " Thread name " +
currentThread().name
)
val message = Message()
message.what = msg.what
mainThreadHandler.sendMessage(message)
}
}
}
}
val workerThread = WorkerThread(mainThreadHandler, "Lloyd")
workerThread.start()
btn_task1.setOnClickListener {
workerThread.startTask()
val message = Message()
message.what = FROM_MAINTHREAD
workerThread.workerThreadHandler.sendMessage(message)
val message1 = Message()
message.what = 55
Log.d("Lloyd ", "Outside Thread name " + Thread.currentThread().name)
workerThread.workerThreadHandler.post {
Log.d("Lloyd ", "Runnable Thread name " + currentThread().name)
btn_task1.text = "Task 2"
tv.text= "YAAAAAAAAAAAAAAAAAAAAAAy"
}
}
最佳答案
When you connect a Handler to your UI thread, the code that handles messages runs on the UI thread.
workerThread.startTask()
的,所以处理程序也只是将结果返回给UI线程,这就是UI也将更新的原因
关于android - 为什么可以使用在后台线程中创建的处理程序来更新UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62067313/
我是一名优秀的程序员,十分优秀!