(1) Looper类别用来为一个线程开启一个消息循环。默认情况下Android中新诞生的线程是没有开启消息循环的。(主线程除外,主线程系统会自动为其创建Looper对象,开启消息循环)
Looper对象通过MessageQueue来存放消息和事件。一个线程只能有一个Looper,对应一个MessageQueue。
(2) 通常是通过Handler对象来与Looper交互的。Handler可看做是Looper的一个接口,用来向指定的Looper发送消息及定义处理方法。
默认情况下Handler会与其被定义时所在线程的Looper绑定,比如,在主线程中定义,其是与主线程的Looper绑定。
mainHandler = new Handler() 等价于new Handler(Looper.myLooper()).
Looper.myLooper():Return the Looper object associated with the current thread 获取当前进程的looper对象。
还有一个类似的 Looper.getMainLooper() 用于获取主线程的Looper对象。
(3) 在非主线程中直接new Handler() 会报如下的错误:
E/AndroidRuntime( 6173): Uncaught handler: thread Thread-8 exiting due to uncaught exception
E/AndroidRuntime( 6173): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
原因是非主线程中默认没有创建Looper对象,需要先调用Looper.prepare()启用Looper。
(4) Looper.loop(); 让Looper开始工作,从消息队列里取消息,处理消息。
注意:写在Looper.loop()之后的代码不会被执行,这个函数内部应该是一个循环,当调用mHandler.getLooper().quit()后,loop才会中止,其后的代码才能得以运行。
(5) 基于以上知识,可实现主线程给子线程(非主线程)发送消息。
把下面例子中的mHandler声明成类成员,在主线程通过mHandler发送消息即可。
(6) Android官方文档中Looper的介绍:
Class
used to run a message loop for a thread. Threads by default do not have
a message loop associated with them; to create one, call
prepare()
in the thread that is to run the loop, and then
loop()
to have it process messages until the loop is stopped.
Most interaction with a message loop is through the
Handler
class.
This is a typical example of the implementation of a Looper thread, using the separation of
prepare()
and
loop()
to create an initial Handler to communicate with the 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();
}
}
分享到:
相关推荐
Looper用于封装了android线程中的消息循环,默认情况下一个线程是不存在消息循环(message loop)的,需要调用Looper.prepare()来给线程创建一个消息循环,调用Looper.loop()来使消息循环起作用,使用Looper....
Android Looper 使用介绍 Android Looper 是 Android 操作系统中的一种机制,用于在单线程中创建消息循环,以便实现线程之间的通信和消息处理。Looper 对象通过 MessageQueue 来存放消息和事件,每个线程只能有一...
在Android系统中,消息处理机制是应用程序中线程间通信的一种关键方式,它涉及到Handler、Message和Looper等组件。本文将深入探讨“消息循环”Looper及其源码解析,帮助开发者更好地理解和应用这一机制。 首先,...
在Android应用开发中,Handler、Thread和Looper是三个至关重要的组件,它们共同构成了Android线程间通信的基础架构。本文将详细解析这三个概念及其相互关系,旨在帮助开发者理解它们的工作原理和实际应用场景。 ...
在Android系统中,消息机制是实现线程间通信的关键组件,而`Looper`与`MessageQueue`则是这一机制的核心部分。本文将深入探讨`Looper`的使用及其在管理`MessageQueue`中的作用。 首先,`Looper`是Android系统中一个...
在Android系统中,Looper是消息循环机制的核心组件,它与Handler和Message紧密配合,使得应用程序能够实现线程间的通信。本文将深入探讨Looper的工作原理、使用场景以及如何在实际开发中应用。 首先,理解Looper的...
在Android开发中,`Handler`、`AsyncTask`和`Looper`是三个关键组件,用于在后台线程和主线(UI)线程之间进行通信,处理异步任务和更新用户界面。下面将详细阐述这三个组件的工作原理以及如何使用它们。 **Handler...
"Looper 后台管理框架"是一款基于Bootstrap设计的高效、流行的后台管理系统模板。这个框架专为简化和加速Web应用程序的后台界面开发而设计,它的核心特点是简洁的界面和易用的交互,使得开发者能够快速构建出专业...
【Android 线程间通信:Handler、Looper 和 MessageQueue 深度解析】 在 Android 应用开发中,为了保证界面的流畅性,我们通常需要将耗时操作放在非 UI 线程中执行,然后通过某种机制将结果传递回 UI 线程进行界面...
Handler、Looper和Message是Android系统提供的一套用于在不同线程之间传递消息和进行同步的关键组件。本文将深入探讨如何自定义Handler、Looper来实现线程间的通信。 首先,我们了解下Handler的基本原理。Handler是...
Handler和Looper详解 Handler和Looper是Android系统中两个非常重要的组件,它们之间相互关联,共同实现了Android系统中的消息处理机制。在本文中,我们将对Handler和Looper进行详细的解释,并探讨它们在Android系统...
自己写的关于Android的Looper的示例程序。在主线程即UI线程外,新建一个Looper线程,并用Messenger和Handler来处理message和posted runnable。程序中,在负线程中默认加了一个3s的线程等来,来帮助理解sent message...
《Looper对象的角色与应用解析》 在Android系统中,Looper对象扮演着至关重要的角色,它是消息处理机制的核心组件,使得Android应用能够实现异步消息的处理。本文将深入探讨Looper的工作原理及其在实际开发中的应用...
《Looper对象的角色与应用解析——以Demo 5为例》 在Android系统中,Looper对象扮演着消息循环的重要角色,它是Android消息处理机制的核心组件之一。本文将深入探讨Looper的工作原理,以及如何在实际开发中利用它来...
### Message,MessageQueue,Looper,Handler详解 #### 一、几个关键概念 ##### 1、MessageQueue:消息队列 MessageQueue是一种数据结构,顾名思义,它充当了一个消息队列的角色,用来存放各种消息对象。每一个线程...
2. **无限滚动(Looper)概念**: 无限滚动是一种网页设计技术,它允许用户在浏览内容时,当页面接近底部时自动加载更多内容,而不是通过分页链接。这种设计提高了用户体验,尤其是在内容丰富的网站上,如社交媒体...
这一机制主要涉及到两个关键组件:`Looper`和`Handler`。下面我们将深入探讨这两个组件的工作原理。 首先,`Looper`是Android消息循环的核心。它的主要任务是不断地从`MessageQueue`中取出`Message`对象,并将其...
Handler获取当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理. 简单定义: 1、Message Queue(消息队列): 用来存放通过Handler发布的消息,通常...
在Android开发中,Handler、Looper和MessageQueue是用于实现线程间通信的关键组件,它们共同构建了一个消息处理机制。理解这三个概念以及它们之间的关系对于优化应用程序的性能和响应性至关重要。 Handler(处理器...
Looper Count测试Looper个数工具apk