Android中每个线程是否拥有独立的Handler?
线程是否拥有独立的Handler,还是每个应用仅存在一个负责所有任务分发的中央Handler?
嘿,这个问题问到点子上了,刚好能帮你理清Android Handler机制的核心逻辑——根本不存在应用级别的中央Handler统一处理所有任务,每个带Looper的线程可以拥有自己的Handler,甚至一个线程能有多个Handler。
我给你拆解一下关键细节:
Handler的本质是绑定线程的Looper,而非直接绑定线程
每个线程默认是没有Looper的,只有手动初始化(或者系统帮你初始化)后,线程才会拥有对应的Looper和MessageQueue。当你创建Handler时,如果没有指定Looper,它会自动获取当前线程的Looper——要是当前线程没Looper,直接就会抛出异常。不同线程的Handler完全独立
- 主线程:APP启动时系统就自动调用了
Looper.prepareMainLooper()和Looper.loop(),所以主线程自带Looper和消息队列。你在主线程创建的所有Handler,都会绑定到主线程的Looper,它们共享同一个消息队列,负责处理UI更新这类必须在主线程执行的任务。 - 子线程:如果想让子线程用Handler,你得手动调用
Looper.prepare()创建Looper,再调用Looper.loop()启动消息循环。之后在这个子线程里创建的Handler,就会绑定到该子线程的Looper,只会处理这个子线程消息队列里的任务,和主线程的Handler完全没关系。
- 主线程:APP启动时系统就自动调用了
一个线程可以有多个Handler
比如你在主线程里new两个Handler实例,它们都会绑定到主线程的Looper,共享同一个MessageQueue。当你用这两个Handler发消息时,Looper会把消息分发给对应的目标Handler处理(每个Message都会标记自己的target Handler)。
简单来说:Handler是跟着线程的Looper走的,每个带Looper的线程都能有自己的Handler体系,不存在什么统管所有任务的应用级中央Handler。
内容的提问来源于stack exchange,提问作者Now.Zero
相关产品推荐
相关产品推荐

