`
zhouxuebao87
  • 浏览: 117515 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AysncTask异步加载图片

 
阅读更多
Java代码 复制代码 收藏代码
  1. package com.lilin.async;   
  2.   
  3. import cn.riddles.activity.R;   
  4. import android.app.Activity;   
  5. import android.content.Context;   
  6. import android.os.Bundle;   
  7. import android.view.LayoutInflater;   
  8. import android.view.View;   
  9. import android.view.ViewGroup;   
  10. import android.widget.BaseAdapter;   
  11. import android.widget.ImageView;   
  12. import android.widget.ListView;   
  13. import android.widget.TextView;   
  14.   
  15. public class Main extends Activity {   
  16.     public ListView listView;   
  17.     public static String[] strings = { "王力宏""吴尊""何润东" };   
  18.     public static String[] paths = {   
  19.             "http://list.image.baidu.com/t/image_category/galleryimg/menstar/hk/wang_li_hong.jpg",   
  20.             "http://list.image.baidu.com/t/image_category/galleryimg/menstar/hk/wu_zun.jpg",   
  21.             "http://list.image.baidu.com/t/image_category/galleryimg/menstar/hk/he_run_dong.jpg" };   
  22.   
  23.     @Override  
  24.     public void onCreate(Bundle savedInstanceState) {   
  25.         super.onCreate(savedInstanceState);   
  26.         setContentView(R.layout.main);   
  27.         listView = (ListView) this.findViewById(R.id.test_lv);   
  28.         listView.setAdapter(new MyAdapter(this));   
  29.     }   
  30.   
  31. }   
  32.   
  33. class MyAdapter extends BaseAdapter {   
  34.     private Context context;   
  35.   
  36.     public MyAdapter(Context context) {   
  37.         this.context = context;   
  38.     }   
  39.   
  40.     public void setcontext(Context context) {   
  41.         this.context = context;   
  42.     }   
  43.   
  44.     public int getCount() {   
  45.         return Main.paths.length;   
  46.     }   
  47.   
  48.     public Object getItem(int position) {   
  49.         return null;   
  50.     }   
  51.   
  52.     public long getItemId(int position) {   
  53.         return 0;   
  54.     }   
  55.   
  56.     public View getView(int position, View convertView, ViewGroup parent) {   
  57.         convertView = LayoutInflater.from(context).inflate(R.layout.listview,   
  58.                 null);   
  59.         ImageView imageView = (ImageView) convertView.findViewById(R.id.image);   
  60.         TextView songer_tv = (TextView) convertView.findViewById(R.id.songer);   
  61.         imageView.setTag(Main.paths[position]);   
  62.         songer_tv.setText(Main.strings[position]);   
  63.         new ImageTask().execute(imageView);   
  64.         return convertView;   
  65.     }   
  66.   
  67. }  
package com.lilin.async;

import cn.riddles.activity.R;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class Main extends Activity {
	public ListView listView;
	public static String[] strings = { "王力宏", "吴尊", "何润东" };
	public static String[] paths = {
			"http://list.image.baidu.com/t/image_category/galleryimg/menstar/hk/wang_li_hong.jpg",
			"http://list.image.baidu.com/t/image_category/galleryimg/menstar/hk/wu_zun.jpg",
			"http://list.image.baidu.com/t/image_category/galleryimg/menstar/hk/he_run_dong.jpg" };

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		listView = (ListView) this.findViewById(R.id.test_lv);
		listView.setAdapter(new MyAdapter(this));
	}

}

class MyAdapter extends BaseAdapter {
	private Context context;

	public MyAdapter(Context context) {
		this.context = context;
	}

	public void setcontext(Context context) {
		this.context = context;
	}

	public int getCount() {
		return Main.paths.length;
	}

	public Object getItem(int position) {
		return null;
	}

	public long getItemId(int position) {
		return 0;
	}

	public View getView(int position, View convertView, ViewGroup parent) {
		convertView = LayoutInflater.from(context).inflate(R.layout.listview,
				null);
		ImageView imageView = (ImageView) convertView.findViewById(R.id.image);
		TextView songer_tv = (TextView) convertView.findViewById(R.id.songer);
		imageView.setTag(Main.paths[position]);
		songer_tv.setText(Main.strings[position]);
		new ImageTask().execute(imageView);
		return convertView;
	}

}

 

Java代码 复制代码 收藏代码
  1. package com.lilin.async;   
  2.   
  3. import java.io.InputStream;   
  4. import java.net.HttpURLConnection;   
  5. import java.net.URL;   
  6. import android.graphics.Bitmap;   
  7. import android.graphics.BitmapFactory;   
  8. import android.os.AsyncTask;   
  9. import android.webkit.URLUtil;   
  10. import android.widget.ImageView;   
  11.   
  12. /**  
  13.  * 通过AsyncTask实现图片的异步加载  
  14.  *   
  15.  * @author lilin  
  16.  * @date 2011-9-5 上午08:45:12  
  17.  * @ClassName: ImageTask  
  18.  * @Description: 特点:任务不在主线程中执行,而回调方法在主线程中执行,比Handler更轻量级些,适用于简单的异步处理  
  19.  */  
  20. public class ImageTask extends AsyncTask<ImageView, Void, Bitmap> {   
  21.     private ImageView imageView;   
  22.   
  23.     protected Bitmap doInBackground(ImageView... views) {   
  24.         // 后台线程执行,完成任务的主要操作   
  25.         Bitmap bitmap = null;   
  26.         ImageView imageView = views[0];   
  27.         if (imageView.getTag() != null) {   
  28.             try {   
  29.                 if (URLUtil.isHttpUrl(imageView.getTag().toString())) {// 首先判断是不是url   
  30.                     System.out.println(imageView.getTag().toString());   
  31.                     URL url = new URL(imageView.getTag().toString());   
  32.                     HttpURLConnection conn = (HttpURLConnection) url   
  33.                             .openConnection();   
  34.                     conn.setDoInput(true);   
  35.                     conn.connect();   
  36.                     InputStream stream = conn.getInputStream();   
  37.                     bitmap = BitmapFactory.decodeStream(stream);// 将stream流转化成bitmap   
  38.                     stream.close();   
  39.                 } else {   
  40.                     bitmap = BitmapFactory.decodeFile(imageView.getTag()   
  41.                             .toString());   
  42.                 }   
  43.             } catch (Exception e) {   
  44.                 return null;   
  45.             }   
  46.         }   
  47.         this.imageView = imageView;   
  48.         return bitmap;   
  49.     }   
  50.   
  51.     protected void onPostExecute(Bitmap bitmap) {   
  52.         // 主线程中执行   
  53.         if (bitmap != null) {   
  54.             this.imageView.setImageBitmap(bitmap);   
  55.             this.imageView = null;   
  56.         }   
  57.     }   
  58.   
  59. }  
分享到:
评论

相关推荐

    wpf 异步加载图片完成后再显示

    在WPF(Windows Presentation Foundation)应用开发中,异步加载图片是提高用户体验的关键技术,特别是在处理大尺寸或者网络延迟较大的情况下。本知识点将详细讲解如何实现wpf异步加载图片并在加载完成后显示。 ...

    Android异步加载图片例子

    在Android开发中,异步加载图片是一项至关重要的技术,尤其对于那些包含大量图像的移动应用而言,如社交网络、电商应用等。异步加载能够提高用户体验,避免UI线程阻塞,防止应用出现"卡死"现象。在这个"Android异步...

    lazyload异步加载图片

    **懒加载(Lazy Load)异步加载图片技术详解** 懒加载是一种优化网页性能的技术,它主要应用于图片或者视频等大体积资源的加载。在网页初次加载时,只加载视口内的图片,当用户滚动页面,即将进入视口的图片才会被...

    Android AsyncTask用法和异步加载图片.rar

    本资料包主要讲解了如何使用`AsyncTask`进行异步加载图片,这对于在UI线程中保持流畅用户体验至关重要。 `AsyncTask`是Android SDK中的一个类,它为开发者提供了简单的多线程和回调功能。它的核心思想是将长时间...

    JS异步加载图片

    在JavaScript(JS)中,异步加载图片是一种优化网页性能的技术。它允许浏览器在不影响页面主要功能的情况下,按需或后台加载非关键资源,如图片。这样可以减少页面初次加载的时间,提高用户体验,特别是对于含有大量...

    Android实现ListView异步加载图片

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

    使用Android Studio 练习RecyclerView 异步加载图片,解决图片乱序问题。

    然而,在实际开发中,当我们需要在RecyclerView中异步加载图片时,可能会遇到图片显示乱序的问题。本文将深入探讨这个问题及其解决方案。 首先,我们来理解为什么会出现图片乱序的现象。这是因为RecyclerView在滚动...

    iOS异步加载图片 (需要至少12个字的名称,过分!)

    在iOS开发中,异步加载图片是一项至关重要的技术,它能显著提升应用的性能和用户体验。标题中的"iOS异步加载图片"暗示我们讨论的是如何在iOS应用中避免UI阻塞,通过后台线程加载图片资源,使得界面始终保持流畅。在...

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

    因此,异步加载图片是必要的,它可以在后台线程中处理图片下载和解码工作,保持UI流畅。 2. ListView与异步加载: ListView是一个常用的组件,用于展示可滚动的列表数据。每个列表项可能包含图片。当用户滚动时,...

    ListView异步加载图片

    为了解决这个问题,我们需要采用异步加载图片的策略。这就是“ListView异步加载图片”这一知识点的核心。 异步加载图片的目的是将耗时的操作(如网络请求、图片解码)从主线程分离到后台线程执行,从而保持用户界面...

    Android 演示异步加载图片的实现 附源代码.rar

    Android 演示异步加载图片的实现 附源代码,这里主要是演示ListView的异步加载图片功能,异步加载一个view时,如果view里面有EditText,EditText在每次加载view都会触发焦点,这时候异步就会出错。可能我这样说不太...

    以AJAX方式加载图片=异步加载图片,先显示个图片的占位图片 此技术常见于漫画网站.zip

    在网页开发中,异步加载图片(以AJAX方式加载图片)是一种常见的优化技术,尤其在处理大量图片的场景下,比如漫画网站。通过这种方式,可以显著提高页面加载速度,提升用户体验。AJAX(Asynchronous JavaScript and ...

    《异步加载图片(一)》源码----仅实现异步加载 .

    这是博文《异步加载图片(一)》对应的源码,这段代码仅实现了异步加载,对于滑动时暂停,停划时加载的问题会在《异步加载图片(二)》中讲解,这篇文章的地址:...

    iphone UITableView异步加载图片

    因此,"iPhone UITableView异步加载图片"是解决这个问题的关键技术。 异步加载图片的基本思想是在主线程之外的其他线程(通常为后台线程)下载和处理图片,避免阻塞用户界面。在UITableView中,我们通常会在cell...

    Android 异步加载图片实现_图片缓存.zip

    在Android应用开发中,异步加载图片是一项至关重要的任务,特别是在处理大量图片或者网络图片时。这不仅可以提高用户体验,避免因加载图片导致的界面卡顿,还能有效地节省系统资源。本教程将深入探讨如何在Android中...

    ListView异步加载图片进度条

    在处理大量图片时,为了提升用户体验和优化性能,通常会采用异步加载图片的技术。本文将深入探讨如何实现ListView中图片的异步加载,并结合进度条显示加载状态,使代码更加规范。 一、异步加载图片的重要性 在...

    iOS从网络异步加载图片

    接下来,我们讨论核心主题——异步加载图片。在iOS应用中,直接在主线程上加载网络图片会阻塞用户界面,导致应用程序响应变慢,影响用户体验。因此,异步加载成为最佳实践。IconDownloader是一个用于异步下载和缓存...

    网络异步加载图片的轮播图带点击方法

    在IT行业中,网络异步加载图片的轮播图是一种常见的用户界面组件,广泛应用于网站、APP等场景,用于展示多张图片并实现自动或手动切换。在这个特定的【标题】"网络异步加载图片的轮播图带点击方法"中,我们可以深入...

    wpf 异步加载图片完成后再显示,失败则显示本地图片

    在WPF应用开发中,异步加载图片是一个常见的需求,特别是在处理大尺寸或者网络资源时,为了提升用户体验,我们希望图片加载不影响界面的响应速度。本文将深入探讨如何实现这一功能,并在加载失败时切换到本地备份...

Global site tag (gtag.js) - Google Analytics