Handler事件分发机制

本文详细解析了Android中的Handler事件分发机制,包括Handler的相关类、发送Message的函数、消息的分发及处理流程。同时,文章还探讨了Handler设置时间的问题,指出在设置时间时应使用SystemClock.uptimeMillis()而非System.currentTimeMillis(),因为后者可能会导致时间间隔不准确,影响Message的执行。
摘要由CSDN通过智能技术生成

Handler基础

Handler事件分发相关类

1.Message:消息对象,可通过Bundle存储数据及Runable存储业务逻辑。
   Message的属性:
      long when;
        Handler target;
        Runnable callback;
2.Handler:发送,分发及处理Message。
   Handler的属性:
        MessageQueue mQueue;
        Looper mLooper;
        Callback mCallback;
3.MessageQueue:消息队列,保存Handler发送的消息。
4.Looper:循环从MessageQueue中读取消息交给Handler分发。
   Looper的属性:
        MessageQueue mQueue;
        Thread mThread;
5.ThreadLocal:保证每一个Thread中只有一个Looper。

发送Message相关函数

1.post(Runnable r):发送一个存储了业务逻辑的Message
2.postAtTime(Runnable r, long uptimeMillis):可设置“精确”时间,在你设置的这个时间之前,不会被MessageQueue next()出来给Looper
3.postAtTime(Runnable r, Object token, long uptimeMillis)
4.postDelayed(Runnable r, long delayMillis):发送延迟消息,内部调用是这样的sendMessageAtTime(msg, SystemClock.uptimeMillis() + delayMillis)
5.postAtFrontOfQueue(Runnable r):发送一个排在队列之前的Message,也就是说不管发送这个Message之前MessageQueue中有多少Message,下一个被处理的就是现在发送的消息。
6.sendMessage(Message msg)
7.sendEmptyMessage(int what)
8.sendEmptyMessageDelayed(int what, long delayMillis)
9.sendEmptyMessageAtTime(int what, long uptimeMillis)
10.sendMessageDelayed(Message msg, long delayMillis)
11.sendMessageAtTime(Message msg, long uptimeMillis)
12.sendMessageAtFrontOfQueue(Message msg)

Handler消息机制分发及处理流程分析

建立Handler消息机制

在Looper源码注释中有这么一段告诉了我们在普通Thread中怎么去使用Looper来建立Handler消息机制,我加入了Callback回调,以便下面的处理流程分析

class LooperThread extends Thread {
    public Handler mHandler;
    public void run() {
        Looper.prepare</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值