【Android】の基础——消息处理机制

本文以一家公司的业务处理流程为比喻,介绍了Android中的消息处理机制,包括Handler如何发送消息,Looper如何进行消息循环,以及MessageQueue如何存储和提供消息。

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

这次主要谈谈以Handler、MessageQueue和Looper为核心的消息处理机制。

故事

话说:一家公司,里面有很多个办公室分别负责处理不同的业务,每个办公室都有一个工作簿,每次有新的业务需要处理,提出申请的部门就会把需要处理的业务告诉负责该业务办公室的干事,这个干事就把需要处理的业务写到了工作簿上面。每个办公室都有一个办公室主任,他的职责就是不断的浏览工作簿,然后按照顺序分配,当他浏览到这条任务的时候,就把他分配给刚才写下任务的那个干事去完成。

这样就构成了我们的消息处理机制。一个公司——相当于APP,它里面会有很多的办公室——相当于线程,去传送业务的干事以及去执行任务的干事——都相当于Handler,办公室主任则——相当于Looper,办公室里面的工作簿——相当于MessageQueue。

详细

这里写图片描述
Handler通过post和send(最终是通过send)的一系列方法累发送消息。最终会使被插入消息的MessageQueue调用enqueueMessage()方法,来插入这条消息(MessageQueue使用单链表存储消息)。

Looper:在线程中,通过Looper.prepare()来创建Looper,通过Looper.loop()开始消息循环。他通过MessageQueue的next()方法来获得消息。如果next()方法没有返回,则阻塞等待;如果next()方法返回值为null则退出这个死循环。

当Looper从消息队列得到了Message,就会调用之前将这条Message插入队列的Handler的dispatchMessage()来进行处理。

Handler的dispatchMessage():

  1. 检查Message的callback是否为null:
    1. 不为null:调用handleCallback(msg),结束
    2. 为null: 检查mCallback是否为null:
      1. 为null:handleMessage(),结束
      2. 不为null:执行mCallback的handleMessage()
        1. 如果返回true:结束
        2. 如果返回false:handleMessage(),结束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值