`
hwy584624785
  • 浏览: 47079 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于handler

 
阅读更多

链接:
Android的消息机制,用Android线程间通信的Message机制,Android中Handler的使用方法——在子线程中更新界面,handler机制
http://blog.csdn.net/lcfeng1982/article/details/6935383
Android中Message机制的灵活应用
http://qaohao.iteye.com/blog/509145


**********************************************************
Android笔记--handler机制 
一、重要参考资料
【参考资料】
   目前来看,下面的几个网址中的内容质量比较不错,基本不需要再读别的网址了。
1、android消息机制一
   http://xtfncel.javaeye.com/blog/663517
2、Android消息机制二
   http://xtfncel.javaeye.com/blog/663518
3、Android线程间通信的message机制
   http://www.javafun.cn/viewthread.php?tid=1517
4、


5、Android中Handler的使用方法-在子线程中更新界面
   http://blog.csdn.net/yangpeng98/archive/2010/05/26/5625955.aspx
 
二、知识要点
一、知识点
1、handler应该由处理消息的线程创建。

2、handler与创建它的线程相关联,而且也只与创建它的线程相关联。handler运行在创建它的线程中,所以,如果在handler中进行耗时的操作,会阻塞创建它的线程。
【来源】以上来自:
二、一些知识点
1、Android的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线程一般都会有一个Looper。主线程(UI线程)就是一个消息循环的线程。


2、
Looper.myLooper();      //获得当前的Looper
Looper.getMainLooper () //获得UI线程的Lopper


3、Handle的初始化函数(构造函数),如果没有参数,那么他就默认使用的是当前的Looper,如果有Looper参数,就是用对应的线程的Looper。


4、如果一个线程中调用Looper.prepare(),那么系统就会自动的为该线程建立一个消息队列,然后调用 Looper.loop();之后就进入了消息循环,这个之后就可以发消息、取消息、和处理消息。
【来源】以上来自:http://www.javafun.cn/viewthread.php?tid=1517


三、应用实例
3.1 handler传递message
【应用示例一】
package com.android.tutor; 
import java.util.Timer; 
import java.util.TimerTask; 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
public class HandlerDemo extends Activity { 
     
    //title为setTitle方法提供变量,这里为了方便我设置成了int型 
    private int title = 0; 
     
    private Handler mHandler = new Handler(){ 
         
        public void handleMessage(Message msg) { 
            switch (msg.what) { 
            case 1: 
                updateTitle(); 
                break; 
            } 
        }; 
    }; 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
         
        Timer timer = new Timer(); 
        timer.scheduleAtFixedRate(new MyTask(), 1, 5000); 
    } 
         
    private class MyTask extends TimerTask{ 
        @Override 
        public void run() { 
             
            Message message = new Message(); 
            message.what = 1; 
            mHandler.sendMessage(message); 
             
        }    
    } 
     
     
    public void updateTitle(){ 
         
        setTitle("Welcome to Mr Wei's blog " + title); 
        title ++; 
    } 

 

源码来自:http://blog.csdn.net/Android_Tutor/archive/2010/05/08/5568806.aspx


上面的代码,直接在主线程中定义Handler成员。在子线程中通过主线程的handler向主线程发送消息。其使用步骤如下:
1、在主线程中定义handler,并为这个handler实现handleMessage方法。
2、在子线程中调用主线程的handler,通过其sendMessage方法发送消息。


【应用示例二】

public class Activity1 extends Activity implements OnClickListener{

       Button button = null;

       TextView text = null;

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              setContentView(R.layout.activity1);        

              button = (Button)findViewById(R.id.btn);

              button.setOnClickListener(this);

              text = (TextView)findViewById(R.id.content);

       }

       public void onClick(View v) {

              switch (v.getId()) {

              case R.id.btn:

                     Looper looper = Looper.myLooper();//取得当前线程里的looper

                     MyHandler mHandler = new MyHandler(looper);//构造一个handler使之可与looper通信

                     //buton等组件可以由mHandler将消息传给looper后,再放入messageQueue中,同时mHandler也可以接受来自looper消息

                     mHandler.removeMessages(0);

                     String msgStr = "主线程不同组件通信:消息来自button";

                     Message m = mHandler.obtainMessage(1, 1, 1, msgStr);//构造要传递的消息

                     mHandler.sendMessage(m);//发送消息:系统会自动调用handleMessage方法来处理消息

                     break;

 

              }            

       }     

       private class MyHandler extends Handler{             

              public MyHandler(Looper looper){

                     super(looper);

              }

              @Override

              public void handleMessage(Message msg) {//处理消息

                     text.setText(msg.obj.toString());

              }            

       }

}

 
这是另一种使用handler的方法是可以派生一个Handler的子类,在子类中实现handleMessage方法。
1、定义Handler的派生类,并在子类中实现handleMessage方法。
2、在主线程的类中,定义该子类的对象。
3、在子线程中,调用主线程中的对象。


3.2 handler传递runnable对象
还有另外一种用Handler来进行线程间通信的方式,那就是用Handler来传递一个runnable对象,而不是一个message。
【应用实例三】


使用步骤
1、在主线程中定义Handler对象
2、构造一个runnable对象,为该对象实现runnable方法,在该方法中进行一些你想做的耗时操作。
3、在子线程中使用Handler对象post(runnable)对象.
 
 
 
 

分享到:
评论

相关推荐

    关于handler 的实例

    总的来说,这个关于Handler的实例是Android开发中的一个基础但关键的学习点,通过它,开发者可以掌握如何有效地管理线程,保证UI的流畅更新,以及如何进行线程间的通信。对于Android应用的性能优化和用户体验提升...

    安卓关于handler的使用

    在Android开发中,`Handler`、`Looper`和`Message`是实现线程间通信的重要组件,特别是当涉及到主线程(UI线程)与工作线程之间的数据交互时。本篇将深入讲解如何在Android中使用`Handler`,并提供实际的代码示例。 ...

    handler的简单示例

    在Android开发中,Handler是一种非常重要的机制,它用于在主线程中处理来自其他线程的消息,从而实现线程间通信,尤其是对UI...通过实践和学习更多关于Handler的知识,开发者可以更好地掌握Android应用的异步编程技巧。

    Handler实例

    `Handler`是Android提供的一个关键工具,用于解决多线程环境下的消息传递和处理问题。本篇文章将深入探讨`Handler`实例及其在Android线程通信中的应用。 首先,线程间通信在Android中通常涉及到主线程(UI线程)与...

    Handler实现图片播放

    在Android开发中,图片...这个简单的HandlerDemo可以作为初学者理解多线程与UI交互的一个起点,随着技术的深入,你还可以学习更多关于Handler、Looper、Message队列的高级用法,以及如何在复杂的项目中更好地管理它们。

    Handler使用相关的三个实例

    以下是关于Handler使用相关的三个实例所体现的知识点的详细解释: 1. **Handler的创建和工作原理** Handler的创建通常需要配合Looper。Looper是每个线程中的消息循环器,它负责接收并分发Message。在主线程中,...

    handler全面分析

    在面试中,面试官可能会询问关于Handler的内存泄漏问题。由于Handler实例通常持有对Activity的引用,如果不正确地管理,可能导致Activity无法被垃圾回收,从而引发内存泄漏。为避免这种情况,我们可以在Activity的`...

    Android应用源码之HandlerMessage3.zip

    以上就是关于HandlerMessage的基础知识及其在Android应用中的使用。通过深入研究"Android应用源码之HandlerMessage3.zip",开发者可以更直观地学习到这些概念的实际运用,提升自己的Android编程技能。

    handler机制1

    下面是关于Handler机制的详细说明: 1. **Looper的准备**:`Looper.prepare()`方法会在当前线程中创建并初始化一个Looper对象。这个方法会确保每个线程只调用一次,因此在同一个线程中,只有一个MessageQueue被创建...

    Handler使用

    在Android开发中,`Handler`是一个至关...以上就是关于`Handler`的基本使用方法、工作原理、避免内存泄露以及实现定时任务的详细解析。在实际开发中,熟练掌握`Handler`的运用,能有效提高代码的可读性和程序的响应性。

    Fragment与Activity使用Handler进行交互

    在这种情况下,Handler机制可以作为一个有效的工具来实现线程间的通信。本文将深入探讨如何在Fragment和Activity之间使用Handler进行交互。 首先,了解Handler的基本概念。Handler是Android中的一个消息处理类,它...

    android 中Handler 的几种写法

    在Android开发中,`Handler`是一个至关重要的组件,它用于在主线程中处理来自其他线程的消息,确保UI更新和事件处理的同步性。本文将详细介绍`Handler`的几种常见写法,以及如何使用`Handler.Callback`进行消息处理...

    jobHandler调度器

    "JobHandler调度器"是一种广泛应用于分布式任务调度的框架,主要设计用于处理大规模并发和定时任务的场景。在这个系统中,JobHandler是核心组件,它负责执行具体的业务逻辑。下面我们将详细探讨JobHandler调度器的...

    Handlerjava代码实现

    在Android开发中,`Handler`是一个非常重要的组件,它用于处理UI线程之外的异步消息,实现线程间通信。`Handler`、`Looper`和`Message`三者共同构成了Android的消息处理机制,帮助开发者在不同的线程之间传递数据和...

    handler用法

    在Android开发中,Handler是一种非常重要的机制,它用于在主线程和子线程之间进行通信,处理异步消息。理解并熟练使用Handler是每个Android开发者必备的技能之一。本篇文章将详细讲解Handler的基本概念、工作原理...

    关于Handler二三事(上)

    一直以来,Handler于我而言都是难以形容的大麻烦。姑且不论线程通信一二三,就算是如何利用Handler来实现各项业务间消息传输,我也只能粗浅的说说如何跟踪消息而已。跟它较劲了很久,零零碎碎总结了不少,总算是明白...

    Handler 推荐用法 demo

    在Android开发中,`Handler`是一个至关重要的组件,主要用于处理线程间的通信,尤其是主线程(UI线程)与工作线程之间的交互。本`Handler`推荐用法的示例,旨在帮助开发者理解和掌握如何有效地使用`Handler`来管理...

    Foxit PDF Preview Handler

    Foxit PDF Preview Handler 是一款专为Outlook 2007设计的插件,它使得用户可以在不离开邮件客户端的情况下预览PDF附件。这款工具极大地提升了处理PDF文档的效率,尤其是在处理大量PDF邮件附件时,避免了频繁打开...

    安卓handler的使用

    在Android应用开发中,Handler是一种重要的线程通信机制,它与Looper、Message紧密配合,用于在不同的线程间传递消息,解决多线程同步问题。本篇将详细讲解Handler的使用,包括如何创建Handler对象、如何发送和处理...

Global site tag (gtag.js) - Google Analytics