一些Hanlder源码的简单分析

本文深入解析了Looper机制在Android系统中的作用,包括主线程与子线程中Looper的初始化方式,消息队列的创建过程,以及如何通过Looper实现跨线程的消息处理。详细介绍了Looper.prepare()与Looper.loop()的方法调用,帮助开发者理解如何在子线程中进行UI更新操作。

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

Hanlder:
ActivityThread 主线程: Looper.prepareMainLooper(); -> 会初始化looper , 所以开发者不用在主线程中去手动创建looper,其他线程需要。
自己初始化方法:Looper.prepare();

自己创建looper初始化方法:prepare(true); 参数quitAllowed
主线程自己创建looper初始化方法:prepare(false); 参数quitAllowed

//保证只有一个looper
private static void prepare(boolean quitAllowed) {
    if (sThreadLocal.get() != null) {
        throw new RuntimeException("Only one Looper may be created per thread");
    }
    sThreadLocal.set(new Looper(quitAllowed));
}

参数quitAllowed:是否允许退出的标志

void quit(boolean safe) {
if (!mQuitAllowed) {
         throw new IllegalStateException("Main thread not allowed to quit.");
     }
. . .
}

在子线程中使用

Looper.prepare();
	...可以进行更新ui的操作
Looper.loop();  

看上述可知,looper会在本线程创建对象,使线程拥有自己的消息列队,主线程拥有自己的消息列队,一般线程创建时没有自己的消息列队,消息处理时就在主线程中完成,如果线程中使用Looper.prepare()和Looper.loop()创建了消息队列就可以让消息处理在该线程中完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值