Android之HandlerThread源码分析(第四篇:退出线程)

前言 

    HandlerThread对象开启的工作线程,如果一直不退出,且也没有执行任务时并不会占用CPU资源,我们在项目中一般会选择一直留存一个HandlerThread对象表示的工作线程,方便我们随时向此工作线程中发起一个耗时的任务,不过HandlerThread仍然提供了可以退出工作线程的API,即下面两个方法

 

quit()方法分析

    public boolean quit() {
        Looper looper = getLooper();
        if (looper != null) {
            looper.quit();
            return true;
        }
        return false;
    }

用于结束工作线程的方法,只要结束Looper的循环,工作线程即会退出。特点:不会等待正在执行的任务,会立刻终止工作线程

1、先得到与当前线程相关的Looper对象,由局部变量looper持有

2、检查Looper

当looper不为空时,最终调用它的quit()方法完成退出,并向调用者返回true,表示退出成功

3、Looper没有创建时,向调用者返回false,表示退出失败

 

quitSafely()方法分析

    public boolean quitSafely() {
        Looper looper = getLooper();
        if (looper != null) {
            looper.quitSafely();
            return true;
        }
        return false;
    }

用于结束工作线程的方法,只要结束Looper的循环,工作线程即会退出,特点:等待所有正在执行的Message都处理完,才会退出工作线程

此处调用的是Looper对象的quitSafely()方法完成退出!

 

总结

1、HandlerThread的退出,完全调用的是Looper对象的方法

2、Looper的quit()、quitSafely()决定了退出方式的不同,参见Looper源码,Looper会调用MessageQueue的退出方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值