`
king_tt
  • 浏览: 2221962 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android中的HandlerThread的理解

 
阅读更多

定义类的代码:

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方法不做任何实际需求的事情,这样使得线程的可控性得到了增强,我们可以通过发送不同的消息让线程做不同的事情。

分享到:
评论

相关推荐

    Android HandlerThread 全面解析

    理解并熟练使用`HandlerThread`对于Android开发者来说至关重要,它可以帮助我们高效地处理后台任务,提高应用的性能和用户体验。通过合理地运用`HandlerThread`,我们可以构建更加稳定、高效的Android应用程序。

    Android-kotlin实现网络请求库

    3. **HandlerThread**: 在Android系统中,主线程负责处理用户交互,不能进行耗时操作,否则会导致界面卡顿。HandlerThread是一种轻量级的线程,主要用于后台任务的执行。它内部维护了一个Looper,可以接收并处理...

    HandlerThread

    【HandlerThread】是一种在...在Android应用开发中,理解和合理使用HandlerThread是提升应用性能和用户体验的关键。通过以上知识点,我们可以有效地在后台线程中处理任务,保持UI线程的流畅,实现应用的高效运行。

    实例分析Android中HandlerThread线程用法

    HandlerThread在Android开发中扮演着重要的角色,它是一个预先配置好的线程,具有内置的Looper,使得开发者能够在子线程中轻松地处理消息和执行任务。理解HandlerThread的工作原理有助于优化应用的多线程处理,避免...

    深入Android HandlerThread 使用及其源码完全解析

    HandlerThread是Android系统提供的一种线程管理工具,它在Android应用程序开发中扮演着重要的角色,尤其是在处理长时间运行的任务和保持...理解并熟练运用HandlerThread,对于编写高效、健壮的Android应用至关重要。

    Android用HandlerThread模拟AsyncTask功能(ThreadTask)

    HandlerThread是Android提供的一个线程类,它创建了一个 Looper 对象,使得我们可以在子线程中通过Handler发送和处理消息。 下面我们将详细探讨如何使用HandlerThread实现类似AsyncTask的行为,并提供相关的实例...

    Looper、Handler与HandlerThread

    在Android开发中,Looper、Handler和HandlerThread是三个非常重要的组件,它们构成了Android消息处理机制的基础,用于在主线程中处理来自其他线程的消息。理解并熟练运用这三个组件,对于编写高效、响应迅速的...

    handlerthread学习demo

    在Android开发中,`HandlerThread` 是一个非常重要的组件,特别是在处理异步任务和线程同步方面。`HandlerThread` 是一个内置了消息队列和Looper的线程,它的主要作用是提供一个稳定的、可控制的后台执行环境,用于...

    android使用handlerthread创建线程示例

    本文将深入探讨如何使用`HandlerThread`在Android中创建线程,以及为什么相较于直接使用`Thread`类,`HandlerThread`更具有优势。 首先,让我们理解一下`Thread`类的基本使用。通常,我们可以通过创建一个新的匿名...

    防止ANR错误HandlerThread多线程解决耗时操作MyProject.zip

    1. **理解HandlerThread**:HandlerThread是一个包含Looper的线程,它的核心在于创建了一个消息循环,允许我们通过Message对象在不同的线程之间传递数据和执行任务。在HandlerThread的run()方法中,它初始化了Looper...

    深入理解Android卷1全

    深入理解Android 卷1 不是扫描版的,是全版电子书的,非PDF,可编辑,各种阅览器以打开!包括书签和同步目录! 第1章 阅读前的准备工作 / 1 1.1 系统架构 / 2 1.1.1 Android系统架构 / 2 1.1.2 本书的架构 / 3 1.2 ...

    HandlerThread,AsyncTask,Handler的一个小例子

    总的来说,HandlerThread、AsyncTask和Handler都是Android中用于异步处理和UI更新的重要工具。理解并熟练掌握它们的使用,能帮助开发者编写出更加流畅、高效的Android应用。在实际项目中,应根据任务的性质和需求...

    Hanlder、HandlerThread、AsyncTask处理机制的相关Demo代码

    在Android开发中,异步操作是必不可少的一部分,用于提升应用的性能和用户体验。`Handler`、`HandlerThread`和`AsyncTask`都是Android系统提供的处理异步任务的机制,它们各自有其特点和适用场景。下面我们将分别...

    HandlerThreadDemo

    总结来说,`HandlerThreadDemo`项目是学习和理解Android中`HandlerThread`用法的一个实用示例,通过这个项目,开发者可以更好地掌握Android多线程编程,尤其是如何在保持主线程流畅的同时,有效地执行后台任务。

    HandlerThread使用demo

    HandlerThread在Android开发中是一种特殊的线程类,主要用于处理与UI线程同步的异步任务。它是基于Thread的,但提供了MessageQueue和Looper的集成,使得我们能够在子线程中方便地通过Handler来发送和处理消息。理解...

    了解Android核心:Looper,Handler和HandlerThread

    在Android开发中,理解核心组件如Looper、Handler和HandlerThread对于构建高效且响应式的用户界面至关重要。这些组件共同协作,确保UI线程不被阻塞,从而提供流畅的用户体验。 首先,主线程(也称为UI线程)是...

    HandlerThread分析Demo

    在Android开发中,`HandlerThread` 是一个非常重要的组件,特别是在处理异步任务和线程通信方面。`HandlerThread` 结合了线程和`Handler` 的概念,它是一个拥有自己消息循环的线程,可以用来执行长时间运行的任务,...

    Eclipse编写的Android时钟应用实例

    在本实例中,我们探讨的是如何使用Eclipse V4.2.0开发一个Android时钟应用,这将涉及Android...通过这个实例,开发者不仅可以掌握Android应用的基本构建过程,还能深入理解如何在Eclipse环境中高效地进行Android开发。

    深入理解Android:卷I--详细书签版

     Android系统开发工程师常常需要深入理解系统的运转过程,而本书所涉及的内容可能正是他们在工作和学习中最想了解的。那些对具体模块(如Audio系统和Surface系统)感兴趣的读者 也可以直接阅读相关章节的内容。 ...

Global site tag (gtag.js) - Google Analytics