安卓Handler和Message

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

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent" >  
  
    <Button  
        android:id="@+id/button1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_alignParentBottom="true"  
        android:layout_centerHorizontal="true"  
        android:text="下载网络图片" />  
  
    <ImageView  
        android:id="@+id/imageView1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_centerHorizontal="true"  
        android:layout_centerVertical="true"  
        android:src="@drawable/ic_launcher" />  
  
</RelativeLayout>  


MainActivity

package com.example.android_asytask_download;  
  
import java.io.ByteArrayOutputStream;  
import java.io.InputStream;  
  
import org.apache.http.HttpEntity;  
import org.apache.http.HttpResponse;  
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.AsyncTask;  
import android.os.Bundle;  
import android.os.Handler;  
import android.os.Message;  
import android.R.integer;  
import android.app.Activity;  
import android.app.ProgressDialog;  
import android.content.Entity;  
import android.graphics.Bitmap;  
import android.graphics.BitmapFactory;  
import android.view.Menu;  
import android.view.View;  
import android.widget.Button;  
import android.widget.ImageView;  
  
public class MainActivity extends Activity {  
    private Button button;  
    private ImageView imageView;  
    private ProgressDialog progressDialog;  
    private final int IS_END = 1;  
    private String image_path = "http://a.hiphotos.baidu.com/image/w%3D2048/sign=7610c70c5143fbf2c52ca1238446cb80/d4628535e5dde71120a3a1f2a5efce1b9d166145.jpg";  
    private Handler handler = new Handler() {  
        @Override  
        public void handleMessage(android.os.Message msg) {  
            byte[] data = (byte[]) msg.obj;  
            Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);  
            imageView.setImageBitmap(bitmap);  
            if(msg.what==IS_END)  
            {  
                progressDialog.dismiss();  
            }  
        };  
    };  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        button = (Button) this.findViewById(R.id.button1);  
        imageView = (ImageView) this.findViewById(R.id.imageView1);  
        progressDialog = new ProgressDialog(this);  
        progressDialog.setTitle("提示");  
        progressDialog.setMessage("正在下载,请稍后...");  
        progressDialog.setCancelable(false);// 点击不会失去焦点,直到下载结束  
  
        button.setOnClickListener(new View.OnClickListener() {  
  
            @Override  
            public void onClick(View arg0) {  
                // TODO Auto-generated method stub  
                new Thread(new MyThread()).start();  
                progressDialog.show();  
            }  
        });  
    }  
  
    public class MyThread implements Runnable {  
        @Override  
        public void run() {  
            // 线程耗时部分的主体操作  
            HttpClient httpClient = new DefaultHttpClient();  
            HttpGet httpGet = new HttpGet(image_path);  
            try {  
                HttpResponse httpResponse = httpClient.execute(httpGet);// 执行http操作  
                if (httpResponse.getStatusLine().getStatusCode() == 200) {  
                    byte[] data = EntityUtils.toByteArray(httpResponse  
                            .getEntity());  
                    // 一般实例化消息对象不用new Message(),而是通过Message.obtain()  
                    Message message = Message.obtain();  
                    message.obj = data;  
                    message.what = IS_END;  
                    handler.sendMessage(message);// handler对象发送消息  
                }  
            } catch (Exception e) {  
                // TODO: handle exception  
            }  
        }  
    }  
  
    @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;  
    }  
  
}  


安卓Handler和Message安卓Handler和Message安卓Handler和Message

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

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

相关推荐