请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请教老师,我在子线程中new handler,关联子线程lopper,消息分发回调handlerMessage方法内为什么也能更新UI?

正在回答 回答被采纳积分+3

1回答

宝慕林7262087 2023-08-14 23:32:47

在Android中,只有主线程(也称为UI线程)才能更新UI。然而,当您在子线程中创建一个Handler并将其绑定到子线程的Looper时,Handler会被关联到该子线程的消息队列。这意味着当您在子线程中发送一个消息到Handler时,该消息会被添加到子线程的消息队列中。

当消息队列中有待处理的消息时,子线程的Looper会不断从消息队列中取出消息并将其传递给关联的Handler的handlerMessage方法。由于handlerMessage方法是在子线程中执行的,它可以在不阻塞主线程的情况下处理消息。

然而,当您在handlerMessage方法中更新UI时,实际上是通过发送一条消息到主线程的消息队列中,然后由主线程的Looper来处理该消息并更新UI。这是因为只有主线程才能更新UI,所以是通过将更新UI的操作封装为一条消息发送到主线程来实现的。

总结起来,通过在子线程中创建Handler并关联相应的Looper,您可以实现在子线程中发送消息到主线程并更新UI的操作。


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信