定义类的代码:
public class HandlerThread extends Thread {
public void run() {
mTid = Process.myTid();
Looper.prepare();
synchronized (this) {
mLooper = Looper.myLooper();
notifyAll();
}
Process.setThreadPriority(mPriority);
onLooperPrepared();
Looper.loop();
mTid = -1;
}
/**
* This method returns the Looper associated with this thread. If this thread not been started
* or for any reason is isAlive() returns false, this method will return null. If this thread
* has been started, this method will block until the looper has been initialized.
* @return The looper.
*/
public Looper getLooper() {
if (!isAlive()) {
return null;
}
// If the thread has been started, wait until the looper has been created.
synchronized (this) {
while (isAlive() && mLooper == null) {
try {
wait();
} catch (InterruptedException e) {
}
}
}
return mLooper;
}
HandlerThread继承于Thread,是一个线程类。它实现了run方法,我们可以直接调用start方法来运行这个线程。 和我们使用线程的传统方式不一样的是:传统方法中,我们一般是在run方法中做我们实际想做的事情。而HandlerThread已经实现了run方法,不需要我们实现,它在run方法里面启动了一个looper循环,使得HandlerThread具有了处理消息的能力,同时提供了安全的getLooper方法(之所以安全,是因为getLooper使用了wait/notify机制),getLooper()方法使得app可以创建指定Looper的Handler,通过这个Handler我们就可以使用发送消息的方法通知线程做指定的事情。
使用例子如下:
Thread mThread = new HandlerThread("demo", Process.THREAD_PRIORITY_BACKGROUND);
mThread.start() //启动线程,这时run方法会为这个Thread创建消息循环,消息循环是一个死循环,所以这个Thread会一直处于运行状态
MyHandler mHandler = new MyHandler( mThread.getLooper( ) ) //使用mThread的looper来实例化一个自定义的Handler
这样我们就得到了一个mHandler的实例,使用mHandler.sendMessage(msg) 就可以让mThread 做指定的事情了(指定的事情是通过msg来区分的),而指定的事情是在 MyHandler的handlerMessage中实现的。
实例代码如下(这个大家应该很熟悉):
class MyHandler extends Handler
{
@Override
public void handlerMessage(Message msg)
{
//在这里实现线程需要做的事情(传统的线程使用方式中,我们是在run方法里面实现线程需要做的事情)
}
}
总结:
HandlerThread和传统Thread不同,它有一个消息循环,这个消息循环由run方法来承担,run方法不做任何实际需求的事情,这样使得线程的可控性得到了增强,我们可以通过发送不同的消息让线程做不同的事情。
分享到:
相关推荐
理解并熟练使用`HandlerThread`对于Android开发者来说至关重要,它可以帮助我们高效地处理后台任务,提高应用的性能和用户体验。通过合理地运用`HandlerThread`,我们可以构建更加稳定、高效的Android应用程序。
3. **HandlerThread**: 在Android系统中,主线程负责处理用户交互,不能进行耗时操作,否则会导致界面卡顿。HandlerThread是一种轻量级的线程,主要用于后台任务的执行。它内部维护了一个Looper,可以接收并处理...
【HandlerThread】是一种在...在Android应用开发中,理解和合理使用HandlerThread是提升应用性能和用户体验的关键。通过以上知识点,我们可以有效地在后台线程中处理任务,保持UI线程的流畅,实现应用的高效运行。
HandlerThread在Android开发中扮演着重要的角色,它是一个预先配置好的线程,具有内置的Looper,使得开发者能够在子线程中轻松地处理消息和执行任务。理解HandlerThread的工作原理有助于优化应用的多线程处理,避免...
HandlerThread是Android系统提供的一种线程管理工具,它在Android应用程序开发中扮演着重要的角色,尤其是在处理长时间运行的任务和保持...理解并熟练运用HandlerThread,对于编写高效、健壮的Android应用至关重要。
HandlerThread是Android提供的一个线程类,它创建了一个 Looper 对象,使得我们可以在子线程中通过Handler发送和处理消息。 下面我们将详细探讨如何使用HandlerThread实现类似AsyncTask的行为,并提供相关的实例...
在Android开发中,Looper、Handler和HandlerThread是三个非常重要的组件,它们构成了Android消息处理机制的基础,用于在主线程中处理来自其他线程的消息。理解并熟练运用这三个组件,对于编写高效、响应迅速的...
在Android开发中,`HandlerThread` 是一个非常重要的组件,特别是在处理异步任务和线程同步方面。`HandlerThread` 是一个内置了消息队列和Looper的线程,它的主要作用是提供一个稳定的、可控制的后台执行环境,用于...
本文将深入探讨如何使用`HandlerThread`在Android中创建线程,以及为什么相较于直接使用`Thread`类,`HandlerThread`更具有优势。 首先,让我们理解一下`Thread`类的基本使用。通常,我们可以通过创建一个新的匿名...
1. **理解HandlerThread**:HandlerThread是一个包含Looper的线程,它的核心在于创建了一个消息循环,允许我们通过Message对象在不同的线程之间传递数据和执行任务。在HandlerThread的run()方法中,它初始化了Looper...
深入理解Android 卷1 不是扫描版的,是全版电子书的,非PDF,可编辑,各种阅览器以打开!包括书签和同步目录! 第1章 阅读前的准备工作 / 1 1.1 系统架构 / 2 1.1.1 Android系统架构 / 2 1.1.2 本书的架构 / 3 1.2 ...
总的来说,HandlerThread、AsyncTask和Handler都是Android中用于异步处理和UI更新的重要工具。理解并熟练掌握它们的使用,能帮助开发者编写出更加流畅、高效的Android应用。在实际项目中,应根据任务的性质和需求...
在Android开发中,异步操作是必不可少的一部分,用于提升应用的性能和用户体验。`Handler`、`HandlerThread`和`AsyncTask`都是Android系统提供的处理异步任务的机制,它们各自有其特点和适用场景。下面我们将分别...
总结来说,`HandlerThreadDemo`项目是学习和理解Android中`HandlerThread`用法的一个实用示例,通过这个项目,开发者可以更好地掌握Android多线程编程,尤其是如何在保持主线程流畅的同时,有效地执行后台任务。
HandlerThread在Android开发中是一种特殊的线程类,主要用于处理与UI线程同步的异步任务。它是基于Thread的,但提供了MessageQueue和Looper的集成,使得我们能够在子线程中方便地通过Handler来发送和处理消息。理解...
在Android开发中,理解核心组件如Looper、Handler和HandlerThread对于构建高效且响应式的用户界面至关重要。这些组件共同协作,确保UI线程不被阻塞,从而提供流畅的用户体验。 首先,主线程(也称为UI线程)是...
在Android开发中,`HandlerThread` 是一个非常重要的组件,特别是在处理异步任务和线程通信方面。`HandlerThread` 结合了线程和`Handler` 的概念,它是一个拥有自己消息循环的线程,可以用来执行长时间运行的任务,...
在本实例中,我们探讨的是如何使用Eclipse V4.2.0开发一个Android时钟应用,这将涉及Android...通过这个实例,开发者不仅可以掌握Android应用的基本构建过程,还能深入理解如何在Eclipse环境中高效地进行Android开发。
Android系统开发工程师常常需要深入理解系统的运转过程,而本书所涉及的内容可能正是他们在工作和学习中最想了解的。那些对具体模块(如Audio系统和Surface系统)感兴趣的读者 也可以直接阅读相关章节的内容。 ...