handler与handlerThread的区别

Handler在Android中用于发送和处理消息,常配合HandlerThread处理耗时操作。通过HandlerThread启动的新线程不运行在UI主线程,无法直接操作UI,但能通过Message通信。这种方式常用于异步任务执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.

Handler在android里负责发送和处理消息。它的主要用途有:

  1)按计划发送消息或执行某个Runnanble(使用POST方法);
  2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程)
Handler mHandler = new Handler();
mHandler.post(new Runnable(){
public void run(){
  Log.e(TAG, Thread.currentThread().getId() + " " +count);   

}
});
mHandler.post(mRunnable)执行了run()方法,并没有执行Thread的start()方法去开启一个新的线程
因此,子线程是运行在UI主线程中的,不适合进行比较耗时的操作,会阻塞主线程UI队列。

  2.
HandlerThread继承于Thread,所以它本质就是个Thread。
与普通Thread的差别就在于,它有个Looper成员变量。这个Looper其实就是对消息队列以及队列处理逻辑的封装,简单说就是 消息队列+消息循环。
当我们需要一个工作者线程,而不是把它当作一次性消耗品,用过即废弃的话,就可以使用它。

HandlerThread handlerThread = new HandlerThread("threadone"); 

handlerThread.start();  //开启一个新的线程

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

mHandler.post(new Runnable(){

public void run(){

}

});

通过HandlerThread新建的线程是一个新的线程,不是运行在UI主线程中的,不能操作UI,但是可以通过Message发送消息来进行操作。

可以用来处理一些比较耗时的操作。 








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值