Android 深入了解 Handler 和 Looper

前记

Android 中无法在子线程中直接更新 UI,通过 Handler 提供的消息处理函数可以实现子线程 UI 更新。那么 Handler 究竟是啥。Handler 这货其实和 Looper 有一腿,即使平常在使用 Handler 的时候不用直接引用 Looper,但是,但是,但是,相信他们没办法切断这姻缘。

Android 的消息驱动模型

这里写图片描述

Android 同大都数系统相同,使用基于消息驱动的模型。即由事件源(用户点击按钮、滑动列表 etc.)产生消息并投递到消息队列,消息处理器取出消息并进行分发、处理。

窥窃 Looper

好了,有了消息驱动模型的概念,现在开始主题。即使你有多不情愿了解 Looper,但还是从这里开始吧。

简单来讲,Looper 中维护一个消息队列,消息被投递到消息队列当中,并由 Looper 实现消息分发。

先来看一个 Looper 使用的例子:

class Fuck extends Thread {
    @Override
    public void run() {
        // 投递消息前需要调用该函数
        Looper.prepare();

        // 投递消息到 Looper...

        // 分发、处理消息
        Looper.loop();
    }
}

翻开 android.os.Looper.java,我们对四个变量感兴趣:

public final class Looper {
   

...

static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();
private static Looper sMainLooper;

final MessageQueue mQueue;
final Thread mThread;

...

}
  1. ThreadLocal ThreadLocal 是 Java 提供的一个类,可以关联(保存和读取)一个当前线程的变量,其他线程无法跨越线程对该变量进行访问,具体参考 Oracle 文档
  2. Looper 应用程序主线程(即 UI 进程)的 Looper 实例(找到真面目www)。
  3. MessageQueu
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值