`
寻梦者
  • 浏览: 637573 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Handler对象的Message应用

阅读更多

知识点

     接受子线程发送的消息数据,并用此消息数据配合主线程更新UI。

     根据消息数据中的标识msg.what,分类处理相应的操作。

 

范例程序

    为了让线程对象Runnable运行过程中,可以不断地将信息往Activity传递,所以用了Android.os.Handler对象及Android.os.Message对象,且在类成员变量中声明了两个整数:STOP_NOTIFIERRUNNING_NOTIFIER,这两个整数将作为信息传递出来时的信号标识,前者为线程对象Runnable需要喊停的标识,后者为线程对象Runnable正在运行的标识。

    本范例中,摆放一个按钮和一个进度条控件。按钮用于复位参数和启动线程对象Runnable。

具体代码如下:

 

  1. package com.lyg.progressbarhandler;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.os.Handler;  
  6. import android.os.Message;  
  7. import android.util.Log;  
  8. import android.view.View;  
  9. import android.view.View.OnClickListener;  
  10. import android.view.Window;  
  11. import android.view.WindowManager;  
  12. import android.widget.Button;  
  13. import android.widget.ProgressBar;  
  14.   
  15. public class progressBarHandler extends Activity {  
  16.     /** Called when the activity is first created. */  
  17.     /* 自定义Handler信息代码,作为标识事件处理 */  
  18.     protected static final int STOP_NOTIFIER = 0x108;//停止标识  
  19.     protected static final int RUNNING_NOTIFIER = 0x109;//运行标识  
  20.   
  21.     private Button bnStart;  
  22.     private ProgressBar progBar;  
  23.       
  24.     @Override  
  25.     public void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.           
  28.         //全屏显示  
  29.         // 注:以下两行不可放在setContentView之后,否则报错。  
  30.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  31.         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
  32.                 WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  33.   
  34.         setContentView(R.layout.main);  
  35.   
  36.         progBar = (ProgressBar) findViewById(R.id.progressbar);  
  37.         bnStart = (Button) findViewById(R.id.bnstart);  
  38.         bnStart.setOnClickListener(new bnStartOnClickListener());  
  39.   
  40.         // 初始化进度条控件  
  41.         progBar.setProgress(0);  
  42.   
  43.     }  
  44.       
  45.     class bnStartOnClickListener implements OnClickListener{  
  46.   
  47.         @Override  
  48.         public void onClick(View arg0) {  
  49.             // TODO Auto-generated method stub  
  50.             //线程调用跟踪  
  51.             Log.d("lyg""onClick-->id="+Thread.currentThread().getId()+" name="+Thread.currentThread().getName());  
  52.               
  53.             progBar.setProgress(0);//设置进度控件当前进度为0  
  54.               
  55.             //将线程对象runable放到消息队列中  
  56.             handler.post(runable);  
  57.         }  
  58.     }  
  59.       
  60.     //Handler构建之后,会监听传来的消息  
  61.     Handler handler=new Handler(){  
  62.         @Override  
  63.         public void handleMessage(Message msg) {  
  64.             // TODO Auto-generated method stub  
  65.             super.handleMessage(msg);  
  66.             System.out.println("Handler handleMessage");  
  67.             switch(msg.what)  
  68.             {  
  69.                 case STOP_NOTIFIER:  
  70.                 {  
  71.                     progBar.setProgress(msg.arg1);//设置进度控件的当前进度为msg.arg1  
  72.                     handler.removeCallbacks(runable);//清除队列中的未执行的runable  
  73.                 }  
  74.                 break;  
  75.                 case RUNNING_NOTIFIER:  
  76.                 {  
  77.                     progBar.setProgress(msg.arg1);//设置进度控件的当前进度为msg.arg1li
    分享到:
    评论

相关推荐

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

    理解Thread、Looper、Handler、Message、MessageQueue和MessagePool之间的关系对于优化Android应用的性能和响应速度至关重要。开发者需要熟练掌握这一机制,以便在多线程环境中正确处理异步任务,保证UI的流畅性。在...

    Handler Looper MessageQueue 源码解析

    在主线程中,一个Handler对象可以接收并处理由其他线程(如工作线程)通过MessageQueue发送的消息。创建Handler时,通常会关联到一个Looper,这个Looper负责从MessageQueue中取出消息并分发给对应的Handler。 接着...

    android线程handler、message、looperDEMO

    `Message` 是一个轻量级的对象,用于在`Handler`之间传递数据。它包含了要传递的信息,如整型值、字符串或者自定义对象。`Message`可以通过`obtain()`静态方法复用,以减少内存分配。`Message`还有一个`.what`字段...

    Message,MessageQueue,Looper,Handler详解

    此外,还可以通过Handler对象的`obtainMessage()`方法来获取一个Message实例。 当调用`removeMessages()`方法时,将会把Message从MessageQueue中删除,并同时放入到MessagePool中以便后续重复使用。 ##### 3、...

    Android应用源码之HandlerMessage1_HandlerMessage.zip

    在Android应用开发中,HandlerMessage1_HandlerMessage是一个关键的主题,涉及到Android系统中的消息处理机制,尤其是Handler、Message和Looper的使用。这些组件是Android异步编程的重要组成部分,用于解决UI线程与...

    Android应用源码之HandlerMessage2_应用.zip

    本压缩包"Android应用源码之HandlerMessage2_应用.zip"包含了关于如何在Android应用中使用Handler和Message来处理异步任务和更新UI的示例源代码。下面我们将深入探讨这两个核心组件以及它们在Android中的工作原理。 ...

    Android handler message奇怪用法详解

    8. **Message的target属性**:除了Handler外,Message还可以设置其他目标,比如其他实现了Runnable接口的对象,这样可以在不直接使用Handler的情况下分发消息。 9. **自定义Looper**:虽然默认的Looper已经满足...

    Android应用源码之HandlerMessage1.zip

    【Android应用源码之HandlerMessage1.zip】是一个与Android应用程序开发相关的压缩包,重点在于讲解Handler和Message在Android系统中的使用。在这个项目中,我们可能会看到一个简单的Android应用实例,该实例展示了...

    理解handler,message,Android简单时钟程序

    在Android开发中,`Handler`、`Message`和线程管理是至关重要的概念,尤其是在创建实时更新的应用,如时钟程序时。让我们深入探讨这些概念,并通过一个简单的时钟程序来理解它们的工作原理。 首先,我们需要了解...

    Android应用源码之HandlerMessage3.zip

    在Android应用开发中,HandlerMessage是一个关键的概念,用于在主线程和子线程之间进行通信。这个"Android应用源码之HandlerMessage3.zip"压缩包很可能是包含了一个示例项目,详细展示了HandlerMessage的用法。现在...

    Handler_Message_Looper小结

    // 在主线程中创建Handler对象 Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // 接收消息并处理 switch (msg.what) { case EVENT_GET_SRV_STATUS: // 更新UI或...

    应用源码之HandlerMessage1.zip

    本资料“应用源码之HandlerMessage1.zip”聚焦于这一主题,提供了源码级别的学习材料,帮助开发者深入理解Android异步编程的核心。 首先,我们来探讨`Handler`。`Handler`是Android中的一个类,它允许开发者在不同...

    Android应用源码之HandlerMessage3_Android.zip

    在Android应用开发中,Handler、Message以及Looper是三个至关重要的组件,它们构成了Android中的消息处理机制,用于在主线程和子线程之间进行通信。这个压缩包“Android应用源码之HandlerMessage3_Android.zip”显然...

    应用源码之HandlerMessage2.zip

    `HandlerMessage2.zip`这个资源可能包含了一个关于如何使用`Handler`和`Message`进行异步操作和线程通信的实际应用源码示例。下面将详细阐述`Handler`、`Message`以及它们在Android中的工作原理。 1. **Handler**:...

    Handler对象中使用匿名内部类或非静态内部类正确地释放消息避免内存泄漏或增加Native内存

    Handler对象是实现异步消息处理的关键组件,它允许开发者在后台线程执行任务并在主线程中安全地更新UI。然而,不当使用Handler,尤其是结合匿名内部类或非静态内部类,可能导致内存泄漏和Native内存增加,这对应用...

    应用源码之HandlerMessage3.zip

    本资料“应用源码之HandlerMessage3.zip”聚焦于这一主题,提供了相关的源码分析,便于深入理解这一机制。 `Handler`是Android中的一个关键类,它允许开发者在不同的线程之间发送和处理消息。通常,在主线程(UI...

    Android应用源码之HandlerMessage2.zip

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

    Handler,Looper和Message

    `Handler`的工作原理是,通过`post()`或`sendMessage()`方法发送一个`Message`对象到消息队列,然后由`Looper`负责取出并分发这个消息,进而更新UI。 `Looper`(循环器)是一个消息循环,它负责不断检查消息队列...

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

    【Android异步消息处理机制】深入理解Looper、Handler、Message三者关系 在Android系统中,异步消息处理机制是...理解并熟练掌握Looper、Handler和Message三者的关系对于编写高性能、线程安全的Android应用至关重要。

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

    - **消息发送**:应用程序通过Handler对象发送消息,消息被添加到与Handler关联的MessageQueue中。 - **消息排队**:新发送的消息按照时间顺序排队等待处理。 - **消息获取**:Looper不断从MessageQueue中取出消息,...

Global site tag (gtag.js) - Google Analytics