Looper: 循环处理消息队列
//用法:
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
}
//第一步,在TLS上创建一个Looper
//TLS,thread local storage线程本地存储空间,也就是这个存储空间是和线程相关的,一个线程内有一个内部存储空间
public static final void prepare() {
if (sThreadLocal.get() != null) {
throw new RuntimeException("Only one Looper may be created per thread");
}
sThreadLocal.set(new Looper());
}
/**
* Run the message queue in this thread. Be sure to call
* {@link #quit()} to end the loop.
*/
// 从当前本地线程中得到loop对象,从中取出message队列,遍历其中的message并发送到其target
// 注意msg.target.dispatchMessage(msg);
public static final void loop() {
Looper me = myLooper();
MessageQueue queue = me.mQueue;
while (true) {
Message msg = queue.next(); // might block
//if (!me.mRun) {
// break;
//}
if (msg != null) {
if (msg.target == null) {
// No target is a magic identifier for the quit message.
return;
}
if (me.mLogging!= null) me.mLogging.println(
">>>>> Dispatching to " + msg.target + " "
+ msg.callback + ": " + msg.what
);
msg.target.dispatchMessage(msg);
if (me.mLogging!= null) me.mLogging.println(
"<<<<< Finished to " + msg.target + " "
+ msg.callback);
msg.recycle();
}
}
}
// 再看看Handler中的该方法
/**
* Subclasses must implement this to receive messages.
*/
public void handleMessage(Message msg) {
}
/**
* Handle system messages here.
*/
public void dispatchMessage(Message msg) {
if (msg.callback != null) {
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
}
}
参考:http://blog.csdn.net/Innost/article/details/6055793
分享到:
相关推荐
在Android开发中,Handler、Looper和Message是实现线程间通信的重要组件,它们共同构成了Android的消息处理机制。本文将深入探讨“Android Handler线程间的调度”这一主题,并结合提供的资源——MessageProject,来...
### Android中线程间通信详解 #### 一、引言 在Android开发中,线程间的通信是一项重要的技术。为了确保应用的响应性和流畅性,开发者必须了解如何正确地管理和同步多个线程之间的数据交换。本文将深入探讨Android...
Handler机制就是Android系统提供的一种高效、灵活的线程间通信方式。本篇将深入探讨如何利用Handler在线程之间传递代码,以实现异步处理和保持UI线程的流畅。 首先,理解Handler的基本原理。Handler是Android中的一...
总之,自定义Handler和Looper是Android开发中实现线程间通信的重要手段。理解并熟练掌握这一机制,对于优化应用性能和提升用户体验具有重要意义。通过实际的项目实践,如"HandlerLooperDemo",开发者可以更深入地...
【Android Handler机制】是Android应用程序中用于线程间通信的核心组件,它与Looper和Message紧密配合,实现消息的发送、处理以及线程间的同步。在Android应用开发中,尤其是涉及到UI更新时,Handler机制显得尤为...
本文将详细介绍Android中用于线程间通信的主要机制——Handler和Looper,并通过实例演示如何在实际开发中运用这些技术。 #### 二、线程间通信的概念 **1. Looper与消息队列** 在Android中,每个线程都有自己的...
在"android 线程间通信显示同步时间"的例子中,我们可以选择使用Handler或LiveData。例如,创建一个后台线程,周期性获取系统时间,然后通过Handler发送一个包含新时间的Message到主线程。主线程的Handler接收到...
在Android系统中,线程间通信(Inter-Thread Communication,简称ITC)是应用程序开发中的重要环节,尤其在处理耗时操作或者优化UI性能时显得至关重要。线程间通信允许不同线程之间交换数据和执行任务,以确保主线程...
总结起来,Android的Handler消息处理机制是实现线程间通信和异步任务处理的核心工具,它确保了对UI的修改总是在正确的线程(主线程)中进行,避免了因不恰当的线程操作导致的应用程序崩溃。理解和熟练掌握这一机制,...
Android线程间通信的主要方式有:Handler、Looper、Message以及BroadcastReceiver等。其中,Handler-Looper-Message机制是最常用的一种,它允许我们在不同线程之间发送和处理消息。 1. Handler(处理器) Handler是...
通过分析这个`demo`,开发者可以更好地理解Android中的多线程通信机制,并学会在自己的项目中正确、有效地使用`Handler`、`Looper`进行线程间通信。这将有助于提高程序的响应性和用户体验,避免因UI操作不在主线程...
在Android应用开发中,Handler、Looper和Message是实现线程间通信的重要机制。这个"Android_Handler的线程队列Demo"旨在演示如何有效地利用Handler来处理线程间的通信,特别是主线程(UI线程)与工作线程之间的交互...
五、线程间通信 Handler的主要作用是实现线程间的通信。例如,在工作线程中执行耗时操作,完成后通过Handler向主线程发送消息,主线程接收到消息后更新UI。这样,既保证了UI的流畅性,又实现了后台任务的执行。 六...
本文将深入探讨Android主线程(也称为UI线程)、子线程以及它们之间的通信方式,结合"android主线程、子线程及线程间通信方式测试app"的描述,我们将详细分析相关知识点。 1. **Android主线程**:主线程是应用程序...
在Android开发中,Handler、Looper和Message是实现线程间通信的重要组件,它们共同构建了Android的消息处理机制。本文将详细分析Android Handler消息处理的顺序,以及如何利用这些组件进行异步操作。 首先,理解...
在Android开发中,Handler是实现线程间通信(ITC,Inter-Thread Communication)的关键机制。Handler、Looper和MessageQueue三者共同构建了一个消息传递系统,使得不同线程之间能够安全地交换数据和执行任务。这篇...
在Android系统中,Handler、Looper和Message构成了一个用于线程间通信的重要机制。这个机制使得UI线程可以处理来自其他线程的消息,从而避免了直接在非UI线程操作UI组件,防止应用出现ANR(Application Not ...
在Android应用开发中,Handler是实现线程间通信的关键组件,尤其在处理UI更新和异步任务时。本文将深入探讨Android Handler机制的实例,帮助初学者理解并掌握这一核心概念。 首先,我们要理解Android应用的基本运行...