写博客总是三天打鱼,,两天晒网....今天又来补补android开发的内容
之前在完成ImageView浏览图片的时候,还有一块内容忘了总结了,就是ListView中显示缩略图时,异步加载图片的功能。
这个功能应用在网络上获取图片时比较多。我是在打开预览图片界面的时候,发现图片很多的情况下打开很慢,,由于我压缩bitmap的效率比较低..所以我在这里另外开了一个线程来获得listview中的bitmap,这样打开界面就很快了。
这里使用的是AsyncTask类,可以直接操作控件
需要重写两个函数,如下
doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
onPostExecute(Result) 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回
所以我们就在doInBackground函数中通过图片文件名得到Bitmap对象,然后在onPostExecute中将bitmap显示在ImageVIew中。。。就ok~
public class BmpAsyncTask extends AsyncTask<String, Void, Bitmap> {
private final WeakReference<ImageView> imageViewReference;
private String data = "";
private ImageView mImgView;
private List<Bitmap> mListBmp;
public BmpAsyncTask(ImageView imageView, List<Bitmap> listBmp) {
imageViewReference = new WeakReference<ImageView>(imageView);
mImgView = imageView;
mListBmp = listBmp;
}
@Override
protected Bitmap doInBackground(String... params) {
data = params[0];
File file = new File(data);
Bitmap bmp = null;
// System.out.println("data:"+data);
if (data.endsWith(".jpg") || data.endsWith(".png")) {
bmp = PublicMethod.getBitmapFromFile(file, mImgView.getWidth(),
mImgView.getWidth());
} else if (data.endsWith(".mp4")) {
bmp = ThumbnailUtils.createVideoThumbnail(data,
MediaStore.Images.Thumbnails.MINI_KIND);
}
// bmp=ThumbnailUtils.extractThumbnail(bmp, 100, 100,
// ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
mListBmp.add(bmp);
return bmp;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (imageViewReference != null && bitmap != null) {
final ImageView imageView = imageViewReference.get();
if (imageView != null) {
imageView.setImageBitmap(bitmap);
}
}
}
}
调用上述线程只要通过构造函数和execute方法传入参数即可。
BmpAsyncTask bmpTask = new BmpAsyncTask(imgView, m_listBmp);
bmpTask.execute(file.getAbsolutePath());

本文探讨了在Android开发中如何利用AsyncTask类优化ListView性能,特别是针对大量图片缩略图的异步加载策略。通过在后台线程处理图片加载,并在主线程更新UI,实现了界面快速响应,提升用户体验。
2073

被折叠的 条评论
为什么被折叠?



