Handler消息机制

Handler消息机制涉及Looper和线程的关系。Looper在创建Handler的线程中运行,确保回调在同一线程执行。主线程预置了Looper,故能直接使用Handler。在子线程使用Handler需手动创建并启动Looper,完成后调用Looper.quit()避免资源浪费。每个线程只能有一个Looper对象,存储在ThreadLocal中。
摘要由CSDN通过智能技术生成


1. Looper 是运行在创建Handler所在的线程中的,这样一来Handler中的业务逻辑就可以切换到创建Handler所在的线程中去执行。也就是在哪个线程创建的Handler,回调就是在哪个线程中


2. 线程默认是没有Looper的,如果需要使用Handler就必须为线程创建Looper。主线程在创建时就会初始化Looper,这也是在主线程中默认可以使用Handler的原因。

Handler 的工作需要 Looper,没有 Looper 的线程就会报错,可以通过 Looper.prepare()为当前线程创建一个Looper,接着通过Looper.loop()来开启消息循环。

在子线程中使用Handler:

new Thread("Thread#2"){
    @Override
    public void run() {
        Looper.prepare();
        Handler handler = new Handler();
        Looper.loop();
    }}.start();

在子线程中,如果手动为其创建了 Looper ,那么在所有的事情完成以后应该调用 quit 方法来终止消息循环,否则这个子线程

就会一直处于等待的状态,而如果退出 Looper 以后,这个线程就会立刻终止,因此建议不需要的时候终止 Looper 。


3.每个线程有且有最多只能有一个Looper对象,它是一个ThreadLocal,ThreadLocal是Thread中的一个局部变量


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值