老生常谈的Handler消息机制。

1. Handler为何而生?

  Handler 是连接主线程和子线程的桥梁。耗时的操纵一般在子线程中进行,而更新UI的操作则在主线程(UI线程)中进行所以就诞生了Handler。

2.  Handler工作流程:

涉及到Handler、Message、MessageQueue、Looper。
要想初始化handler,首先得调用looper.prepare(),通过调用该方法创建了messagequeue并把looper对象绑定到当前线程中,然后调用looper.loop()开启消息循环,当handler调用sendMessage方法的时候将message发送到消息队列中,同时给message指定了target对象,这个target就是handler,从消息队列中读取message,
然后调用handler的handlemessage方法


问题有:

  1. 在UI线程中有几个Looper对象?有几个MessageQueue对象?有几个Handler对象?有几个Message对象?
  2. 怎么保证只有一个Looper对象的?
  3. 怎么保证只有一个MessageQueue对象的?
  4. 为什么发送消息在子线程,而处理消息就变成主线程了,在哪儿跳转的?
  5. looper对象只有一个,在分发消息时怎么区分不同的handler?
  6. 能不能在子线程中创建Handler对象?
  7. 怎么在子线程中得到主线程中handler对象


在UI线程中有几个Looper对象?有几个MessageQueue对象?有几个Handler对象?有几个Message对象?

在UI线程中只有一个Looper对象,只有一个MessageQueue对象。但可以有很多个handler对象。可以有很多个Message对象。 


Handler 的简单使用Demo: https://mp.csdn.net/postedit/80695003

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值