Handler 学习笔记

线程:是系统进行运算调度的最小单位
进程:是线程的容器,是系统进行资源分配和调度的基本单位,一个进程可以并发多个线程
在Android中,系统启动时默认创建主线程,但是主线程(UI线程)不能进行耗时操作,否则android程序会无响应,所以当有耗时等操作的时候就可以创建一个子线程。

一、Android中的线程机制Handler
在Android开发中切换线程常用handler.postXXX()或者handler.sendXXX(),
使用起来非常简单方便,让我来了解一下handler背后的故事


image.png

1、handler 发送的最终都是一个Message对象,send和post的方法,最终都会调用enqueueMessage(),将Message对象送入MessageQueue队列。
2、MessageQueue实际是一个生产者消费者模型。
3、MessageQueue 实际是在Looper中创建的,一个线程至多只能创建一个Looper(只能通过Looper.prepare()创建)。
4、Looper中有一个loop()方法,该方法中有一个死循环,在这个循环中不断从MessageQueue中取出Message并执行msg.target.dispatchMessage(msg);(target为msg所在的handler)

//Looper
public static void loop() {
    //...
    for (; ; ) {
        // 不断从 MessageQueue 获取 消息
        Message msg = queue.next();
        if (msg == null) {
            // No message indicates that the message queue is quitting.
            return;
        }
        //...
    }
}

你可能感兴趣的:(Handler 学习笔记)