Skip to content

【Handler】Handler、Looper、Message、MessageQueue相关 #2

@lnfg

Description

@lnfg

1、

Q:是否可以在一个线程中创建多个Handler对象?

A:一个线程中可以创建多个Handler对象。

Handler发送消息的过程:

首先可以确定,每个线程中只能有唯一的Looper和MessageQueue。唯一性由 ThreadLocal 保证。当第一个Handler在线程中初始化时,会绑定到当前线程的Looper和MessageQueue(Handler构造函数是这样写的:mLooper = Looper.myLooper(); mQueue = mLooper.mQueue;) ,然后在初始化其他Handler时,会直接获取第一个Handler初始化时创建的Looper和MessageQueue。

由于MessageQueue对于Handler是一对多的,当Handler通过Looper查询MessageQueue获取消息时,首先会分析消息中的参数,确定消息对应的Handler,然后分发给指定的Handler进行处理。

image

from https://www.codetd.com/en/article/13891908

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions