面试必问的一个知识点,关于HandlerThread的使用场景以及怎样使用 HandlerThrea(android,bat,面试,移动开发)

时间:2024-05-07 02:59:48 作者 : 石家庄SEO 分类 : 移动开发
  • TAG :

    %E9%9D%A2%E8%AF%95%E5%BF%85%E9%97%AE%E7%9A%84%E4%B8%80%E4%B8%AA%E7%9F%A5%E8%AF%86%E7%82%B9%EF%BC%8C%E5%85%B3%E4%BA%8EHandlerThread%E7%9A%84%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF%E4%BB%A5%E5%8F%8A%E6%80%8E%E6%A0%B7%E4%BD%BF%E7%94%A8+HandlerThrea

有些同学老问我,快要校招了 今年的金三银四退成了金四银五了,我改准备哪些知识点去面试复习,然而要准备的知识点很庞大,今天要讲的知识其中之一。一篇关于HandlerThread的解析

文档笔记~
面试必问的一个知识点,关于HandlerThread的使用场景以及怎样使用 HandlerThrea

知识汇总的PDF相关内容后续GitHub更新,想冲击金三银四的小伙伴可以找找看看,欢迎star
顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找
https://github.com/xiangjiana/Android-MS
(VX:mm14525201314)

HandlerThread是Google帮我们封装好的,可以用来执行多个耗时操作,而不需要 多次开启线程,里面是采用HandlerLooper实现的。

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与线 程对象绑定在一起的吗?其实很简单,就是将线程的looperHandler绑定在一 起,代码如下:

注意必须按照以上三个步骤来,下面在讲解源码的时候会分析其原因

运行以上测试代码,将可以看到如下效果图(例子不太恰当,主要使用场景是在 handleMessage中执行耗时操作)
面试必问的一个知识点,关于HandlerThread的使用场景以及怎样使用 HandlerThrea

官方源代码如下,是基于sdk23的,可以看到,只有一百多行代码而已。

1)首先我们先来看一下它的构造方法

有两个构造方法,一个参数的和两个参数的,name代表当前线程的名称,priority 为线程的优先级别

2)接着我们来看一下run()方法,在run方法里面我们 可以看到我们会初始化一个Looper,并设置线程的优 先级别

3)接着我们来看一下quit方法和quitSafe方法

跟踪这两个方法容易知道只两个方法最终都会调用MessageQueuequit(boolean safe) 方法

不安全的会调用 removeAllMessagesLocked(); 这个方法,我们来看这个方法是 怎样处理的,其实就是遍历Message链表,移除所有信息的回调,并重置为null。

安全地会调用 removeAllFutureMessagesLocked(); 这个方法,它会根据 Message.when这个属性,判断我们当前消息队列是否正在处理消息,没有正在处 理消息的话,直接移除所有回调,正在处理的话,等待该消息处理处理完毕再退出该循环。因此说 quitSafe() 是安全的,而 quit() 方法是不安全的,因为quit方 法不管是否正在处理消息,直接移除所有回调。

文档笔记~
面试必问的一个知识点,关于HandlerThread的使用场景以及怎样使用 HandlerThrea

知识汇总的PDF相关内容后续GitHub更新,想冲击金三银四的小伙伴可以找找看看,欢迎star
顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找
https://github.com/xiangjiana/Android-MS
(VX:mm14525201314)

本文:面试必问的一个知识点,关于HandlerThread的使用场景以及怎样使用 HandlerThrea的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:VS2017中无法提示Unity代码问题下一篇:

9 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18