`
forhope
  • 浏览: 365758 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论

Android Handler线程间通信机制分析

 
阅读更多
Looper: 循环处理消息队列

//用法:
  class LooperThread extends Thread {
        public Handler mHandler;
        
        public void run() {
            Looper.prepare();
            
            mHandler = new Handler() {
                public void handleMessage(Message msg) {
                    // process incoming messages here
                }
            };
            
            Looper.loop();
        }
    }

//第一步,在TLS上创建一个Looper
//TLS,thread local storage线程本地存储空间,也就是这个存储空间是和线程相关的,一个线程内有一个内部存储空间
public static final void prepare() {  
        if (sThreadLocal.get() != null) {  
            throw new RuntimeException("Only one Looper may be created per thread");  
        }  
        sThreadLocal.set(new Looper());  
    }

  /**
     *  Run the message queue in this thread. Be sure to call
     * {@link #quit()} to end the loop.
     */
// 从当前本地线程中得到loop对象,从中取出message队列,遍历其中的message并发送到其target
// 注意msg.target.dispatchMessage(msg);
 public static final void loop() {
        Looper me = myLooper();
        MessageQueue queue = me.mQueue;
        while (true) {
            Message msg = queue.next(); // might block
            //if (!me.mRun) {
            //    break;
            //}
            if (msg != null) {
                if (msg.target == null) {
                    // No target is a magic identifier for the quit message.
                    return;
                }
                if (me.mLogging!= null) me.mLogging.println(
                        ">>>>> Dispatching to " + msg.target + " "
                        + msg.callback + ": " + msg.what
                        );
                msg.target.dispatchMessage(msg);
                if (me.mLogging!= null) me.mLogging.println(
                        "<<<<< Finished to    " + msg.target + " "
                        + msg.callback);
                msg.recycle();
            }
        }
    }

// 再看看Handler中的该方法
/**
     * Subclasses must implement this to receive messages.
     */
    public void handleMessage(Message msg) {
    }
    
    /**
     * Handle system messages here.
     */
    public void dispatchMessage(Message msg) {
        if (msg.callback != null) {
            handleCallback(msg);
        } else {
            if (mCallback != null) {
                if (mCallback.handleMessage(msg)) {
                    return;
                }
            }
            handleMessage(msg);
        }
    }


参考:http://blog.csdn.net/Innost/article/details/6055793
分享到:
评论

相关推荐

    Android Handler线程间的调度

    在Android开发中,Handler、Looper和Message是实现线程间通信的重要组件,它们共同构成了Android的消息处理机制。本文将深入探讨“Android Handler线程间的调度”这一主题,并结合提供的资源——MessageProject,来...

    Android中线程间通信.pdf

    ### Android中线程间通信详解 #### 一、引言 在Android开发中,线程间的通信是一项重要的技术。为了确保应用的响应性和流畅性,开发者必须了解如何正确地管理和同步多个线程之间的数据交换。本文将深入探讨Android...

    Android利用handler在线程之间传递代码

    Handler机制就是Android系统提供的一种高效、灵活的线程间通信方式。本篇将深入探讨如何利用Handler在线程之间传递代码,以实现异步处理和保持UI线程的流畅。 首先,理解Handler的基本原理。Handler是Android中的一...

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

    总之,自定义Handler和Looper是Android开发中实现线程间通信的重要手段。理解并熟练掌握这一机制,对于优化应用性能和提升用户体验具有重要意义。通过实际的项目实践,如"HandlerLooperDemo",开发者可以更深入地...

    模拟Android Handler机制Demo

    【Android Handler机制】是Android应用程序中用于线程间通信的核心组件,它与Looper和Message紧密配合,实现消息的发送、处理以及线程间的同步。在Android应用开发中,尤其是涉及到UI更新时,Handler机制显得尤为...

    android 线程间通信

    本文将详细介绍Android中用于线程间通信的主要机制——Handler和Looper,并通过实例演示如何在实际开发中运用这些技术。 #### 二、线程间通信的概念 **1. Looper与消息队列** 在Android中,每个线程都有自己的...

    android 线程间通信显示同步时间

    在"android 线程间通信显示同步时间"的例子中,我们可以选择使用Handler或LiveData。例如,创建一个后台线程,周期性获取系统时间,然后通过Handler发送一个包含新时间的Message到主线程。主线程的Handler接收到...

    android 线程间通讯

    在Android系统中,线程间通信(Inter-Thread Communication,简称ITC)是应用程序开发中的重要环节,尤其在处理耗时操作或者优化UI性能时显得至关重要。线程间通信允许不同线程之间交换数据和执行任务,以确保主线程...

    Android_Handler消息处理机制

    总结起来,Android的Handler消息处理机制是实现线程间通信和异步任务处理的核心工具,它确保了对UI的修改总是在正确的线程(主线程)中进行,避免了因不恰当的线程操作导致的应用程序崩溃。理解和熟练掌握这一机制,...

    Android线程间 massage 机制

    Android线程间通信的主要方式有:Handler、Looper、Message以及BroadcastReceiver等。其中,Handler-Looper-Message机制是最常用的一种,它允许我们在不同线程之间发送和处理消息。 1. Handler(处理器) Handler是...

    androidHandler测试的demo

    通过分析这个`demo`,开发者可以更好地理解Android中的多线程通信机制,并学会在自己的项目中正确、有效地使用`Handler`、`Looper`进行线程间通信。这将有助于提高程序的响应性和用户体验,避免因UI操作不在主线程...

    Android_Handler的线程队列Demo

    在Android应用开发中,Handler、Looper和Message是实现线程间通信的重要机制。这个"Android_Handler的线程队列Demo"旨在演示如何有效地利用Handler来处理线程间的通信,特别是主线程(UI线程)与工作线程之间的交互...

    【Android开发入门】Android线程之Handler

    五、线程间通信 Handler的主要作用是实现线程间的通信。例如,在工作线程中执行耗时操作,完成后通过Handler向主线程发送消息,主线程接收到消息后更新UI。这样,既保证了UI的流畅性,又实现了后台任务的执行。 六...

    android主线程、子线程及线程间通信方式测试app

    本文将深入探讨Android主线程(也称为UI线程)、子线程以及它们之间的通信方式,结合"android主线程、子线程及线程间通信方式测试app"的描述,我们将详细分析相关知识点。 1. **Android主线程**:主线程是应用程序...

    Android Handler消息处理顺序分析

    在Android开发中,Handler、Looper和Message是实现线程间通信的重要组件,它们共同构建了Android的消息处理机制。本文将详细分析Android Handler消息处理的顺序,以及如何利用这些组件进行异步操作。 首先,理解...

    深入Android Handler与线程间通信ITC的详解

    在Android开发中,Handler是实现线程间通信(ITC,Inter-Thread Communication)的关键机制。Handler、Looper和MessageQueue三者共同构建了一个消息传递系统,使得不同线程之间能够安全地交换数据和执行任务。这篇...

    android handler 机制 源码

    在Android系统中,Handler、Looper和Message构成了一个用于线程间通信的重要机制。这个机制使得UI线程可以处理来自其他线程的消息,从而避免了直接在非UI线程操作UI组件,防止应用出现ANR(Application Not ...

    Android Handler机制实例

    在Android应用开发中,Handler是实现线程间通信的关键组件,尤其在处理UI更新和异步任务时。本文将深入探讨Android Handler机制的实例,帮助初学者理解并掌握这一核心概念。 首先,我们要理解Android应用的基本运行...

Global site tag (gtag.js) - Google Analytics