`

Handler Thread

 
阅读更多
介绍
首先我们来看看为什么我们要使用HandlerThread?在我们的应用程序当中为了实现同时完成多个任务,所以我们会在应用程序当中创建多个线程。为了让多个线程之间能够方便的通信,我们会使用Handler实现线程间的通信。

下面我们看看如何在线程当中实例化Handler。在线程中实例化Handler我们需要保证线程当中包含Looper(注意:UI-Thread默认包含Looper)。

为线程创建Looper的方法如下:在线程run()方法当中先调用Looper.prepare()初始化Looper,然后再run()方法最后调用Looper.loop(),这样我们就在该线程当中创建好Looper。(注意:Looper.loop()方法默认是死循环)

我们实现Looper有没有更加简单的方法呢?当然有,这就是我们的HandlerThread。我们来看下Android对HandlerThread的描述:

Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called.

使用步骤
尽管HandlerThread的文档比较简单,但是它的使用并没有想象的那么easy。

创建一个HandlerThread,即创建了一个包含Looper的线程。

HandlerThread handlerThread = new HandlerThread("leochin.com");
handlerThread.start(); //创建HandlerThread后一定要记得start()
获取HandlerThread的Looper

Looper looper = handlerThread.getLooper();
创建Handler,通过Looper初始化

Handler handler = new Handler(looper);
通过以上三步我们就成功创建HandlerThread。通过handler发送消息,就会在子线程中执行。

如果想让HandlerThread退出,则需要调用handlerThread.quit();。

当然用普通线程的形式也可以实现HandlerThread, 即 Looper线程

在线程中调用 Looper.prepare() 和 Looper.loop() 方法

class LooperThread extends Thread {
      public Handler mHandler;

      public void run() {
          [b]Looper.prepare();[/b]

          mHandler = new Handler() {
              public void handleMessage(Message msg) {
                  // process incoming messages here
              }
          };

          [b]Looper.loop();[/b]
      }
  }
分享到:
评论

相关推荐

    Handler + Thread + Looper

    在Android应用开发中,Handler、Thread和Looper是三个至关重要的组件,它们共同构成了Android线程间通信的基础架构。本文将详细解析这三个概念及其相互关系,旨在帮助开发者理解它们的工作原理和实际应用场景。 ...

    android Handler Thread AsyncTask httpURLConnection

    在Android开发中,`Handler`、`Thread`、`AsyncTask`和`HttpURLConnection`是四个非常关键的概念,它们涉及到应用程序的多线程处理、网络通信以及UI更新。接下来,我们将详细探讨这些知识点。 首先,`Thread`是Java...

    AsyncTask 与Thread加Handler处理消息比较

    本篇文章将详细探讨两种常见的异步处理方式:`AsyncTask`和`Thread`配合`Handler`,并进行对比分析。 `AsyncTask`是Android SDK提供的一种轻量级的异步任务处理机制,它主要用于短时间的后台操作,如网络请求、数据...

    Android Thread Handler

    在Android应用开发中,线程(Thread)和Handler是实现多任务并行处理以及界面更新的关键组件。Android系统是一个单线程模型,主线程(UI线程)负责处理用户交互和绘制界面,而其他工作通常需要在后台线程中执行,以...

    Thread、Handler和HandlerThread关系详解

    ,这个题目有点意思,对于很多人来说,可能对Thread和Handler很熟悉,主要涉及到Android的消息机制(Handler、Message、Looper、MessageQueue),详见《 从Handler.post(Runnable r)再一次梳理Android的消息机制(以及...

    android计数器(Handler消息传递机制)

    在Android开发中,`Handler`消息传递机制是实现线程间通信的重要手段,尤其是在更新UI时。本项目中,我们看到一个简单的计数器应用,它利用`Handler`来每秒增加文本框中的数字,直到达到100为止。下面我们将深入探讨...

    Handler+Thread

    在Android应用开发中,`Handler` 和 `Thread` 是两个非常关键的概念,它们主要用于处理线程间的通信和异步操作。下面将详细解释这两个概念,以及如何在实际应用中使用它们来实现简单的网络图片获取和显示。 首先,`...

    android service thread toast handler

    在Android开发中,`Service`、`Thread`、`Toast`和`Handler`是四个非常重要的组件和概念,它们在创建高效、响应式的应用程序中起着关键作用。下面将详细阐述这些知识点及其相互关系。 首先,`Service`是Android中的...

    测试Thread中使用Handler修改

    在Android开发中,`Thread` 和 `Handler` 是两个非常重要的概念,它们是实现多线程通信的关键工具。本文将详细解析如何在`Thread`中使用`Handler`来修改主线程(UI线程)的数据或者更新UI。 首先,我们要了解`...

    Android:Handler的post()方法和Thread的start()方法执行Thread的run()方法的区别

    System.out.println("Handler-->"+Thread.currentThread().getName()); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if ...

    关于Thread和Handler的使用(一)

    在Android开发中,Thread和Handler是两个非常关键的概念,它们用于处理线程间通信和UI更新,确保程序的运行效率和用户体验。这篇博客主要探讨了如何有效地使用Thread和Handler进行多线程操作。 首先,Thread在Java...

    handler结合Thread异步加载网络图片

    `Handler`、`Thread` 和 `Looper` 的组合是实现这一目标的一种常见策略。本文将深入探讨如何利用这些组件来实现网络图片的异步加载。 首先,我们需要理解`Thread`。`Thread`是Java中的一个类,用于实现并发执行的...

    Thread_Handler_MessageDownload.zip

    本项目"Thread_Handler_MessageDownload"着重探讨了如何利用Thread、Handler和Message机制实现异步下载网络图片,确保UI线程不被阻塞,提高应用的响应速度。 首先,我们需要了解Android系统对线程的管理。在Android...

    Android线程模式(handler,thread,looper)

    本文将深入探讨Android中的三种主要线程模式:Handler、Thread以及Looper,并结合源码分析它们的工作原理。 首先,我们来理解一下Android应用的基本运行环境。Android系统默认在主线程(UI线程)中执行所有的用户...

    Handler结合thread 异步加载网络图片

    本示例通过Handler和Thread的配合,实现了一个简单的网络图片异步加载功能。这里我们将深入探讨这两个组件的工作原理以及如何在实际项目中应用它们。 首先,我们了解下Android的线程模型。Android UI是单线程模型,...

    HandlerThread使用demo

    它是基于Thread的,但提供了MessageQueue和Looper的集成,使得我们能够在子线程中方便地通过Handler来发送和处理消息。理解并熟练使用HandlerThread,能够帮助开发者更好地进行多线程操作,避免直接在主线程执行耗时...

    l4 的中断处理详解

    如果handler thread的状态不是`waiting`,中断线程的消息寄存器会被设置,伙伴设置为handler thread,状态改为`polling`,然后将中断线程放入handler thread的发送列表。 在L4中,中断线程(irq thread)、当前运行...

    android demo,实现主线程handle,工作子线程threadHandle的处理

    Handler threadHandler = new Handler() { @Override public void handleMessage(Message msg) { // 执行子线程任务 String text = "子线程执行的结果"; Bundle bundle = new Bundle(); bundle.putString(...

    handler post的方法demo

    在Android开发中,`Handler`、`Thread`和`post`方法是实现UI线程与后台线程交互的重要工具。`Handler`类主要用于发送和处理消息,`Thread`用于开启新的执行线程,而`post()`方法则是`Handler`的一个关键函数,常用于...

    WebView+Thread(内置Handler)实现应用内浏览器demo1

    "WebView+Thread(内置Handler)实现应用内浏览器demo1" 这个标题揭示了我们将在一个Android应用程序中使用WebView组件,并结合线程(Thread)以及内置的Handler机制来创建一个简易的内置浏览器。这个"demo1"表明这...

Global site tag (gtag.js) - Google Analytics