从 sendEmptyMessage 开始,一步步解剖Handler

桑小年

关注

2018-06-30 16:07 · 字数 1665 · 阅读 10 ·  Android源码

工作的时候发现自己对于很多东西用起来得心应手,原理机制也背诵的滚瓜烂熟,但是一问到源码脑子就....瓦特了!所以最近准备从头开始学习源码,学习大神们优秀的思想!


本文是对Handler机制的源码分析,目的是为了能够从源码角度一点点的理解Handler机制,里面会出现大量的源码,所以会比较枯燥,但是只要认真看完,相信你一定会对Handler机制的实现方法有更加清晰的认识


    Handler是用起来非常简单!

private Handler handler = new Handler(){

        @Override

        public void handleMessage(Message msg) {

            super.handleMessage(msg);

            //处理接收到的消息

        }

    };

初始化之后,在子线程进行完耗时操作之后,使用


handler.sendEmptyMessage(what)

好了,现在就从sendEmptyMessage 方法开始,一步步的解析handler整个工作流程 — — 注意,Handler开始向消息队列发送消息了;


点进去之后,我们会发现,sendEmptyMessage 、sendMessage 最终都是在调用 sendMessageAtTime 方法,将发送的消息放入messgeQueue;需要注意的一点是,sendMessageDelayed方法中,已经将 delayMillis 延迟时间转换成了 SystemClock.uptimeMillis() + delayMillis,指的是该消息被取出来执行的时间,这一点会在MessageQueue中显的比较重要


    //直接调用 sendEmptyMessageDelayed 方法

    public final boolean sendEmptyMessage(int what){

        //直接调用 sendEmptyMessageDelayed 方法

        return s

你可能感兴趣的:(从 sendEmptyMessage 开始,一步步解剖Handler)