`

安卓Handler和Message

 
阅读更多

文章来源:http://www.itnose.net/detail/6025287.html
更多文章:http://www.itnose.net/type/67.html

activity_main.xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.   
  6.     <Button  
  7.         android:id="@+id/button1"  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:layout_alignParentBottom="true"  
  11.         android:layout_centerHorizontal="true"  
  12.         android:text="下载网络图片" />  
  13.   
  14.     <ImageView  
  15.         android:id="@+id/imageView1"  
  16.         android:layout_width="wrap_content"  
  17.         android:layout_height="wrap_content"  
  18.         android:layout_centerHorizontal="true"  
  19.         android:layout_centerVertical="true"  
  20.         android:src="@drawable/ic_launcher" />  
  21.   
  22. </RelativeLayout>  


MainActivity

  1. package com.example.android_asytask_download;  
  2.   
  3. import java.io.ByteArrayOutputStream;  
  4. import java.io.InputStream;  
  5.   
  6. import org.apache.http.HttpEntity;  
  7. import org.apache.http.HttpResponse;  
  8. import org.apache.http.client.HttpClient;  
  9. import org.apache.http.client.methods.HttpGet;  
  10. import org.apache.http.impl.client.DefaultHttpClient;  
  11. import org.apache.http.util.EntityUtils;  
  12.   
  13. import android.os.AsyncTask;  
  14. import android.os.Bundle;  
  15. import android.os.Handler;  
  16. import android.os.Message;  
  17. import android.R.integer;  
  18. import android.app.Activity;  
  19. import android.app.ProgressDialog;  
  20. import android.content.Entity;  
  21. import android.graphics.Bitmap;  
  22. import android.graphics.BitmapFactory;  
  23. import android.view.Menu;  
  24. import android.view.View;  
  25. import android.widget.Button;  
  26. import android.widget.ImageView;  
  27.   
  28. public class MainActivity extends Activity {  
  29.     private Button button;  
  30.     private ImageView imageView;  
  31.     private ProgressDialog progressDialog;  
  32.     private final int IS_END = 1;  
  33.     private String image_path = "http://a.hiphotos.baidu.com/image/w%3D2048/sign=7610c70c5143fbf2c52ca1238446cb80/d4628535e5dde71120a3a1f2a5efce1b9d166145.jpg";  
  34.     private Handler handler = new Handler() {  
  35.         @Override  
  36.         public void handleMessage(android.os.Message msg) {  
  37.             byte[] data = (byte[]) msg.obj;  
  38.             Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);  
  39.             imageView.setImageBitmap(bitmap);  
  40.             if(msg.what==IS_END)  
  41.             {  
  42.                 progressDialog.dismiss();  
  43.             }  
  44.         };  
  45.     };  
  46.   
  47.     @Override  
  48.     protected void onCreate(Bundle savedInstanceState) {  
  49.         super.onCreate(savedInstanceState);  
  50.         setContentView(R.layout.activity_main);  
  51.   
  52.         button = (Button) this.findViewById(R.id.button1);  
  53.         imageView = (ImageView) this.findViewById(R.id.imageView1);  
  54.         progressDialog = new ProgressDialog(this);  
  55.         progressDialog.setTitle("提示");  
  56.         progressDialog.setMessage("正在下载,请稍后...");  
  57.         progressDialog.setCancelable(false);// 点击不会失去焦点,直到下载结束  
  58.   
  59.         button.setOnClickListener(new View.OnClickListener() {  
  60.   
  61.             @Override  
  62.             public void onClick(View arg0) {  
  63.                 // TODO Auto-generated method stub  
  64.                 new Thread(new MyThread()).start();  
  65.                 progressDialog.show();  
  66.             }  
  67.         });  
  68.     }  
  69.   
  70.     public class MyThread implements Runnable {  
  71.         @Override  
  72.         public void run() {  
  73.             // 线程耗时部分的主体操作  
  74.             HttpClient httpClient = new DefaultHttpClient();  
  75.             HttpGet httpGet = new HttpGet(image_path);  
  76.             try {  
  77.                 HttpResponse httpResponse = httpClient.execute(httpGet);// 执行http操作  
  78.                 if (httpResponse.getStatusLine().getStatusCode() == 200) {  
  79.                     byte[] data = EntityUtils.toByteArray(httpResponse  
  80.                             .getEntity());  
  81.                     // 一般实例化消息对象不用new Message(),而是通过Message.obtain()  
  82.                     Message message = Message.obtain();  
  83.                     message.obj = data;  
  84.                     message.what = IS_END;  
  85.                     handler.sendMessage(message);// handler对象发送消息  
  86.                 }  
  87.             } catch (Exception e) {  
  88.                 // TODO: handle exception  
  89.             }  
  90.         }  
  91.     }  
  92.   
  93.     @Override  
  94.     public boolean onCreateOptionsMenu(Menu menu) {  
  95.         // Inflate the menu; this adds items to the action bar if it is present.  
  96.         getMenuInflater().inflate(R.menu.main, menu);  
  97.         return true;  
  98.     }  
  99.   
  100. }  


演示效果图片0演示效果图片1演示效果图片2

1.Handler对象负责发送消息和处理消息

2.Message消息对象实例化使用Message message = Message.obtain();

分享到:
评论

相关推荐

    Android Handler Looper Message 使用示例

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

    android多线程handler/message机制详解

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

    android线程handler、message、looperDEMO

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

    Android handler message奇怪用法详解

    通常,我们使用Handler配合Looper和Message来实现在主线程(UI线程)中执行后台任务的结果。Looper是消息队列的循环器,它不断检查消息队列并分发消息给相应的Handler处理。Message则是承载数据的对象,用于在...

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

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

    Android中Handler与Message的简单实例

    Android中Handler与Message的简单实例 前言: 虽然笔者已经学习了Android的AsyncTask来实现一部消息的处理。但是在android的学习中,经常会在一些demo中看到Handler与Message的一些使用,所以Handler与Message的学习...

    Handler Looper MessageQueue 源码解析

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

    Android应用源码之HandlerMessage1_HandlerMessage.zip

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

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

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

    Android Handler传值的demo

    在Android开发中,`Handler`、`Message`和`Looper`是实现线程间通信的重要机制,特别是当需要在主线程(UI线程)和工作线程之间传递数据时。本示例“Android Handler传值的demo”将帮助我们深入理解这一机制。 `...

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

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

    Android Handler Message一些知识总结的Demo

    以前刚接触的Handler的时候,感觉总是很困惑,对Handler原理也是一知半解,现在对Handler知识点总结一下,写了一个Demo,供参考。http://blog.csdn.net/yalinfendou博客中有详细介绍……

    Message,MessageQueue,Looper,Handler详解

    综上所述,Message、MessageQueue、Looper和Handler这四个组件共同构成了Android应用程序中处理消息的基本机制。通过它们之间的相互协作,使得应用程序能够在不同的线程间高效地传递和处理消息,从而实现了复杂的...

    Android Handler Looper

    在Android应用开发中,Handler、Looper和Message是实现线程间通信的重要机制,尤其是在主线程与工作线程之间同步数据和执行UI更新时。Handler、Looper和Message三者结合使用,构建了一个消息处理系统,使得非UI线程...

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

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

    android 中Handler 的几种写法

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

    安卓handler的使用

    在Android应用开发中,Handler是一种重要的线程通信机制,它与Looper、Message紧密配合,用于在不同的线程间传递消息,解决多线程...在AndroidHandler这个项目中,你可以找到相关的代码示例,加深对Handler机制的理解。

    安卓Android源码——HandlerMessage2.rar

    本资源"安卓Android源码——HandlerMessage2.rar"可能包含了关于`Handler`和`Message`的深入实践和示例代码,下面我们将详细探讨这些核心组件。 `Handler` 是 Android 中用于在线程间传递消息的对象。它通常用于将...

    深入Android Handler,MessageQueue与Looper关系

    Android 消息机制是 Android 程序设计中非常重要的一部分,其中 Handler、MessageQueue 和 Looper 是三个紧密相关的概念。Handler 是 Android 消息机制的上层接口,我们在开发过程中只需要和 Handler 交互即可。...

    模拟Android Handler机制Demo

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

Global site tag (gtag.js) - Google Analytics