Handler、Looper、Message之间关系

  • Handler、Looper(轮循器)、MessageQueue(消息队列)、Message(消息)工作原理----面试问题

与Handler一起工作的几个组件:

  1. Message:Handler接收和处理的消息对象。
  2. MessageQueue:消息队列,他采用先进先出的方式来管理Message。Handler发送消息时先把消息发送到消息队列中。
  3. Looper:每个线程最多拥有一个Looper。他的Loop方法负责读取MessageQueue队列中的消息,读到信息之后就把信息交给发送该消息的Handler进行处理。程序在创建Looper对象的时候,会自动在Looper的构造器中自动创建一个MessageQueue队列对象。

 

注意:

  1. Handler发送的消息时先放入MessageQueue,所以handler要正常工作,必须当前线程先有MessageQueue
  2. MessageQueue是由Looper管理的,所以换句话说,Handler要正常工作必须先有Looper
  3. 为了保证线程中有Looper,分两种情况。

A:在主线程中系统默认已经初始化了一个Looper对象,并且已经loop(),所以在主线程中可以直接创建Handler对象进行使用。

B:程序员自己创建的子线程,必须手动创建一个Looper对象,并启动它。Looper.prepare();  //创建Looper对象,同时初始化一个消息队列

Looper.loop()//启动Looper。让Looper开始工作:去消息队列中取消息,然后交给当前线程中的Handler来处理。里面是个死循环

 

总结:

  1. 主线程中使用Handler直接创建即可以使用。
  2. 子线程中使用Handler的步骤:

a:调用Loop.prepare(); 

b:创建Handler对象.

c:调用Looper.loop();

注意:在线程中调用过Looper.loop()之后,后面不能再写代码,因为loop()内部是个死循环,后面的写的代码无法执行到。

  • 线程间通信的实现步骤:

1.在主线程中定义Handler的子类

2.重写Handler类的handleMessage()方法

3.用该子类定义全局的Handler对象,以便子线程使用

4.子线程获得handler对象用该对象的sendMessage()方法发送消息

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值