`
gybin
  • 浏览: 271033 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android线程间消息处理机制(Looper、Handler和Message)

 
阅读更多

用:Android的线程间消息处理机制主要是用来处理主线程(UI线程)跟工作线程(自己创建的线程)间通信的,如:通过工作线程刷新界面,或者在工作线程中创建一个dialog或者Toast等。

 通常是:Handle定义在UI线程,  工作线程使用 Looper.prepare,进行初始化消息队列,然后使用Handler发生消息回UI线程。

 

一、几个关键概念

1
MessageQueue:是一种
 数据 结构,见名知义,就是一个消息队列,存放消息的地方。每一个线程最多只可以拥有一个MessageQueue数据结构。
创建一个线程的时候,并不会自动 创建其MessageQueue。通常使用一个Looper对象对该线程的MessageQueue进行管理。主线程创建时,会创建一
个默认的Looper对象,而Looper对象的创建,将自动创建一个Message Queue。其他非主线程,不会自动创建Looper,要需要的时候,通过调
prepare函数来实现。

2
Message:消息对象,Message Queue中的存放的对象。一个Message Queue中包含多个Message
 
Message
实例对象的取得,通常使用Message类里的静态方法obtain(),该方法有多个重载版本可供选择;它的创建并不一定是直接创建一个新的实例,
而是先从Message Pool(消息池)中看有没有可用的Message实例,存在则直接取出返回这个实例。如果Message Pool中没有可用的Message实例,
则才用给定的参数创建一个Message对象。调用removeMessages()时,将MessageMessage Queue中删除,同时放入到Message Pool中。除了上面这
种方式,也可以通过Handler对象的obtainMessage()获取 一个Message实例。

3
Looper
 
MessageQueue的管理者。每一个MessageQueue都不能脱离Looper而存在,Looper对象的创建是通过prepare函数来实现的。同时每一个Looper对象
和一个线程关联。通过调用Looper.myLooper()可以获得当前线程的Looper对象
创建一个Looper对象时,会同时创建一个MessageQueue对象。除了主线程有默认的Looper,其他线程默认是没有MessageQueue对象的,所以,不能
接受Message。如需要接受,自己定义 一个Looper对象(通过prepare函数),这样该线程就有了自己的Looper对象和MessageQueue数据结构了。
Looper
MessageQueue中取出Message然后,交由HandlerhandleMessage进行处理。处理完成后,调用Message.recycle()将其放入Message Pool中。

4
Handler
 
消息的处理者,handler 负责将需要传递的信息封装成Message,通过调用handler 对象的obtainMessage()来实现;
将消息传递给Looper,这是通过
handler 对象的sendMessage()来实现的。继而由LooperMessage放入MessageQueue中。
Looper对象看到MessageQueue中含有Message,就将其广播出去。该
handler 对象收到该消息后,调用相应的handler对象的handleMessage()方法
对其进行处理。

 

 

 

 

在一个 非主线程中 必须要:

new Thread()

   {

      public void run()

      {

         Looper.prepare();

         new Handler()

         {

           handleMessage(){}

         }

         Looper.loop();

      }

   }.start()

 

这样 无效:

new Thread()

   {

      public void run()

      {

       //  Looper.prepare();

         new Handler()

         {

           handleMessage(){}

         }

         //Looper.loop();

      }

   }.start()

 

 

 

正因为这样  出现了 HandlerThread  简化了这样的写法

直接HandlerThread   thread = new HandlerThread  (“必须要有一个线程名字”);

必须 thrad.start(); 

才能通过thread.getLoopr()  来得到一个Handler

eg: new Handler(thread.getLooper()){

    ............

};

 

分享到:
评论

相关推荐

    Android的消息处理机制--Looper,Handler

    `Looper`维持着消息循环,不断地从队列中取出消息并分发,而`Handler`则负责创建、发送和处理这些消息,实现了线程间的通信和同步。这种机制使得开发者能够在不阻塞主线程的情况下执行耗时操作,保证了UI的流畅性。...

    Android应用程序消息处理机制(Looper、Handler)分析

    总的来说,Android的消息处理机制(Looper、Handler)是一种强大的工具,它允许开发者在不同线程间传递消息,协调复杂的任务执行,实现异步操作。理解并熟练掌握这一机制对于编写高性能、用户体验良好的Android应用...

    Thread,Looper,Handler,Message,MessageQueue,MessagePool之间的关系

    在Android系统中,线程(Thread)、Looper、Handler、Message以及MessageQueue和MessagePool是实现异步消息处理机制的关键组件,它们共同构建了一个高效的事件驱动模型。这些组件的关系紧密,协同工作,使得Android...

    android线程handler、message、looperDEMO

    `Handler`、`Message`和`Looper`是Android系统提供的一个关键机制,用于在不同的线程间进行通信,特别是主线程(UI线程)与工作线程间的交互。下面将详细解释这三个组件以及它们如何协同工作。 1. **Handler...

    Android单线程模型中Message、Handler、Message Queue、Looper之间的关系---附实例源码

    消息的类型,在Handler类中的handleMessage方法中得到单个的消息进行处理,在单线程模型下,为了线程通信问题,Android设计了一个Message Queue(消息队列), 线程间可以通过该Message Queue并结合Handler和Looper组件...

    Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系 - Hongyang -

    【Android异步消息处理机制】深入理解Looper、Handler、Message三者关系 在Android系统中,异步消息处理机制是实现线程间通信和保证UI线程安全的关键组件。它涉及到了三个核心类:Looper、Handler和Message。这篇...

    Android应用程序消息处理机制(Looper、Handler)分析[收集].pdf

    总的来说,Android的消息处理机制是一个高效、灵活的工具,它使得开发者能够优雅地处理异步事件和线程间的通信,是构建高性能Android应用的基础。通过对Looper、Handler和Message的深入理解,开发者可以更好地掌控...

    Handler+Looper+MessageQueue

    这就是 Android 的异步处理机制,其中 Handler、Looper 和 MessageQueue 是关键组件,它们共同构成了 Android 线程间通信的基础。 1. **Handler**: Handler 是一个接口,用于发送和处理消息。它与 Looper 关联,...

    Android Handler Looper Message 使用示例

    在主线程即UI线程外,新建一个Looper线程,并用Messenger和Handler来处理message和posted runnable。程序中,在负线程中默认加了一个3s的线程等来,来帮助理解sent message和post runnable之间的同步机制。所以在按...

    Message,MessageQueue,Looper,Handler详解

    ### Message,MessageQueue,Looper,Handler详解 #### 一、几个关键概念 ...通过它们之间的相互协作,使得应用程序能够在不同的线程间高效地传递和处理消息,从而实现了复杂的用户交互逻辑和后台任务处理等功能。

    android多线程handler/message机制详解

    在 Android 中,多线程机制是基于 Handler 和 Message 机制的。 Handler 是什么?Handler 是一个处理器,它负责处理和绑定到该 Handler 的线程中的 Message。每一个 Handler 都必须关联一个 Looper,并且两者是一一...

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

    本文详细介绍了Android中消息处理机制的核心组件Looper、MessageQueue和Handler的工作原理及其实现细节。理解这些概念有助于开发者更好地设计和实现多线程应用程序,提高程序的性能和用户体验。通过合理利用这些组件...

    Handler Looper MessageQueue 源码解析

    在Android系统中,Handler、Looper和MessageQueue是实现线程间通信的核心组件,它们共同构建了一个消息处理机制。本文将深入解析这三者的源码,帮助你理解它们的工作原理,并教你如何手写一套自己的Handler系统。 ...

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

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

    自定义Handler-Looper实现线程间通信

    Handler是Android中的一个类,它主要用于发送和处理Message对象。在主线程(UI线程)中创建一个Handler实例后,我们可以在这个Handler中发送Message到Message Queue,然后由Looper取出并分发给相应的Handler进行处理...

    Android多线程及异步任务消息处理机制 一 Handler的使用

    `Handler`的主要作用是在Android的消息队列中发送和处理消息。它的核心流程主要包括三部分:`Handler`对象、`Looper`循环器和`Message`消息对象。首先,我们需要创建一个`Handler`实例,这个实例通常在UI线程中创建...

    Android_Handler消息处理机制

    在Android系统中,Handler、Message和Looper构成了一个关键的异步通信机制,即Handler消息处理机制。这个机制允许Android应用程序在不同的线程间传递消息,处理UI更新等操作,是多线程编程中的重要组成部分。下面...

    Android_Handler,Looper,Message

    总的来说,`Handler`、`Looper`和`Message`是Android多线程编程中的重要工具,它们通过消息机制,帮助开发者有效地管理线程间的通信,实现异步处理,提升应用的性能和用户体验。理解这三个组件的工作原理和使用方式...

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

    Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。 Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法...

Global site tag (gtag.js) - Google Analytics