Android handler异步更新

标签: android handler 异步 | 发表时间:2012-12-10 16:27 | 作者:南瓜饼
出处:http://www.cnblogs.com/

方法一:

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下载地址:

本文链接

相关 [android handler 异步] 推荐:

Android handler异步更新

- - 博客园_首页
private static final int MSG_SUCCESS = 0;// 获取图片成功的标识. private static final int MSG_FAILURE = 1;// 获取图片失败的标识. mImageView.setImageBitmap((Bitmap) msg.obj);// imageview显示从网络获取到的logo.

深入浅出Android Handler

- - HelloSure
Thread/Looper/Message/Handler的关系. 当一个Android应用程序第一次启动时,Android框架为应用程序的主线程创建一个Looper对象. 一个Looper实现了一个简单的消息队列,在一个循环中处理Message对象. 所有主要的应用程序框架事件(如活动生命周期方法调用,单击按钮,等等)都包含在Message对象,它被添加到Looper的消息队列然后一个个被处理.

AsyncTask和Handler两种异步方式的实现和区别比较

- - 移动开发 - ITeye博客
1  AsyncTask实现的原理,和适用的优缺点. AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.. l  在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来..

Android异步接口测试

- - 百度质量部 | 软件测试 | 测试技术 | 百度测试
    基于Android的C/S移动应用中访问后端数据的场景是非常多的,异步接口测试主要是在单元测试完成的基础上检查接口级访问是否正确,主要保证对外请求的组装与发送是否符合后端的约定. 现在项目的异步接口访问都遵循一个特定的访问模式:前台的Activity获取到触发事件后将接受到的参数传给一个异步任务,这些任务大都是AsyncTask的实现——即启动一个新的线程访问后台接口数据,完毕后调用回调函数更新UI展示,示意图如下:.

Spring MVC handler method 参数绑定常用的注解

- - 开源软件 - ITeye博客
参考链接:http://csjava.blog.163.com/blog/static/1904700332012102742025948/?COLLCC=3184617125&COLLCC=1892771493&COLLCC=1691444901. 请求路径上有个id的变量值,可以通过@PathVariable来获取  @RequestMapping(value = "/page/{id}", method = RequestMethod.GET).

Android 视频缩略图的缓存机制和异步加载

- - 移动开发 - ITeye博客
关注微信号:javalearns   随时随地学Java. 在这次的工作开发项目中,涉及到一个视频缩略图的视频列表;这个在大家看来,制作视频缩略图就是两行代码就搞定的事. 确实是这样的,百度一下,每个 帖子都知道制作视频缩略图的方法,在这里确实也是一样的,但是我要实现的是让缩略图 在ListView上显示,而且不会出现卡顿,其实也不是特别难,确实很实用;.

Android 异步获取网络图片并处理图片Out Of Memory 内存溢出问题

- - 博客园_首页
测试环境为Adnroid 2.1以上. 1:AndroidManifest.xml 权限配置:. 2.异步图片类 ImageDownloadTask . * 这里获取到手机的分辨率大小. 如:http://www.xxxxxx.com/xx.jpg. //这3句是处理图片溢出的begin( 如果不需要处理溢出直接 opts.inSampleSize=1;).

教你如何更省流量刷空间,微博---Android之异步加载网络图片

- - 编程语言 - ITeye博客
      朋友你是否有过这样的经历,当你刷空间,刷微博的时候,有的时候那些图片加载要很长时间,有的却直接可以看到无需慢慢等待,尤其是那些你已经刷过的内容,即使你处于断网的状态下也能看到,往往这种客户体验相对而言比较好,但是有的时候我们清理了手机的一些垃圾后,就不一样了,我们还得从新刷出来,下面我就要说说这个原理了.

Android性能优化之实现双缓存的图片异步加载工具(LruCache+SoftReference) - 拿来即用

- - CSDN博客推荐文章
之前在郭大神的博客看到使用LruCache算法实现图片缓存的.这里仿效他的思路,自己也写了一个. 并加入ConcurrentHashMap>去实现二级缓存,因为ConcurrentHashMap是多个锁的线程安全,支持高并发.很适合这种频繁访问读取内存的操作..

linux异步IO浅析

- Sepher - kouu's home
知道异步IO已经很久了,但是直到最近,才真正用它来解决一下实际问题(在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上. 预先知道这些数据的位置,所以预先发起异步IO读请求. 等到真正需要用到这些数据的时候,再等待异步IO完成. 使用了异步IO,在发起IO请求到实际使用数据这段时间内,程序还可以继续做其他事情).