zoukankan      html  css  js  c++  java
  • Android学习笔记(38):Handler消息传递处理机制

    先说为什么须要Handler

    Android的主线程又叫UI线程,用于处理与UI相关的时间。Android仅仅同意在主线程中改动UI组件,当我们在其它线程中须要改动UI界面时。就须要发送消息到主线程,再由主线程来处理UI的改动事件。

    UI线程中运行耗时操作或网络操作,否则会抛出ANR (“Application Not Responding”)异常或NetworkOnMainThreadExceptionwill异常。

    在这些时候。我们用Handler来进行消息的传递和处理。

    以下来介绍Handler类:

    1)两个主要功能:

    1.在非主线程中发送消息。

    2.在主线程中获取、处理消息。

     

    (2)一起工作的几个组件

    MessageHandler接收和处理的消息对象

    Looper:每一个线程有一个Looper,负责管理MessageQueue

    它的loop方法不断从MessageQueue中抽取Message交给Handler处理。

    MessageQueue:由Looper负责管理的消息队列,用FIFO的方式管理Message

    Looper的构造器中会创建一个MessageQueue对象。

     

    (3)Handler用于发送、处理Message的方法:

    void handleMessage(Message msg):处理消息的方法,须要自己重写。

    boolean hasMessages(int what, Object object):检查消息队列中是否包括what属性为指定值且object属性为指定对象的消息。

    boolean hasMessages(int what):检查消息队列中是否包括what属性为指定值的消息。

    Message obtainMessage():获取消息。

    boolean sendEmptyMessage(int what):发送空消息。

    boolean sendEmptyMessageAtTime(int what, long uptimeMillis):在指定的时间发送空消息。

    boolean sendEmptyMessageDelayed(int what, long delayMillis):一段时间后发送空消息。

    boolean sendMessage(Message msg):发送消息。

    boolean sendMessageAtFrontOfQueue(Message msg):消息增加到消息队列的最前面。

    boolean sendMessageAtTime(Message msg, long uptimeMillis):在指定时间发送消息。

    boolean sendMessageDelayed(Message msg, long delayMillis):一段时间后发送消息。

     

    (4)Handler的消息处理机制:

    开发人员须要重写Handler类的消息处理方法。但新启动的线程发送消息时,消息会发送到与之关联的MessageQueueHandler不断从MessageQueue中获取并处理消息。在此时调用消息处理方法。

     

    (5)利用Handler处理其它线程中须要作出的UI改动:

    Android系统在启动的时候会为Activity创建一个消息队列和消息循环(Looper)。为了处理非主线程中的UI处理要求,我们首先在新线程中发送消息,然后在主线程中重写HandlerhandleMessage()方法实现UI改动的要求。

  • 相关阅读:
    「SOL」开关(LOJ)
    「SOL」星际迷航(LOJ)
    「NOTE」概率生成函数
    「SOL」谢特(LOJ)
    「SOL」重建计划(BZOJ)
    「SOL」Tug of War(洛谷)
    「SOL」同余方程(LOJ)
    「SOL」Bad Cryptography(Codeforces)
    「SOL」小A与两位神仙(洛谷)
    「SOL」Social Distance(AtCoder)
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7380186.html
Copyright © 2011-2022 走看看