Android(安卓)handler异步更新
16lz
2021-12-04
方法一:
package com.example.handlerdemo;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 android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.widget.ImageView;import android.widget.Toast;public class MainActivity extends Activity { private static final int MSG_SUCCESS = 0;// 获取图片成功的标识 private static final int MSG_FAILURE = 1;// 获取图片失败的标识 ImageView mImageView; Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case MSG_SUCCESS: mImageView.setImageBitmap((Bitmap) msg.obj);// imageview显示从网络获取到的logo break; case MSG_FAILURE: Toast.makeText(getApplication(), "下载失败", Toast.LENGTH_LONG) .show(); break; } } };protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mImageView = (ImageView) findViewById(R.id.imageView1);// 显示图片的ImageView } public void onClick(View v) { switch (v.getId()) { case R.id.button1: mImageView.setImageBitmap(null); new Thread(new Runnable() { public void run() { HttpClient hc = new DefaultHttpClient(); HttpGet hg = new HttpGet( "http://www.baidu.com/img/baidu_sylogo1.gif");// 获取百度的LOGO final Bitmap bm; try { HttpResponse hr = hc.execute(hg); bm = BitmapFactory.decodeStream(hr.getEntity() .getContent()); } catch (Exception e) { mHandler.obtainMessage(MSG_FAILURE).sendToTarget();// 获取图片失败 return; } mHandler.obtainMessage(MSG_SUCCESS, bm).sendToTarget();// 获取图片成功,向ui线程发送MSG_SUCCESS标识和bitmap对象 } }).start(); break;
} }}
不过这个方法有个小问题 老是提示会内存泄露
方法二:
package com.example.handlerdemo;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 android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.widget.ImageView;import android.widget.Toast;public class MainActivity extends Activity { ImageView mImageView; Handler mHandler02 = new Handler(); protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mImageView = (ImageView) findViewById(R.id.imageView1);// 显示图片的ImageView } public void onClick(View v) { switch (v.getId()) { case R.id.button2: mImageView.setImageBitmap(null); new Thread(new Runnable() { public void run() { HttpClient hc = new DefaultHttpClient(); HttpGet hg = new HttpGet( "http://www.baidu.com/img/baidu_sylogo1.gif");// 获取百度的LOGO try { HttpResponse hr = hc.execute(hg); final Bitmap bm = BitmapFactory.decodeStream(hr.getEntity() .getContent()); mHandler02.post(new Runnable() { public void run() { mImageView.setImageBitmap(bm);// imageview显示从网络获取到的logo } }); } catch (Exception e) { mHandler02.post(new Runnable() { public void run() { Toast.makeText(getApplication(), "下载失败", Toast.LENGTH_LONG).show(); } }); } } }).start(); break; default: break; } }}
用方法二是不会出内存泄露的警告的
效果图:
csdn下载地址:http://download.csdn.net/detail/wenwei19861106/4868799
更多相关文章
- 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
- android关于动态壁纸live WallPaper
- android按分辨率压缩图片
- Android(安卓)ListView异步加载图片
- android 处理图片工具类
- Android获取当前位置信息,百分之百有效
- android 图片缩放
- Android中GridView来显示图片
- android获取设备空闲空间