android消息处理机制

消息机制的理解

说到消息处理,我们首先想到的就是Hanlder,他也就是我们常说的Android异步消息处理机制。使用它,我们可以很轻易的在主线程和子线程之间进行切换。所以,也常用来更新UI。(因为UI只能在主线程里面进行更改)

hanlder的常用方法

Thread MyThread = new Thread(new Runnable() {
    @Override
    public void run() {
        //耗时间的操作
        ...
        Message msg = new Message();
        msg.what = 1;
        handler.sendMessage(msg);
    }
}).start();

public Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        //更新UI的操作
        ...
    }
};

我们可以在子线程中,进行耗时间的操作,等完成的时候,我们可以在界面中予以体现出来。
常用到的,也就是handler和Message,其实内部还有一些东西。下面我们就一起了解一下。

消息机制的模型

消息处理的4个部分:Message,Handler,MessageQueue,Looper

Message

就是信息的载体。线程之间的消息传递,少量信息,用于不同的线程之间的交换数据。就是信息的载体。可以传递的信息有int(what arg1 arg2) Object (obj)

Handler

事件的发出者和处理者,是消息机制的辅助处理类。发出信息:sendMessage() 处理信息:handleMessage()

MessageQueue

是一个单链表的数据结构,不是队列,实行先进先出原则,主要用于存放所有通过Handler.sendemessage发送的消息。即向消息池投递消息(MessageQueue.enqueueMessage)和取走消息池的消息(MessageQueue.next)。会一直存在消息队列中,等待被处理。每个线程只有一个MessageQueue对象。

Looper

MessageQueue的管家。不断循环(Looper.loop),从中取出信息到handleMessage()中,即将消息交给处理者Handler处理。

消息处理机制结构

消息机制运行结构图

图片来源于 Android事件分发机制

如果文章对您有用请随意打赏,谢谢支持!