HandlerThread 源码分析,15个经典面试问题

本文介绍了如何在Android中使用HandlerThread创建线程,包括创建HandlerThread、指定线程优先级以及使用Looper发送消息。同时讨论了线程调度的相关知识,强调了理解和实践源码和原理的重要性,对于Android开发者提升技能和成为架构师具有指导意义。
摘要由CSDN通过智能技术生成

Handler mHandler;

private void createManualThreadWithHandler() {

new Thread() {

@Override

public void run() {

super.run();

Looper.prepare();

mHandler = new Handler(Looper.myLooper());

Looper.loop();

}

}.start();

}

Android为了简化Handler的创建过程提供了一个便捷的类,使用它我们可以快速的创建一个带有Looper的线程,有了Looper这个线程,我们就可以生成Handler

如何使用


// Step 1: 创建并启动HandlerThread线程,内部包含Looper

HandlerThread handlerThread = new HandlerThread(“lingdage”);

handlerThread.start();

// Step 2: 创建Handler

Handler handler = new Handler(handlerThread.getLooper());

// Step 3: 发送消息

handler.post(new Runnable() {

@Override

public void run() {

System.out.println(“thread id=”+Thread.currentThread().getId());

}

});

源码分析


创建HandlerThread对象

public HandlerThread(String name) {

super(name);

//HandlerThread的默认优先级是Process.THREAD_PRIORITY_DEFAULT,具体值为0。

mPriority = Process.THREAD_PRIORITY_DEFAULT;

}

public HandlerThread(String name, int priority) {

super(name);

mPriority = priority;

}

线程的优先级的取值范围为-20到19。优先级高的获得的CPU资源更多,反之则越少。-20代表优先级最高,19最低。0位于中间位置,但是作为工作线程的HandlerThread没有必要设置这么高的优先级,因而需要我们降低其优先级。注意!是Process里的优先级而不是Thread的。

可控制的优先级
  • THREAD_PRIORITY_DEFAULT,默认的线程优先级,值为0。

  • THREAD_PRIORITY_LOWEST,最低的线程级别,值为19。

  • THREAD_PRIORITY_BACKGROUND 后台线程建议设置这个优先级,值为10。

  • THREAD_PRIORITY_MORE_FAVORABLE 相对THREAD_PRIORITY_DEFAULT稍微优先,值为-1。

  • THREAD_PRIORITY_LESS_FAVORABLE 相对THREAD_PRIORITY_DEFAULT稍微落后一些,值为1。

以上的这些优先级都是可以在程序中设置的,除此之外还有不可控的优先级均有系统进行自动调整。

常见的加入优先级的方法如下

Runnable run = new Runnable() {

@Override

public void run() {

android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);

}

};

关于Android中线程的调度详情,请参考剖析Android中进程与线程调度之nice

获取Looper

/**

  • This method returns the Looper associated with this thread. If this thread not been started

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

要如何成为Android架构师?

搭建自己的知识框架,全面提升自己的技术体系,并且往底层源码方向深入钻研。
大多数技术人喜欢用思维脑图来构建自己的知识体系,一目了然。这里给大家分享一份大厂主流的Android架构师技术体系,可以用来搭建自己的知识框架,或者查漏补缺;

对应这份技术大纲,我也整理了一套Android高级架构师完整系列的视频教程,主要针对3-5年Android开发经验以上,需要往高级架构师层次学习提升的同学,在这里点击GitHub免费分享,希望能帮你突破瓶颈,跳槽进大厂;

最后我必须强调几点:

1.搭建知识框架可不是说你整理好要学习的知识顺序,然后看一遍理解了能复制粘贴就够了,大多都是需要你自己读懂源码和原理,能自己手写出来的。
2.学习的时候你一定要多看多练几遍,把知识才吃透,还要记笔记,这些很重要! 最后你达到什么水平取决你消化了多少知识
3.最终你的知识框架应该是一个完善的,兼顾广度和深度的技术体系。然后经过多次项目实战积累经验,你才能达到高级架构师的层次。

你只需要按照在这个大的框架去填充自己,年薪40W一定不是终点,技术无止境

说你整理好要学习的知识顺序,然后看一遍理解了能复制粘贴就够了,大多都是需要你自己读懂源码和原理,能自己手写出来的。
2.学习的时候你一定要多看多练几遍,把知识才吃透,还要记笔记,这些很重要! 最后你达到什么水平取决你消化了多少知识
3.最终你的知识框架应该是一个完善的,兼顾广度和深度的技术体系。然后经过多次项目实战积累经验,你才能达到高级架构师的层次。

你只需要按照在这个大的框架去填充自己,年薪40W一定不是终点,技术无止境

  • 18
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值