`
石头的日记
  • 浏览: 200801 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类

android Thread和Looper以及Handler和Message详解

 
阅读更多

Thread和Looper以及Handler和Message详解 Android开发必读

作者: Android开发网原创 时间: 2010-04-09

   很多初入Android或Java开发的新手对Thread、Looper、Handler和Message仍然比较迷惑,衍生的有 HandlerThread、java.util.concurrent、Task、AsyncTask由于目前市面上的书籍等资料都没有谈到这些问题, 今天Android123就这一问题做更系统性的总结。

   Android开发过程中为什么要线程能?

   我们创建的Service、Activity以及Broadcast均是一个主线程处理,这里我们可以理解为UI线程。但是在操作一些耗时操作时,比如 I/O读写的大文件读写,数据库操作以及网络下载需要很长时间,为了不阻塞用户界面,出现ANR的响应提示窗口,这个时候我们可以考虑使用Thread线 程来解决。

  Android中使用Thread线程会遇到哪些问题?

  对于从事过J2ME开发的程序员来说Thread比较简单,直接匿名创建重写run方法,调用start方法执行即可。或者从Runnable接口继承, 但对于Android平台来说UI控件都没有设计成为线程安全类型,所以需要引入一些同步的机制来使其刷新,这点Google在设计Android时倒是 参考了下Win32的消息处理机制。

 1. 对于线程中的刷新一个View为基类的界面,可以使用postInvalidate()方法在线程中来处理,其中还提供了一些重写方法比如 postInvalidate(int left,int top,int right,int bottom) 来刷新一个矩形区域,以及延时执行,比如postInvalidateDelayed(long delayMilliseconds)或postInvalidateDelayed(long delayMilliseconds,int left,int top,int right,int bottom) 方法,其中第一个参数为毫秒,如下:

android thread looper

   2. 当然推荐的方法是通过一个Handler来处理这些,可以在一个线程的run方法中调用handler对象的 postMessage或sendMessage方法来实现,Android程序内部维护着一个消息队列,会轮训处理这些,如果你是Win32程序员可以 很好理解这些消息处理,不过相对于Android来说没有提供 PreTranslateMessage这些干涉内部的方法。

  3. Looper又是什么呢? ,其实Android中每一个Thread都跟着一个Looper,Looper可以帮助Thread维护一个消息队列,昨天的问题 Can't create handler inside thread 错误  一 文中提到这一概念,但是Looper和Handler没有什么关系,我们从开源的代码可以看到Android还提供了一个Thread继承类 HanderThread可以帮助我们处理,在HandlerThread对象中可以通过getLooper方法获取一个Looper对象控制句柄,我们 可以将其这个Looper对象映射到一个Handler中去来实现一个线程同步机制,Looper对象的执行需要初始化Looper.prepare方法 就是昨天我们看到的问题,同时推出时还要释放资源,使用Looper.release方法。

  4.Message 在Android是什么呢? 对于Android中Handler可以传递一些内容,通过Bundle对象可以封装String、Integer以及Blob二进制对象,我们通过在线 程中使用Handler对象的    sendEmptyMessage或sendMessage方法来传递一个Bundle对象到Handler处理器。对于Handler类提供了重写方法 handleMessage(Message msg) 来判断,通过msg.what来区分每条信息。将Bundle解包来实现Handler类更新UI线程中的内容实现控件的刷新操作。相关的 Handler对象有关消息发送sendXXXX相关方法如下,同时还有postXXXX相关方法,这些和Win32中的道理基本一致,一个为发送后直接 返回,一个为处理后才返回 :               
               android handler

  5. java.util.concurrent对象分析,对于过去从事Java开发的程序员不会对Concurrent对象感到陌生吧,他是JDK 1.5以后新增的重要特性作为掌上设备,我们不提倡使用该类,考虑到Android为我们已经设计好的Task机制,我们这里Android开发网对其不 做过多的赘述,相关原因参考下面的介绍:

  6. 在Android中还提供了一种有别于线程的处理方式,就是Task以及AsyncTask,从开源代码中可以看到是针对Concurrent的封装,开 发人员可以方便的处理这些异步任务,具体的Android123在以前的文章中有详细解释,可以使用站内搜索来了解更多。

 

 

转自:http://www.android123.com.cn/androidkaifa/422.html

分享到:
评论

相关推荐

    Android的Message机制(Handler、Message、Looper)

    通过以上介绍可以看出,Android的Message机制是通过`Handler`、`Message`、`Looper`和`MessageQueue`四个关键组件协同工作来完成的。这种机制不仅使得应用程序内部通信变得更加高效有序,同时也为开发者提供了一种...

    Android handler message奇怪用法详解

    通常,我们使用Handler配合Looper和Message来实现在主线程(UI线程)中执行后台任务的结果。Looper是消息队列的循环器,它不断检查消息队列并分发消息给相应的Handler处理。Message则是承载数据的对象,用于在...

    Android 之 Looper、MessageQueue、Handler 与消息循环

    ### Android之Looper、MessageQueue、Handler与消息循环详解 #### 一、概述 在Android开发过程中,消息处理机制是至关重要的部分,它涉及到应用程序如何管理、传递和响应各种事件。本篇文章将深入探讨Android中...

    Android_Handler详解(一)

    【Android_Handler详解(一)】 在Android开发中,...在实际开发中,应结合使用Handler、Looper和Thread,以实现高效的多线程编程。在后续章节,我们将更深入地探讨Handler与其他组件的配合使用,以及更多高级特性。

    Android消息处理机制Looper和Handler详解

    Android应用的运行基于消息驱动模型,这一模型的核心在于Looper、Handler和MessageQueue的协同工作。下面我们将深入理解这三个组件的作用及其交互。 1. **Message(消息)**: - Message是应用程序中传递信息的...

    Android开发工程师面试题之handler详解。android程序员,android开发面试资料,详解

    ### Android开发工程师面试题之Handler详解 在Android开发过程中,Handler是进行线程间通信的重要机制之一,尤其在实现异步任务更新UI等场景中扮演着关键角色。本篇文章将围绕Handler的工作原理、核心组件及其实现...

    Handler_Message_Looper小结

    `Handler`, `Message`, `Looper` 和 `MessageQueue` 是 Android 应用开发中非常重要的组成部分,它们共同协作以实现多线程间的高效通信和任务调度。正确理解和运用这些机制对于提高应用性能和用户体验至关重要。

    详解Android中Handler的内部实现原理

    Handler是Android系统中用于线程间通信的关键组件,它的内部实现原理涉及到Thread、MessageQueue和Looper等核心类。首先,我们需要理解线程在操作系统中的基本概念,线程是程序执行的最小单位,每个线程都有自己的...

    Android消息机制Handler的工作过程详解

    Handler提供一个Looper对象,因为...理解Handler、Looper和MessageQueue的工作原理以及它们之间的交互,对于编写高效、无阻塞的Android应用至关重要。在实际开发中,正确使用Handler可以避免ANR等问题,提升用户体验。

    Thread、Handler和HandlerThread关系详解

    对于很多人来说,可能对Thread和Handler很熟悉,主要涉及到Android的消息机制(Handler、Message、Looper、MessageQueue),详见《 从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)...

    王栋栋_周报关于android异步消息处理机制handler_20190524.doc

    Handler与Looper和MessageQueue的关系** - **Looper**: Looper负责关联当前线程与MessageQueue,并启动消息循环。每个线程只能拥有一个Looper实例。 - **MessageQueue**: MessageQueue负责存储所有的Message,按照...

    Android的消息处理机制--Message,MessageQueue

    ### Android的消息处理机制详解 #### 一、引言 Android应用程序是通过消息驱动的,它...通过合理使用Message、MessageQueue、Handler和Looper,开发者可以轻松地实现线程间的通信,从而提升应用的性能和用户体验。

    Android面试Handler.docx

    ### Android中的Handler机制详解 #### 一、引言 在Android开发中,Handler是一个非常重要的概念,它主要用于解决主线程(UI线程)与子线程之间的消息传递问题。通过合理运用Handler,可以有效地避免UI线程被长时间...

    android线程 Handler Message Queue AsyncTask线程模型 线程交互 + 修改Button样式 示例 最终easy整合版

    以上就是关于Android线程模型和线程交互的详解,包括Handler、Message Queue和AsyncTask的使用,以及修改Button样式的实例。理解并熟练运用这些技术,可以极大地提高Android应用的性能和用户体验。通过不断实践和...

    android handler

    本文将深入探讨Android中的`Handler`机制及其与线程、`Looper`以及`MessageQueue`的关系,并通过具体的示例进行演示,帮助读者更好地理解这一机制。 #### 二、Handler机制的核心组件 **1. MessageQueue(消息队列...

    android中异步消息处理

    通过上述内容,我们可以看出Android中的异步消息处理机制主要依赖于Looper、Handler和MessageQueue这三个核心组件。Looper负责创建消息循环并在循环中处理消息,MessageQueue用于存储消息,而Handler则作为消息的...

    Android开发笔记之:Handler Runnable与Thread的区别详解

    Handler、Message和Looper是Android特有的用于线程间通信的机制。通常,主线程(UI线程)拥有一个Looper,而其他线程没有。当在工作线程中创建一个Handler并关联到主线程的Looper时,可以在工作线程中发送Message,...

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

    3. **内置Handler(Handler)**: Handler是Android中处理消息和回调的核心机制之一,它与Message和Looper一起工作,用于在不同线程间传递消息。在这里,我们可以创建一个Handler实例,将其绑定到主线程,然后在后台...

    Android Handler 原理分析及实例代码

    在Android开发中,`Handler` 是一个至关重要的组件,它涉及到多线程、UI更新以及消息传递机制。本文将深入探讨 `Handler` 的工作原理,分析其如何在不同线程间进行通信,并通过实例代码来展示其具体用法。 ### ...

    Android 高级开发面试题以及答案整理

    ### Android高级开发面试题——Handler相关知识 ...总之,`Handler`、`Looper`和`MessageQueue`三者共同协作,实现了跨线程的消息传递和处理功能。理解它们的工作原理对于编写高效的多线程应用程序至关重要。

Global site tag (gtag.js) - Google Analytics