Handler就像你开的餐馆!
2023-11-28 15:36:05
Handler就好比你开了个餐馆。
面试官,你坐好,听听我这个故事吹的怎么样? Handler的相关博客太多了,随便一搜都一大把,但是基本都是上来就贴源码,讲姿势,短时间不太好弄明白整体的关系,和流程,本文就以生活点餐的例子再结合源码原样奉上,带你从一个服务员的角度,了解Handler的职责、工作流程。
首先,你需要有一个餐馆,这个餐馆就是主线程(主线程就是应用程序的主执行线程),它是整个应用程序的主导线程,负责处理应用程序中的所有 UI 操作。
然后,你需要有服务员,服务员就是Handler,它负责处理来自主线程的请求。当主线程需要做一些耗时的操作时,就会把请求发送给Handler。
Handler收到请求后,就会把请求交给厨师(线程),厨师做好了之后,会把菜(结果)端到你的桌子上(主线程)。
所以,Handler的作用就是中介,它负责在主线程和厨师之间传递消息。
举个例子,如果你想在你的应用程序中显示一个进度条,那么你就可以通过Handler把进度条的更新请求发送给厨师(线程),厨师做好了之后,就会把进度条的更新结果发送给Handler,然后Handler再把结果显示在主线程上。
这样,你就可以在主线程上看到进度条的更新情况,而不用担心主线程会被阻塞。
这就是Handler的基本工作流程。
现在,我们来看看Handler的源码。
Handler的源码位于android.os.Handler类中,这个类继承自MessageQueue类,所以Handler本质上就是一个消息队列。
MessageQueue类是一个消息队列,它负责存储和管理消息。当Handler收到一个消息时,就会把消息添加到消息队列中,然后从消息队列中取出消息,并把消息发送给相应的线程。
Handler类还提供了一些方法,可以让你向消息队列中添加消息,也可以让你从消息队列中取出消息。
这些方法分别是:
- sendMessage():向消息队列中添加一个消息。
- handleMessage():从消息队列中取出一个消息,并把消息发送给相应的线程。
- post():向消息队列中添加一个消息,并立即执行这个消息。
- removeCallbacks():从消息队列中删除一个消息。
这些方法是Handler类中最常用的方法,也是你最需要掌握的方法。
好了,以上就是关于Handler的全部内容了。希望你能通过这篇文章,对Handler有一个更加深入的了解。