`
heisedeyueya
  • 浏览: 97714 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

ListView异步加载网络图片之一

阅读更多
ListView异步加载网络图片之一

    前面用了三篇文章来写有关ListView性能优化,这一个文章,将讲解从网络异步加载图片,然后显示到列表中。由于需要异步加载,所以这里会用到AsyncTask这个类。
    AsyncTask:他是Android提供的一个异步任务组件,他会开启一个后台线程,最后将执行的结果返回到UI线程,并且不用我们去操纵thread和handler,非常的方便。
    注意:在AndroidManifest.xml中添加网络访问的权限,新手很容易忘掉的。。。如果网络的权限都没有,神马都是浮云了

<uses-permission android:name="android.permission.INTERNET" />

  • 重写adapter的getView方法
@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
分享到:
评论

相关推荐

    listview 异步加载网络图片

    10. **总结**:在Android的ListView中实现异步加载网络图片,需要结合异步处理框架、选择合适的图片库、优化缓存策略、合理管理内存,并对ListView进行优化。通过这些手段,可以显著提升应用的性能和用户体验。

    ListView异步加载网络图片

    因此,"ListView异步加载网络图片"是一个重要的优化技巧。 异步加载的基本思路是将图片下载和显示的操作放在后台线程进行,避免占用主线程资源,确保UI的流畅。在Android中,可以使用多种方式实现这一目标,例如...

    ListView异步加载图片

    通过以上步骤,我们可以实现一个高效的ListView图片异步加载机制。这种方案不仅可以提升用户体验,还能有效利用系统资源,避免内存问题。在实际项目中,还可以结合其他图片加载库,如Glide、Picasso等,它们提供了更...

    Android实现ListView异步加载图片

    "Android实现ListView异步加载图片" Android 实现 ListView 异步加载图片是一种常见的技术,旨在提高应用程序的性能和用户体验。本文将详细介绍 Android 中实现 ListView 异步加载图片的方法,并对相关的技术概念...

    ListView异步加载图片进度条

    本文将深入探讨如何实现ListView中图片的异步加载,并结合进度条显示加载状态,使代码更加规范。 一、异步加载图片的重要性 在Android中,如果直接在主线程中加载大图或数量众多的图片,会导致UI阻塞,用户体验...

    listview异步加载网络图片

    总的来说,“listview异步加载图片”是一项关键的性能优化技术,它结合了异步编程和内存管理的策略,确保了ListView的流畅滚动和系统的稳定运行。通过理解并应用这些知识,开发者可以创建出更高效、更用户友好的...

    android listView 异步加载图片

    这里的“android listView 异步加载图片”指的是在不阻塞UI线程的情况下,从网络、本地存储或其他来源加载图片到ListView中的技术。 这篇名为“ImageLoader”的Java文件很可能就是一个实现图片异步加载的工具类。在...

    listview异步加载.rar

    在本压缩包文件"listview异步加载.rar"中,我们很可能会找到关于如何实现ListView异步加载的相关资料。 在Android中,ListView的异步加载通常涉及以下几个关键知识点: 1. **Adapter**:Adapter是连接ListView与...

    Android Listview异步加载图片

    为了解决这个问题,我们需要实现ListView的图片异步加载。本文将深入探讨Android ListView中异步加载图片的策略、常见问题以及解决方案。 首先,我们要理解异步加载的基本原理。异步加载是指在后台线程中执行耗时...

    android listview异步加载图片实例(线程池+数据库+本地保存)

    本实例将详细讲解如何实现“Android ListView异步加载图片”,结合线程池、数据库和本地保存来优化性能。 首先,我们需要理解异步加载的概念。在Android中,由于主线程负责用户界面的更新,因此不应在主线程中执行...

    Android ListView异步加载图片

    Android 异步加载图片,对ListView的异步加载...异步加载一个view时,如果那个view里面有EditText,EditText在每次加载view都会触发焦点,这时候异步就会出错。可能我这样说不太清楚,但是如果试试就会发现这种情况。

    Android实现Listview异步加载网络图片并动态更新的方法

    本文实例讲述了Android实现Listview异步加载网络图片并动态更新的方法。分享给大家供大家参考,具体如下: 应用实例:解析后台返回的数据,把每条都显示在ListView中,包括活动图片、店名、活动详情、地址、电话和...

    ListView异步加载网络大图Demo

    这篇教程"ListView异步加载网络大图Demo"主要讲解如何高效地在ListView中异步加载网络图片,以避免性能问题。 首先,我们需要理解Bitmap对象在Android中的内存管理。Bitmap是Android用来存储像素信息的类,占用大量...

    图片异步加载,照片墙,异步加载listview图片2

    在Android应用开发中,图片异步加载是一种常见的优化技术,特别是在构建类似照片墙或ListView这样的大量图片展示场景中。这个话题主要关注如何有效地处理图片资源,避免UI阻塞,提高用户体验。以下是对"图片异步加载...

    listview异步加载图片

    本文将详细讲解如何在ListView中实现异步加载图片以及三级缓存的原理。 ### 一、异步加载图片的必要性 1. **避免阻塞主线程**:Android应用的UI更新必须在主线程进行,而图片加载通常需要较长的时间,如果在主线程...

Global site tag (gtag.js) - Google Analytics