可加进度条、sendMessage(Message)
package com.example.administrator.downloadimage; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.widget.ImageView; 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 java.io.IOException; /** * Created by Administrator on 2017/5/4. */ public class HandleMessageActivity extends AppCompatActivity { private ImageView imgview; private ProgressDialog pDialog; private String url = "http://litchiapi.jstv.com/Attachs/Top/11949/e650e0201de541d2ba91dca202b0fcfe.jpg"; private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0: pDialog.show(); break; case 1: imgview.setImageBitmap((Bitmap) msg.obj); break; case 2: pDialog.dismiss(); break; } } }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main1); imgview = (ImageView) this.findViewById(R.id.imgview); pDialog = new ProgressDialog(this); //下载提示对话框 pDialog.setIcon(R.mipmap.ic_launcher); pDialog.setTitle("提示"); pDialog.setMessage("The picture is loading..."); new Thread(new Runnable() { //主线程中用Thread开辟子线程,Runnable只是一个接口 @Override public void run() { // 1 发送空消息,显示进度对话框 handler.sendEmptyMessage(0); // 2 下载操作 byte[] data = download(url); Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); Message message = Message.obtain(); //创建信息 //尽管Message有public的默认构造方法, // 但是应该通过Message.obtain()来从消息池中获得空消息对象,以节省资源。 // 通过调用obtainMessage方法获取Message对象就能避免创建对象,从而减少内存的开销了。 message.obj = bitmap; //如果你的message只需要携带简单的int信息, // 请优先使用Message.arg1和Message.arg2来传递信息,这比用Bundle更省内存. message.what = 1; //擅用message.what来标识信息,以便用不同方式处理message。 handler.sendMessage(message);// 关键方法:sendMessage // 3 发送空消息,关闭进度对话框 handler.sendEmptyMessage(2); } }).start(); } public byte[] download(String url) { try { HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(url); HttpResponse response = client.execute(get); if (response.getStatusLine().getStatusCode() == 200) { return EntityUtils.toByteArray(response.getEntity()); } } catch (IOException e) { e.printStackTrace(); } return null; } }: post(Runnable)
package com.example.administrator.downloadimage; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.ImageView; 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 java.io.IOException; /** * Created by Administrator on 2017/5/4. */ public class HandlerPostActivity extends AppCompatActivity { private ImageView imgview; private String url = "http://litchiapi.jstv.com/Attachs/Top/11949/e650e0201de541d2ba91dca202b0fcfe.jpg"; private Handler handler = new Handler(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main1); imgview = (ImageView) this.findViewById(R.id.imgview); // 工作线程 new Thread(new Runnable() { @Override public void run() {// 子线程:下载数据 Log.i("MainActivity", "first:" + Thread.currentThread().getName()); //获取当前线程的名字 // 下载数据 byte[] data = download(url); final Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); // handler与绑定的主线程提交一个任务 handler.post(new Runnable() {// 关键方法:post @Override public void run() {// 主线程:更新UI Log.i("MainActivity", "second:" + Thread.currentThread().getName()); imgview.setImageBitmap(bitmap); } }); } }).start(); } public byte[] download(String url) { //下载方法 try { HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(url); HttpResponse response = client.execute(get); if (response.getStatusLine().getStatusCode() == 200) { return EntityUtils.toByteArray(response.getEntity()); } } catch (IOException e) { e.printStackTrace(); } return null; } }