博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Loop,Handler,Message的源码解析
阅读量:6567 次
发布时间:2019-06-24

本文共 1476 字,大约阅读时间需要 4 分钟。

一.Looper

1.Loop的概述

主要是讲消息从消息队列中取出来,然后交给与message相对应的Handler处理。

2.Loop的属性

Thread<Local>:为每个线程创建一个副本  就是创建一个Loop在线程里面。       --set(Looper) 创建Looper的副本  ---get()获取Looper

MessageQueue:消息队列  --主要用来存储消息

Thread  ---获取当前的线程

3.Loop的方法

prepare():初始化属性

myLooper():获取当前线程的Looper

loop:循环从消息队列中取出消息交给Handler

二.Handler

1.Handler的概述

将message和runnable发送出去并在未来某个时间处理

将要在不同线程上执行的操作放在队列里面 。 --一个Handler创建需要绑定 当前线程和其消息队列

2.Handler处理message的方法

/**     * Handle system messages here.     */    public void dispatchMessage(Message msg) {        if (msg.callback != null) {            handleCallback(msg);        } else {            if (mCallback != null) {                if (mCallback.handleMessage(msg)) {                    return;                }            }            handleMessage(msg);        }    }

从上面代码可以看出,Handler处理消息的机制。 先判断message.callback是否为空,不为空则执行message.callback

在判断 执行消息的Handler是否实现了CallBack接口,如果实现了就执行handler.mCallback.handleMessage方法,

我们可以设置返回值来选择是否需要执行handler.handleMessage方法

3.Handler的基本方法

obtainMessage()   --创造一个与Handler相联系的Message(先从消息池中取出,若消息池中没有在生成一个Message)

post()  ---创造一个带有Runnable的Message,并sendMessageDelay(message,0)出去

postAtTime()   --- 创造一个带有Runnable的Message,并执行sendMessageAtTime()

postDelayed()  ---创造一个带有Runnable的Message,并执行sendMessageDelayed()

sendMessage()  ---将消息加到MessageQueue中

sendEmptyMessage()    ---发送一个空消息到messageQueue中

sendMessageAtTime()   ---在某个特定的时间,将消息加入MessageQueue中

sendMessageDelayed()  ---推迟时间,将消息加入到MessageQueue中

转载于:https://www.cnblogs.com/xiongbo753/p/9815153.html

你可能感兴趣的文章
升级centos6.6至centos7.2.1511
查看>>
postgresql创建表
查看>>
springMVC参数传递(三)
查看>>
说说Keepalived的脑裂
查看>>
linux 学习总结
查看>>
CentOS6.4下安装xampp
查看>>
shell语法
查看>>
从某次测试过程中,得到的MySQL性能优化的建议,和定位问题的方法
查看>>
JS三大对象中常用方法集锦
查看>>
词汇与分词技术
查看>>
SVN安装部署方案(一)
查看>>
我的友情链接
查看>>
CentOS7.4下建立DNS主从服务器(二)
查看>>
浅析 Linux 初始化 init 系统
查看>>
RMAN的"rman: can't open target"错误
查看>>
我的友情链接
查看>>
hadoop hive 安装
查看>>
Linux任务高度进程crond的使用
查看>>
20130710--代码技巧
查看>>
APACHE工作原理详解
查看>>