Handler原理

1,从Handler到Looper

 以上就是Handler机制的概要,每个部分都扮演着自己的角色

    * Handler:发送消息和最后接收并处理消息

    * Message:消息对象

    * MessageQueue:消息队列(未被CPU处理的消息,都放这了)

    * Looper:不断地循环MessageQueue,若有消息则执行,若无消息则阻塞

2,Looper一直循环,为什么不会死循环卡死,即:没有高频率占用CPU

1) Looper的调用

#ActivityThread.java::main()
    public static void main(String[] args) {
        ...
        Looper.prepareMainLooper();
        // 创建ActivityThread
        ActivityThread thread = new ActivityThread();
        thread.attach(false);
        ...
        Looper.loop(); // 消息循环
        throw new RuntimeException("Main thread loop unexpectedly exited");
    }
 可以看出,Looper.loop()之后,就抛出异常,所以按照现象,loop()中应该是一个永真循环(死循环,永不退出)

2) loop()循环的实现

public static void loop() {
        ...
        for (;;) {
            Message msg = queue.next(); // might block
            if (msg == null) {
                return;
            }
            msg.target.dispatchMessage(msg); // 分发消息,等待实现处理
            msg.recycleUnchecked();
        }
    }
由Looper方法源码可以看出:Looper中执行一个永真循环,其中每次有消息则执行,无消息时,则阻塞。因此不会消耗大量CPU资源。情况类是一个休眠一秒的死循环和一个无限循环。情况1对cpu不会有太大影响,情况2则会大量消耗cpu资源。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值