在非UI线程使用Handler

在非UI线程使用Handler时,通常需要创建Looper、Handler并启动消息循环。Handler的线程绑定取决于其关联的Looper,Looper和MessageQueue是一对一关系,而Handler和Message可以有多个。若要处理UI,Handler需绑定主线程的Looper。可以通过Looper.getMainLooper()确保Handler在主线程运行,否则需手动调用Looper.prepare()和Looper.loop()。Handler通过Message或Runnable进行线程间通信,常用于子线程更新主线程UI。
摘要由CSDN通过智能技术生成

handler对象所绑定的线程并不取决于该handler对象由哪个线程构建,而是取决于该handler对象所绑定的Looper属于哪个线程。

Looper就像一个消息队列(MessageQueue)的管家,一个消息队列只有一个管家,并且管理者整个消息队列,而一个消息队列内可以容纳多个消息(Message),而工人(Handler)也可以有多个,管家派遣他们向消息队列中存储或取出消息后执行任务;
所以它们的个数如下:

管家(Looper): 1 个;
消息队列(MessageQueue):1 个;
消息(Message):可以多个;
工人(Handler):可以多个;

在非UI线程使用Handler进行线程通信时,一般都需要进行3个步骤:

  • 创建Looper Looper.prepare() (创建了一个Looper和MessageQueue)
  • 创建Handler Handler
  • 启动消息循环 Looper.loop()

如果你不带参数实例化:Handler handler=new Handler();那么这个会默认绑定当前线程的Looper。
一般而言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值