Handler 在工作线程通过sendMessage()向 MessageQueue 中推送 Message,而主线程 Looper 循环得到 Message 后,即可得到发出该 Message 的 Handler 对象(Handler 发送消息时将自身引用赋值给message.target),再通过 Handler 对象的dispatchMessage()和handleMessage()方法处理相应的任务。这样我们就可以通过 Handler 同时完成了...
默认情况下开启一个新的线程是不会开启消息循环的(主线程除外),而在子线程中如果想要new Handler()的话需要先调用Looper.prepare(),然后通过Looper.loop()让Looper开始工作,从消息队列里面取消息,将消息发送给对应的处理者(handler),让messageQueue中的消息循环起来。
【消息处理过程】:Looper循环中,从MessageQueue取出消息。没有消息时进入阻塞状态 1.获取当前线程的Looper (ThreadLocal用来存储Looper) 2.无限循环,取出消息队列的消息 【没消息时,线程阻塞】 3.调用Message#mHandler#dispatchMessage 3.1 msg.callback //Handler#post(..) 3.2 mCallback.handleMessage(msg) //Handl...
Handler 与 Message、MessageQueue、Looper 一起构成了 Android 的消息机制,Android 系统通过大量的消息来与用户进行交互,View 的绘制、点击事件、Activity 的生命周期回调等都作为消息由主线程的 Handler 来处理。 Handler 在消息机制中的作用是:发送和处理消息。 Handler 还有另一个重要的作用,跨线程通信。最常见的就...
Looper 即消息循环器,是消息处理机制的核心,它可以将一个普通线程转换为一个 Looper 线程。所谓的 Looper 线程就是一个不断循环的线程,线程不断循环的从 MessageQueue 中获取 Message,交给相应的 Handler 处理任务。在 Looper 类的注释介绍中,我们可以得知通过两个静态方法 Looper.prepare() 和 Looper.loop() 就可...
handler扮演了往MessageQueue上添加消息和处理消息的角色(只处理由自己发出的消息),即通知MessageQueue它要执行一个任务(sendMessage),并在loop到自己的时候执行该任务(handleMessage),整个过程是异步的。handler创建时会关联一个looper,默认的构造方法将关联当前线程的looper,不过这也是可以set的。默认的构造方法:...
因为Android UI线程是线程不安全的,在子线程中更新UI会直接程序崩溃,另外当UI线程需要执行一个比较耗时的操作的话(IO操作,网络通信等),若是执行时间超过5s,程序会直接ANR,为了解决上述问题,可以使用异步消息处理机制Handler,Handler有两大用处: (1) . 在未来的某个时间点执行调度Message或者Runnable对象 ...
Handler负责消息的发送和处理 Handler源码链接 关于Handler需要说的是: Handler使你能够发送并处理Message和Runnable对象; 当你创建了一个Handler实例,它就被绑定给创建它的线程,只能绑定给这1个线程,这也就意味着只关联了1个MessageQueue,此后,就可以发送messages和runnables给所关联的message queue,而当这些消息出队时...
创建一个新Activity,包含4个button按钮,分别是button1、button2、button3和button4,设置它们的onClick点击事件,本例中每个button在响应点击事件中实现不同方式的Handler消息处理机制。 button1:完成主线程中传递Handler消息处理机制。 button2:在子线程中完成Handler消息处理机制。
Handler - 消息的真正处理者, 具备获取消息、发送消息、处理消息、移除消息等功能; Message -代表一个行为what或者一串动作Runnable的消息,每一个消息在加入消息队列时,都有明确的目标Handler; MessageQueue - 以队列的形式对外提供插入和删除的工作, 其内部结构是以双向链表的形式存储消息的; ...