资讯专栏INFORMATION COLUMN

Android Handler、Message、MessageQueue和Looper官方说明

enali / 784人阅读

摘要:官方说明官方文档允许您发送和处理与线程的关联的和对象。同样的,在创建的线程中通过或方法来将消息添加到消息队列,并在适当的时候处理。官方说明官方文档类用于运行线程的消息循环。

Handler官方说明

官方API文档:https://developer.android.google.cn/reference/android/os/Handler

Handler允许您发送和处理与线程的MessageQueue关联的Message和Runnable对象。每个Handler实例都与单个线程和该线程的消息队列相关联。当创建一个新的Handler对象时,它将被绑定到创建他的线程和线程的消息队列,然后Handler将消息传递并添加到消息队列,并在消息队列中处理并执行它们。

Handler有两个主要的功能:

  • 安排消息或Runnable在某个主线程中某个地方执行;
  • 安排一个动作在不同的线程中执行。

调度消息的方法包括有:

 post(Runnable r)  将Runnable对象r添加到消息队列中
 postAtTime(Runnable r, long uptimeMillis)  将Runnable对象r添加到消息队列中,并在uptimeMillis设置的时间执行     
 postDelayed(Runnable r, long delayMillis)  将Runnable对象r添加到消息队列中,并延时delayMillis后执行
 sendEmptyMessage(int what)  发送空消息,只包含what属性
 sendMessage(Message msg)  将消息添加到正在等待的消息的队列末尾
 sendMessageAtTime(Message msg, long uptimeMillis)       在指定的时间uptimeMillis将消息添加到正在等待的消息的队列末尾
 sendMessageDelayed(Message, long)  在延时delayMillis后将消息添加到正在等待的消息的队列末尾

 

 

 

 

 

 

post方法允许将Runnable对象添加到消息队列;而sendMessage方法则将Message对象添回到消息列表,这需要你创建继承Handler的子类,并实现handlerMessage方法。无论是post还是send,当消息队列准备好后你都可以马上处理,也可以在指定时间或延时后处理。

当应用程序进程被创建后,主线程会运行一个消息队列,该消息队列负责管理顶层应用程序对象(Activity,Broadcast receiver等)以及它们创建的任何窗口。您可以创建自己的线程,并通过Handler与主应用程序线程进行通信。同样的,在创建的线程中通过post或sendMessage方法来将消息添加到消息队列,并在适当的时候处理。

 

Message官方说明

官方API文档:https://developer.android.google.cn/reference/android/os/Message

定义一条可以发送给Handler的消息,消息中包含消息的描述、任意的消息数据对象。Message包含两个int类型和一个Object类型扩展用于装载消息数据。虽然Message的构造方法是public的,但获取消息对象的方法最好是调用Message.obtain()或Handler.obtainMessage()方法,这两个方法会从消息对象池中获取已有的消息对象。

 

MessageQueue官方说明

官方API文档:https://developer.android.google.cn/reference/android/os/MessageQueue

MessageQueue管理着一个由Looper发送的消息列表,消息不直接添加到MessageQueue,而是通过与Looper关联的Handler对象添加。你可以通过Looper.myQueue()方法获取此线程的MessageQueue对象。

 

Looper官方说明

官方API文档:https://developer.android.google.cn/reference/android/os/Looper

Looper类用于运行线程的消息循环。默认情况下,线程是没有关联消息循环的,当创建线程时,需要调用Looper.prepare()方法初始化消息循环,然后通过loop()循环处理消息,直至循环被停止。大多数消息循环的交互是通过Handler类实现的。

这是一个Looper线程实现的典型例子,在prepare()和loop()之间创建一个Handler来与Looper进行通信。

class LooperThread extends Thread {
    public Handler mHandler;

    public void run() {
            Looper.prepare();

            mHandler = new Handler() {
            public void handleMessage(Message msg) {
                // process incoming messages here
            }
        };

        Looper.loop();
    }
}

 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/3098.html

相关文章

  • Android_Message_Handler_消息处理机制总结笔记

    摘要:比如处理用户交互的线程,它等待并执行用户的点击滑动等等操作事件,也执行由系统触发的广播等事件,称之为主线程,也叫线程。源码链接源码链接源码链接源码链接版权声明消息处理机制总结笔记由在年月日写作。 一次性线程和无限循环线程 普通线程是一次性的,执行结束后也就退出了(这种说法可能不严谨,但为了下文描述方便)。但某些情况下需要无限循环、不退出的线程。比如处理用户交互的线程,它等待并执行用户的...

    EscapedDog 评论0 收藏0
  • Android消息机制

    摘要:创建和,本来该线程也是一个普通的线程,但是创建了以及结合后文的方法,使这个线程成为了线程读者可以简单的理解为拥有的线程,而这个就是消息处理机制的一部分。不过这不影响我们分析的消息机制的整个流程。 该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索》以及《深入理解Android ...

    wall2flower 评论0 收藏0
  • Android 复盘——帮你彻底了解消息机制

    摘要:什么是消息机制说到消息机制,作为一名开发者一定先想到的是。但是,在主线程中创建的时候,我们并没有看到的执行,这是因为在线程,即的创建过程中,已经被创建好了。将新消息插入到之前,头消息之后。 1. 什么是消息机制 说到消息机制,作为一名 Android 开发者一定先想到的是 Handler。Handler 就是 Android 消息机制的上层接口,我们可用通过 Handler 轻松的在不...

    ruicbAndroid 评论0 收藏0
  • Android 复盘——帮你彻底了解消息机制

    摘要:什么是消息机制说到消息机制,作为一名开发者一定先想到的是。但是,在主线程中创建的时候,我们并没有看到的执行,这是因为在线程,即的创建过程中,已经被创建好了。将新消息插入到之前,头消息之后。 1. 什么是消息机制 说到消息机制,作为一名 Android 开发者一定先想到的是 Handler。Handler 就是 Android 消息机制的上层接口,我们可用通过 Handler 轻松的在不...

    Baoyuan 评论0 收藏0
  • Android之消息机制问题

    摘要:通过向消息池发送各种消息事件通过处理相应的消息事件。消息泵通过不断地从中抽取,按分发机制将消息分发给目标处理者。也称之为消息队列,特点是先进先出,底层实现是单链表数据结构。目录介绍 6.0.0.1 谈谈消息机制Hander作用?有哪些要素?流程是怎样的?简单说一下你的看法! 6.0.0.2 为什么一个线程只有一个Looper、只有一个MessageQueue,可以有多个Handler? 6...

    番茄西红柿 评论0 收藏0

发表评论

0条评论

enali

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<