写点什么

Android-Handler 机制详解

用户头像
Android架构
关注
发布于: 1 小时前

不用关心多线程的问题,更新 UI 的操作,都是在主线程的消息队列当中轮询处理的。


5、handler 的原理是什么?


答:handler 封装消息的发送(主要包含消息发送给谁)


2.Looper——消息封装的载体。(1)内部包含一个 MessageQueue,所有的 Handler 发送的消息都走向这个消息队列;(2)Looper.Looper 方法,就是一个死循环,不断地从 MessageQueue 取消息,如果有消息就处理消息,没有消息就阻塞。


3、MessageQueue,一个消息队列,添加消息,处理消息


4、handler 内部与 Looper 关联,handler->Looper->MessageQueue,handler 发送消息就是向 MessageQueue 队列发送消息。


总结:handler 负责发送消息,Looper 负责接收 handler 发送的消息,并把消息回传给 handler 自己。


5、handler 的原理是什么?


答:1、handler 封装消息的发送(主要包括消息发送给谁)


2、Looper——消息封装的载体。(1)内部包含一个 MessageQueue,所有的 Handler 发送的消息都走向这个消息队列;(2)Looper.Looper 方法,就是一个死循环,不断地从 MessageQueue 取消息,如果有消息就处理消息,没有消息就阻塞。


3、MessageQueue,一个消息队列,添加消息,处理消息


4、handler 内部与 Looper 关联,handler->Looper->MessageQueue,handler 发送消息就是向 MessageQueue 队列发送消息。


总结:handler 负责发送消息,Looper 负责接收 handler 发送的消息,并把消息回传给 handler 自己。


MessageQueue 存储消息的容器。


6、HandlerThread 的作用是什么?


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


答:HandlerThread thread=new HandlerThread(“handler thread”);自动含等待机制,等 Looper 创建好了,才创建 Handler,避免出现空指针异常。


7、主线程


  • ActivityThread 默认创建 main 线程,main 中默认创建 Looper,Looper 默认创建 MessageQueue

  • threadLocal 保存线程的变量信息,方法包括:set,get


8、Android 更新 UI 的方式?


答:1、runOnUIThread


2、handler post


3、handler sendMessage


4、view post


9、非 UI 线程真的不能更新 UI 吗?


答:不一定,之所以子线程不能更新界面,是因为 Android 在线程的方法里面采用 checkThread 进行判断是否是主线程,而这个方法是在 ViewRootImpl 中的,这个类是在 onResume 里面才生成的,因此,如果这个时候子线程在 onCreate 方法里面生成更新 UI,而且没有做阻塞,就是耗时多的操作,还是可以更新 UI 的。


10、使用 Handler 遇到的问题?


答:比如说子线程更新 UI,是因为触发了 checkThread 方法检查是否在主线程更新 UI,还有就是子线程中没有 Looper,这个原因是因为 Handler 的机制引起的,因为 Handler 发送 Message 的时候,需要将 Message 放到 MessageQueue 里面,而这个时候如果没有 Looper 的话,就无法循环输出 MessageQueue 了,这个时候就会报 Looper 为空的错误。11、主线程怎么通知子线程?


答:可以利用 HandlerThread 进行生成一个子线程的 Handler,并且实现 handlerMessage 方法,然后在主线程里面也生成一个 Handler,然后通过调用 sendMessage 方法进行通知子线程。同样,子线程里面也可以调用 sendMessage 方法进行通知主线程。这样做的好处比如有些图片的加载啊,网络的访问啊可能会比较耗时,所以放到子线程里面做是比较合适的。

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android-Handler机制详解