面试必问的一个知识点,关于HandlerThread的使用场景以及怎样使用 HandlerThrea
导读:本文共6455.5字符,通常情况下阅读需要22分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 前言有些同学老问我,快要校招了 今年的金三银四退成了金四银五了,我改准备哪些知识点去面试复习,然而要准备的知识点很庞大,今天要讲的知识其中之一。一篇关于HandlerThread的解析文档笔记~知识汇总的PDF相关内容后续GitHub更新,想冲击金三银四的小伙伴可以找找看看,欢迎star(顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找)h... ...
目录
(为您整理了一些要点),点击可以直达。有些同学老问我,快要校招了 今年的金三银四退成了金四银五了,我改准备哪些知识点去面试复习,然而要准备的知识点很庞大,今天要讲的知识其中之一。一篇关于HandlerThread
的解析
文档笔记~
知识汇总的PDF相关内容后续GitHub更新,想冲击金三银四的小伙伴可以找找看看,欢迎star
(顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找)
https://github.com/xiangjiana/Android-MS
(VX:mm14525201314)
HandlerThread
是Google帮我们封装好的,可以用来执行多个耗时操作,而不需要 多次开启线程,里面是采用Handler
和Looper
实现的。
Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called
该参数表示线程的名字,可以随便选择。
将我们的handlerThread
与Handler绑定在一起。 还记得是怎样将Handler与线 程对象绑定在一起的吗?其实很简单,就是将线程的looper
与Handler
绑定在一 起,代码如下:
注意必须按照以上三个步骤来,下面在讲解源码的时候会分析其原因
运行以上测试代码,将可以看到如下效果图(例子不太恰当,主要使用场景是在 handleMessage
中执行耗时操作)
官方源代码如下,是基于sdk23的,可以看到,只有一百多行代码而已。
1)首先我们先来看一下它的构造方法
有两个构造方法,一个参数的和两个参数的,name代表当前线程的名称,priority
为线程的优先级别
2)接着我们来看一下run()
方法,在run方法里面我们 可以看到我们会初始化一个Looper
,并设置线程的优 先级别
3)接着我们来看一下quit
方法和quitSafe
方法
跟踪这两个方法容易知道只两个方法最终都会调用MessageQueue
的 quit(boolean safe)
方法
不安全的会调用 removeAllMessagesLocked()
; 这个方法,我们来看这个方法是 怎样处理的,其实就是遍历Message
链表,移除所有信息的回调,并重置为null。
安全地会调用 removeAllFutureMessagesLocked()
; 这个方法,它会根据 Message.when
这个属性,判断我们当前消息队列是否正在处理消息,没有正在处 理消息的话,直接移除所有回调,正在处理的话,等待该消息处理处理完毕再退出该循环。因此说 quitSafe()
是安全的,而 quit()
方法是不安全的,因为quit方 法不管是否正在处理消息,直接移除所有回调。
文档笔记~
知识汇总的PDF相关内容后续GitHub更新,想冲击金三银四的小伙伴可以找找看看,欢迎star
(顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找)
https://github.com/xiangjiana/Android-MS
(VX:mm14525201314)
面试必问的一个知识点,关于HandlerThread的使用场景以及怎样使用 HandlerThrea的详细内容,希望对您有所帮助,信息来源于网络。