`
zhenzxie
  • 浏览: 68106 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Android学习之路——1.Handler,Message,Looper简介

阅读更多
1.Handler允许你发送和处理关联着一个线程的消息队列的Message和Runnable对象。每一个Handler实例和一个单一的线程和这个线程的消息队列相关连。当它被创建时,它和线程,消息队列绑定了,它可以传递Message和Runnable对象到消息队列,然后执行他们,最后出队列。

2.Handler主要在两种情况下使用(1)安排Message和Runnable在未来某个时间执行。(2)将一个准备在不同于你的主线程的线程执行的动作入队。

3.安排线程主要用这些方法完成的:
post(Runnable),
postAtTime(Runnable, long), 
postDelayed(Runnable, long), 
sendEmptyMessage(int), 
sendMessage(Message), 
sendMessageAtTime(Message, long), 
sendMessageDelayed(Message, long) 
post版的方法允许将Runnable Objects入队,Runnable Objects将在消息队列接收它们的时候被调用。sendMessage版方法允许将含有数据的Message Objects入队,这些Message Objects将被Handler的handleMessage(Message)处理(要求继承Handler),并且只要Handler对象以主线程的Looper创建,那么调用Handler的sendMessage等接口,将会把消息放入队列都将是放入主线程的消息队列。并且将会在Handler主线程中调用该handler的handleMessage接口来处理消息。

4。内部接口Handler.Callback

 /**
     * Callback interface you can use when instantiating a Handler to avoid
     * having to implement your own subclass of Handler.
     */
    public interface Callback {
        public boolean handleMessage(Message msg);
    }

5.构造方法:
①:Handler()缺省构造方法,和当前线程的消息队列关联。
②:Handler(Handler.Callback callback)和当前消息队列关联,使用自己定制的实现callback接口的类来处理Message。
③:Handler(Looper looper)使用特定的队列。
④:Handler(Looper looper,Handler.Callback callback)使用特定的消息队列和自己的定制的实现Callback接口的类来处理Message。

6.Message:含有任意数据对象,能被发送到Handler。创建Message对象时推荐不要使用缺省构造方法,最好的方法是使用Message.obtain()或者Handler.obtainMessage()来获得Message对象,这些方法会从消息池中获得Message对象。

7.Message的常用实例域:int what用于区分Message,int arg1,int ag2(开销会比setData()),Object obj存储数据。Message 重要方法:obtain()从消息池中获得Message对象,setToTarget()将消息发送给特定的Handler对象,setTarget(Handler handler)绑定特定的Handler。

8.Looper:用于为一个线程运行消息循环的类,线程缺省是没有消息循环的,可以通过在线程中调用prepare()方法来获得,然后用loop()让他处理消息,知道循环结束。Looper和Hander配合使用,在API中的示例:
 
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();      
     } 
 }

9.Looper的构造方法是private的,所以我们不能自己创建Looper对象,但是有HandlerThread类,通过创建HandlerThread对象并start,我们可以来获得Looper对象,进而传给Handler构造方法,这样我们可以在主线程外的线程使用Handler来处理事务了。
分享到:
评论

相关推荐

    安卓Android源码——HandlerLooper2.rar

    这个压缩包“安卓Android源码——HandlerLooper2.rar”可能包含了关于这些组件的深入分析和示例代码。以下是关于`Handler`、`Looper`和`MessageQueue`的详细解释: 1. **Handler**: - `Handler`是Android中的一个...

    安卓Android源码——HandlerLooper1.rar

    在Android系统中,`Handler`、`Looper`和`MessageQueue`是三个核心组件,它们共同构成了Android消息处理机制,使得应用程序能够实现线程间的通信和异步任务执行。这个`HandlerLooper1.rar`文件可能包含了对这些概念...

    安卓Android源码——HandlerMessage3.rar

    这个压缩包"安卓Android源码——HandlerMessage3.rar"很可能包含了关于这三者如何协同工作的示例代码或者详细分析。现在,我们将深入探讨这些概念及其在Android系统中的作用。 `Handler` 是一个用于发送和处理消息...

    安卓Android源码——HandlerMessage2.rar

    在"安卓Android源码——HandlerMessage2.rar"中,你可能会找到关于这些概念的实际代码示例,这将有助于你从实践中学习和掌握`Handler`、`Message`的使用方法。通过分析和调试这些代码,你将能够更好地理解Android...

    安卓Android源码——HandlerMessage1.rar

    通过对 `HandlerMessage1.rar` 中的源码进行学习,开发者可以更深入地了解这些组件的内部实现,以及如何高效地利用它们来实现异步操作和线程间的通信。这将有助于提高安卓应用的性能和用户体验。

    android的消息处理机制(图+源码分析)——Looper,Handler,Message

    android源码中包含了...android的消息处理有三个核心类: Looper,Handler和Message。 其实还有一个Message Queue(消息队列) , 但是MQ被封装到Looper里面了, 我们不会直接与 MQ打交道, 因此我没将其作为核心类。

    安卓Android源码——HandlerSample.rar

    若要在其他线程中使用 `Handler`,我们需要先调用 `Looper.prepare()` 初始化 `Looper`,然后调用 `Looper.loop()` 开始消息循环。 3. **Message** `Message` 是一个轻量级的消息对象,用于携带数据。我们可以通过...

    Android应用源码之HandlerMessage2.zip

    在Android应用开发中,HandlerMessage2.zip这个压缩包文件很可能包含了一个关于Android应用程序中的消息处理系统实例——Handler、Message及Looper的源代码示例。在这个示例中,开发者可能通过创建自定义Handler类来...

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

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

    Android源码——progress前台运算.zip

    这种方式需要理解Looper、Message和Handler之间的关系。 在压缩包中的两个.png图片可能是UI设计的示例或者调试过程的截图,展示了进度条在不同状态下的显示。"Android progress前台运算"可能是代码示例或教程,讲解...

    安卓Android源码——面试题-.zip

    - Handler、Looper和Message三者协同实现消息机制,理解它们的工作原理,有助于解决UI更新和网络请求等问题。 9. **Android权限管理** - Android的权限模型在不同版本中有变化,理解运行时权限和静态权限的区别,...

    Android Handler线程间的调度

    而在工作线程中,如果需要处理Message,必须手动调用Looper.prepare()和Looper.loop()来启动消息循环。 Message则是承载数据的对象,它可以携带各种类型的数据,并且可以通过setTarget()方法指定要发送到哪个...

    Android——显示时间和暂停时间(Handler类操作线程)

    学习这个示例项目可以帮助你更好地理解如何在Android中使用`Handler`来控制时间显示和暂停,同时也可以了解到如何在实际项目中应用这些概念。通过实践和理解源码,你可以提高自己在Android多线程和UI更新方面的技能...

    android——多线程

    标题"android——多线程"和描述"android——Handler与多线程应用范例"暗示我们将深入探讨如何在Android中使用Handler来管理多线程。 Android系统默认运行在一个单线程环境中,即主线程,也被称为UI线程。主线程主要...

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

    ### Android高级开发面试题——Handler相关知识 #### 一、HandlerLooperMessage关系 **1. Handler、Looper与Message之间的关系** - **Handler**: 主要用于发送消息和处理消息。它作为一个桥梁,使得主线程和子...

    安卓Android源码——应用开发揭秘源码.zip

    再者,Android的异步处理模型,如Handler、Looper和MessageQueue,是实现非阻塞UI和后台任务处理的核心。源码分析有助于开发者掌握这些机制,合理安排任务执行,避免UI线程阻塞,提升用户体验。 除此之外,Android...

    Android Handler解析

    为了解决这个问题,Android提供了一种非阻塞的消息传递机制——Handler。 ## Handler基础概念 ### 什么是Handler? Handler是Android框架中的一个核心组件,它提供了一个非阻塞的消息传递机制。通过Handler,可以...

    安卓Android源码——android访问网络返回json解析和Hanlder的使用.zip

    本资源"安卓Android源码——android访问网络返回json解析和Hanlder的使用.zip"聚焦于两个核心概念:网络请求与数据解析,以及Handler的使用。我们将深入探讨这两个方面。 首先,Android中的网络访问是应用程序与...

    android 线程间通信

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

Global site tag (gtag.js) - Google Analytics