ListView异步加载网络图片之一
前面用了三篇文章来写有关ListView性能优化,这一个文章,将讲解从网络异步加载图片,然后显示到列表中。由于需要异步加载,所以这里会用到AsyncTask这个类。
AsyncTask:他是Android提供的一个异步任务组件,他会开启一个后台线程,最后将执行的结果返回到UI线程,并且不用我们去操纵thread和handler,非常的方便。
注意:在AndroidManifest.xml中添加网络访问的权限,新手很容易忘掉的。。。如果网络的权限都没有,神马都是浮云了
<uses-permission android:name="android.permission.INTERNET" />
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d(TAG, "position=" + position + ",convertView=" + convertView);
ViewHolder viewHolder = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, null);
viewHolder = new ViewHolder();
viewHolder.mTextView = (TextView) convertView.findViewById(R.id.tv_tips);
viewHolder.mImageView = (ImageView) convertView.findViewById(R.id.iv_image);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
Bitmap bitmap = getImage(position);//从缓存中取图片
if (bitmap != null) {
viewHolder.mImageView.setImageBitmap(bitmap);
} else {// 缓存没有就设置为默认图片,并且从网络异步下载
viewHolder.mImageView.setImageResource(R.drawable.ic_launcher);
ImageLoadTask imageLoadTask = new ImageLoadTask();
String url = "";
if (position % 2 == 0) {
url = URL_ITEYE_LOGO;
} else {
url = URL_MY_LOGO;
}
imageLoadTask.execute(viewHolder, url, position);//执行异步任务
}
viewHolder.mTextView.setText("-----" + position);
return convertView;
}
- 下面开始写我们的异步任务ImageLoadTask他需要继承AsyncTask,并且重写他的doInBackground(运行在后台线程)和onPostExecute(返回UI线程执行)方法
class ImageLoadTask extends AsyncTask<Object, Void, Bitmap> {
ViewHolder mHolder;
int position;
@Override
protected Bitmap doInBackground(Object... params) {
mHolder = (ViewHolder) params[0];
String url = (String) params[1];
position = (Integer) params[2];
Bitmap drawable = ImageLoader.loadImage(url);//获取网络图片
return drawable;
}
@Override
protected void onPostExecute(Bitmap result) {
if (result == null) {
return;
}
mHolder.mImageView.setImageBitmap(result);
cacheImage(position, result);//放入缓存
}
}
public class ImageLoader {
public static Bitmap loadImage(String url) {
Bitmap bitmap = null;
HttpClient client = new DefaultHttpClient();
HttpResponse response = null;
InputStream inputStream = null;
try {
response = client.execute(new HttpGet(url));
HttpEntity entity = response.getEntity();
inputStream = entity.getContent();
bitmap = BitmapFactory.decodeStream(inputStream);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
}
总结:为了让ListView更加的流程,所以耗时的网络请求必须要开启一个异步任务,防止UI线程被阻塞。所以这篇文章的重点就是AsyncTask。这个demo有两个很严重的bug,有兴趣的同学下载源码运行一下就会发现这两个bug,我会在接下来的文章中解决这两个恶心的bug。好了非常感谢您把这篇文章看完了。
- 大小: 59.1 KB
分享到:
相关推荐
10. **总结**:在Android的ListView中实现异步加载网络图片,需要结合异步处理框架、选择合适的图片库、优化缓存策略、合理管理内存,并对ListView进行优化。通过这些手段,可以显著提升应用的性能和用户体验。
因此,"ListView异步加载网络图片"是一个重要的优化技巧。 异步加载的基本思路是将图片下载和显示的操作放在后台线程进行,避免占用主线程资源,确保UI的流畅。在Android中,可以使用多种方式实现这一目标,例如...
通过以上步骤,我们可以实现一个高效的ListView图片异步加载机制。这种方案不仅可以提升用户体验,还能有效利用系统资源,避免内存问题。在实际项目中,还可以结合其他图片加载库,如Glide、Picasso等,它们提供了更...
"Android实现ListView异步加载图片" Android 实现 ListView 异步加载图片是一种常见的技术,旨在提高应用程序的性能和用户体验。本文将详细介绍 Android 中实现 ListView 异步加载图片的方法,并对相关的技术概念...
本文将深入探讨如何实现ListView中图片的异步加载,并结合进度条显示加载状态,使代码更加规范。 一、异步加载图片的重要性 在Android中,如果直接在主线程中加载大图或数量众多的图片,会导致UI阻塞,用户体验...
总的来说,“listview异步加载图片”是一项关键的性能优化技术,它结合了异步编程和内存管理的策略,确保了ListView的流畅滚动和系统的稳定运行。通过理解并应用这些知识,开发者可以创建出更高效、更用户友好的...
这里的“android listView 异步加载图片”指的是在不阻塞UI线程的情况下,从网络、本地存储或其他来源加载图片到ListView中的技术。 这篇名为“ImageLoader”的Java文件很可能就是一个实现图片异步加载的工具类。在...
在本压缩包文件"listview异步加载.rar"中,我们很可能会找到关于如何实现ListView异步加载的相关资料。 在Android中,ListView的异步加载通常涉及以下几个关键知识点: 1. **Adapter**:Adapter是连接ListView与...
为了解决这个问题,我们需要实现ListView的图片异步加载。本文将深入探讨Android ListView中异步加载图片的策略、常见问题以及解决方案。 首先,我们要理解异步加载的基本原理。异步加载是指在后台线程中执行耗时...
本实例将详细讲解如何实现“Android ListView异步加载图片”,结合线程池、数据库和本地保存来优化性能。 首先,我们需要理解异步加载的概念。在Android中,由于主线程负责用户界面的更新,因此不应在主线程中执行...
Android 异步加载图片,对ListView的异步加载...异步加载一个view时,如果那个view里面有EditText,EditText在每次加载view都会触发焦点,这时候异步就会出错。可能我这样说不太清楚,但是如果试试就会发现这种情况。
本文实例讲述了Android实现Listview异步加载网络图片并动态更新的方法。分享给大家供大家参考,具体如下: 应用实例:解析后台返回的数据,把每条都显示在ListView中,包括活动图片、店名、活动详情、地址、电话和...
这篇教程"ListView异步加载网络大图Demo"主要讲解如何高效地在ListView中异步加载网络图片,以避免性能问题。 首先,我们需要理解Bitmap对象在Android中的内存管理。Bitmap是Android用来存储像素信息的类,占用大量...
在Android应用开发中,图片异步加载是一种常见的优化技术,特别是在构建类似照片墙或ListView这样的大量图片展示场景中。这个话题主要关注如何有效地处理图片资源,避免UI阻塞,提高用户体验。以下是对"图片异步加载...
本文将详细讲解如何在ListView中实现异步加载图片以及三级缓存的原理。 ### 一、异步加载图片的必要性 1. **避免阻塞主线程**:Android应用的UI更新必须在主线程进行,而图片加载通常需要较长的时间,如果在主线程...