Handler介绍

 

  下面举个例子:

  在main.xml文件中:

 1 <LinearLayout 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     android:orientation="vertical">
 6
 7     <ImageView
 8         android:id="@+id/imageView1"
 9         android:layout_width="fill_parent"
10         android:layout_height="0dp"
11          android:layout_weight="7"/>
12
13     <Button
14         android:id="@+id/button1"
15         android:layout_width="fill_parent"
16         android:layout_height="0dp"
17         android:background="@drawable/shape_button"
18         android:layout_weight="1"
19         android:text="下载图片" />
20 </LinearLayout>

  在MainActivity.java文件中:

package com.example.handler1;

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {

    private String image_path = "http://p0.so.qhimg.com/t01aa653c8cd80777a5.jpg";
    private Message message;
    private Button button;
    private ProgressDialog dialog;
    private ImageView imageView;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            // TODO 自动生成的方法存根
            super.handleMessage(msg);
            byte[] data = (byte[]) msg.obj;
            imageView.setImageBitmap(BitmapFactory.decodeByteArray(data, 0,data.length));
            if(1 == msg.what){
                dialog.dismiss();
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dialog = new ProgressDialog(MainActivity.this);
        dialog.setTitle("提示");
        dialog.setMessage("正在下载,请稍候...");
        button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO 自动生成的方法存根
                dialog.show();
                dialog.setCancelable(false);
                new Thread(new MyThread()).start();
            }
        });

    imageView = (ImageView) findViewById(R.id.imageView1);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    private class MyThread implements Runnable{

        @Override
        public void run() {
            // TODO 自动生成的方法存根

            HttpClient client = new DefaultHttpClient();
            HttpGet get = new HttpGet(image_path);
            try {
                HttpResponse response = client.execute(get);
                if(response.getStatusLine().getStatusCode() == 200){
                    HttpEntity entity = response.getEntity();
                    byte[] data = EntityUtils.toByteArray(entity);
                    message = Message.obtain();
                    message.obj = data;
                    message.what = 1;
                    handler.sendMessage(message);
                }

            } catch (Exception e) {
                // TODO: handle exception
            }
        }

    }
}

  在AndroidManifest.xml文件中配置下网络权限:

  <uses-permission android:name="android.permission.INTERNET"/>

  运行结果:

时间: 2024-08-02 11:02:31

Handler介绍的相关文章

微软企业库5.0 学习之路——第九步、使用PolicyInjection模块进行AOP—PART3——内置Call Handler介绍

在前面的Part1和Part2中 我已经介绍了PolicyInjection模块的内置的Matching Rule和自定义Matching Rule的基本信息及配置使用方法,不过光有Matching Rule进行验证匹配还不够,还必须要有相应的操作——Call Handler,所以今天继续介绍PolicyInjection模块内置的Call Handler. 一.PolicyInjection模块内置的Call Handler 通过将Call Handler和Part1.Part2中 的Matc

Asp.Net 构架(Http Handler 介绍) - Part.2

原文地址:http://www.cnblogs.com/JimmyZhang/archive/2007/09/15/894124.html 引言 在 Part.1 Http请求处理流程 一文中,我们了解了Http请求的处理过程以及其它一些运作原理.我们知道Http管道中有两个可用接口,一个是IHttpHandler,一个是IHttpModule,但在Part.1中,我并没有详细讲述如何对它们进行编程,只是轻描淡写地一笔带过.所谓学以致用,前面已经介绍了不少概念和原理.在本文中,我们通过几个范例来

Http Handler 介绍

引言 在 Part.1 Http请求处理流程 一文中,我们了解了Http请求的处理过程以及其它一些运作原理.我们知道Http管道中有两个可用接口,一个是IHttpHandler,一个是IHttpModule,但在Part.1中,我并没有详细讲述如何对它们进行编程,只是轻描淡写地一笔带过.所谓学以致用,前面已经介绍了不少概念和原理.在本文中,我们通过几个范例来了解 IHttpHandler,看看掌握这些原理的实际用途. IHttpHandler 概述 可能和我一样,很多Asp.Net开发人员都有过

Android中的Handler介绍

一.Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作.  如果此时需要一个耗时的操作,例如: 联网读取数据,    或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,,如果你放在主线程中的话,界面会出现假死现象, 如果5

Asp.Net构架(Http请求处理流程)、Asp.Net 构架(Http Handler 介绍)、Asp.Net 构架(HttpModule 介绍)

转载: HttpHaddler,HttpModule http://blog.csdn.net/jiuqiyuliang/article/details/18713451 http://www.cnblogs.com/Charles2008/archive/2009/02/17/1392101.html WCF rest http://blog.csdn.net/jiuqiyuliang/article/details/18713451 http://www.cnblogs.com/lanvig

Android消息机制(Handler、MessageQueue、Looper)详细介绍

Android的消息机制其实在android的开发过程中指的也就是Handler的运行机制,这也就引出了android中常见的面试问题: 简述Handler.Looper.MessageQueue的含义,以及它们之间的关系 简述Handler的运行机制 说明Handler.Looper以及Message之间的关系 Handler机制为什么这么重要呢? 我们知道android设备作为一台移动设备,不管是内存或者还是它的性能都会受到一定的限制:过多的使用内存会使内存溢出(OOM):另外一方面,大量的

Handler与AsyncTask比较

AsyncTask实现的原理和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: 简单,快捷 过程可控 使用的缺点: 在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来. Handler异步实现的原理和适用的优缺点 在Handler 异步实现时,涉及到 Handler, Looper, Message,Th

AsyncTask和Handler的优缺点比较

AsyncTask实现的原理和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: 简单,快捷 过程可控 使用的缺点: 在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来. Handler异步实现的原理和适用的优缺点 在Handler 异步实现时,涉及到 Handler, Looper, Message,Th

Http Module 介绍

引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类进行处理(应该记得Page类实现了IHttpHandler).从 Http 请求处理流程 一文的最后的一幅图中可以看到,在Http请求由IHttpHandler处理之前,它需要通过一系列的Http Module:在请求处理之后,它需要再次通过一系列的Http Module,那么这些Http Modul