【Android】 Thread-Handler、Message、Message Queue、Looper,子线程更新UI

首先来了解一下:UI线程,Handler,Message,Message Queue,Looper。

1. UI线程是程序主线程,界面的更新必须由主线程执行,如果执行一个超过5秒的任务程序将强制关闭并弹出dailog窗口显示强制关闭。

2. Handler是消息处理者,负责消息的发送与接收并处理,通过sendMessage(Message)函数发送消息,通过handleMessage(Message)函数接收消息并处理。

3. Message消息对象,此对象有 4个成员变量:arg1和arg2是整型, what用户定义的消息代码, obj接收任意类型的对象, 子线程通过handle.sendMessage(msg)函数发送消息对象。

4. Message Queue消息队列,用来存放通过Handler发布的消息,按照先进先出执行,每个message queue都会有一个对应的Handler。

5. Looper是每条线程里的Message Queue的管理者,Android会自动替主线程(UI线程)建立Message Queue,但在子线程里并没有建立Message Queue。Looper会死循环取出Message Queue的非Null Message传递给Handler并设置此Message为Null。

(1). 当Handler对象的构造函数的参数为空,则为当前所在线程的Looper;

(2). Looper.getMainLooper()得到的是主线程的Looper对象,Looper.myLooper()得到的是当前线程的Looper对象。

Android在子线程更新UI的7种方法https://blog.csdn.net/qq_26287435/article/details/65448951

Message8种构造方法https://blog.csdn.net/dimudan2015/article/details/63250864

子线程创建消息队列并死循环监听提取消息

class LooperThread extends Thread {

    public Handler mHandler;

    public void run() {
        Looper.prepare(); // 创建本线程的Looper并创建一个MessageQueue
        mHandler = new Handler() {
            public void handleMessage(Message msg) {
                // process incoming messages here
            }
        };
        Looper.loop(); // 开始运行Looper,监听Message Queue
    }
}
发布了13 篇原创文章 · 获赞 15 · 访问量 940

猜你喜欢

转载自blog.csdn.net/qq_42470947/article/details/103756763
今日推荐