HandlerThread的使用场景和用法


相信很多同学都听说并使用过HandlerThread、Thread、Handler,但具体对这三种的用法和区别你真有认真总结过吗?
本文帮你区别并了解三者的基本用法。

Thread基本用法

Thread类实现了Runnable接口,必须重写run()方法;

//匿名内部类形式
new Thread(new Runnable() {
   
        
        @Override
        public void run() {
   
            // TODO Auto-generated method stub
        }
});

或者

class myThread implements Runnable {
   

    @Override
    public void run() {
   
        // TODO Auto-generated method stub
    }
}

启动一个线程,用start()方法;

HandlerThread基本用法

看源码开头的方法注释,我们可以很清楚的了解这个类的用途:

/*
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可以方便的开启一个线程,并且这个线程已经绑定了一个looper了。这个looper可以用来new一个handler类。注意在此之前,要调用start()方法。

示例代码如下:

HandlerThread thread1 = new HandlerThread("test1");
thread1.start();

看到这里很多同学可能会产生一个疑问,为什么这个线程已经绑定了一个Looper了呢?还要在此之前调用start()方法?

答案就是:提前调用start()方法就是为了为线程绑定Looper的。
我们知道,start()方法可以开启一个线程,调用线程的run()方法。而HandlerThread的run()方法是这样的:

@Override
public void run() {
   
    mTid = Process.myTid();
    Looper.prepare();// HandlerThread在start()的时候执行run()方法,而Looper就是在这里被创建的
    synchronized (this) {
   
        mLooper = Looper.myLooper();
        notifyAll();
    }
    Process.setThreadPriority(mPriority);
    onLooperPrepared();
    Looper.loop();
    mTid = -1;
}

看到没,run()方法里面调用Looper.prepare()来为线程绑定一个Looper。 Looper.loop()开启消息循环。相当于把

  • 11
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值