Android handler异步更新
方法一:
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
分类:
android_handler
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器