`
superhj1987
  • 浏览: 206051 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android异步加载图片

 
阅读更多

对于Android中的异步加载图片,自己总结了两种方式,如下:

1、

/** 
 * 异步读取图片,需要传递三个参数:Imageview imageView,String imagePath,int maxNumpixels  
 * @author Bryant 
 */  
public class AsyncLoadImage extends AsyncTask<Object, Object, Void> {  
    @Override  
    protected Void doInBackground(Object... params) {  

        try {  
            ImageView imageView=(ImageView) params[0];  
            String path=(String) params[1];  
            int maxNumOfPixels = (Integer)params[2];
            
            Bitmap bm = CompressPicture.compress(path,maxNumOfPixels);
   
            publishProgress(new Object[] {imageView, bm});  
        }catch (Exception e) {  
            e.printStackTrace();  
        }  
        
        return null;
    }  

    protected void onProgressUpdate(Object... progress) {  
        ImageView imageView = (ImageView) progress[0];  
        Bitmap bm = (Bitmap) progress[1];
        if(bm != null){
            imageView.setImageBitmap(bm); 
        }

    }  
}  

 2、

/**
 * 图片异步加载
 * @author Bryant
 *
 */
public class AsyncImageLoader {
	private Map<String, SoftReference<Bitmap>> imageCache=new HashMap<String, SoftReference<Bitmap>>();
	private int maxNumPixels;
	
	public Bitmap loadBitmap(final String imagePath,int maxNumPixels,final ImageCallback callback){
		this.maxNumPixels = maxNumPixels;
		
		if(imageCache.containsKey(imagePath)){
			SoftReference<Bitmap> softReference=imageCache.get(imagePath);
			if(softReference.get()!=null){
				return softReference.get();
			}
		}
		final Handler handler=new Handler(){
			@Override
			public void handleMessage(Message msg) {
				callback.imageLoaded((Bitmap) msg.obj, imagePath);
			}
		};
		new Thread(){
			public void run() {
				Bitmap bitmap=loadImageFromPath(imagePath);
				imageCache.put(imagePath, new SoftReference<Bitmap>(bitmap));
				handler.sendMessage(handler.obtainMessage(0,bitmap));
			};
		}.start();
		return null;
	}
	
	protected Bitmap loadImageFromPath(String imagePath) {
		try {
			return CompressPicture.compress(imagePath, maxNumPixels);
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public interface ImageCallback{
		public void imageLoaded(Bitmap imageBitmap,String imagePath);
	}
}

 

经过实际使用,AsyncImageLoader的效率比较高,但是调用比较麻烦。

调用示例:

private AsyncImageLoader imageLoader = new AsyncImageLoader();
imageLoader.loadBitmap(imagePath,maxNumPixels, new ImageCallback() {
	public void imageLoaded(Bitmap imageBitmap, String imagePath) {
		imageView.setImageBitmap(imageBitmap);
	}
}); 

AsyncLoadImage调用较简单,调用示例如下:

new AsyncLoadImage().execute(new Object[]{imageView,imagePath,maxNumPixels});
分享到:
评论

相关推荐

    Android异步加载图片例子

    在这个"Android异步加载图片例子"中,我们将探讨如何在Android应用中实现这一功能。 首先,我们需要理解Android的主线程(UI线程)与工作线程的区别。主线程负责处理用户界面交互,而工作线程则用于执行耗时操作,...

    android异步加载图片

    "Android异步加载图片"是一个常见的需求,它涉及到用户体验优化、内存管理以及线程安全等多个方面。这里我们将深入探讨这个主题,并结合提供的"ImageLoader-develop"可能是一个图片加载库的源码,来讲解相关的知识点...

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

    综上所述,Android异步加载图片和缓存策略是提升应用性能的关键技术。通过合理使用工作线程和缓存机制,可以显著改善用户体验,降低系统负载。在实际开发中,选择合适的图片加载库,并结合最佳实践,能够帮助我们...

    Android 异步加载图片缓存优化.rar

    总的来说,Android异步加载图片缓存优化是通过合理利用内存和磁盘资源,配合高效的异步处理,为用户提供流畅的图片浏览体验,同时避免了由于大图加载引发的内存问题。开发者可以通过学习这个压缩包中的源码和文档,...

    android 异步加载 图片

    总的来说,Android异步加载图片涉及到内存管理、线程调度、缓存策略等多个方面,合理地运用这些技术可以显著提升应用的性能和用户体验。通过不断学习和实践,开发者可以掌握更多关于图片加载的高级技巧,例如,利用...

    android 异步加载图片

    总结来说,Android异步加载图片是提高用户体验和优化内存管理的关键技术,通过选择合适的异步加载机制和防止OOM的策略,可以确保应用的性能和稳定性。而第三方库如Glide、Picasso、Fresco则为我们提供了便利的工具,...

    android异步加载图片缓存释放

    本话题主要围绕"android异步加载图片缓存释放"展开,我们将深入探讨如何实现这个功能以及相关的知识点。 首先,异步加载图片的目的是为了让用户在浏览应用时不会因为网络请求而等待,提高应用的响应速度。通常,...

    android异步加载图片源码

    本文将深入探讨Android异步加载图片的原理,并以`AsyncListImage`为例,解析其源码,展示如何实现这一功能。 首先,理解异步加载的基本概念。异步加载(Asynchronous Loading)是一种编程策略,它允许程序在后台...

    android异步加载图片Demo

    "android异步加载图片Demo"是一个示例项目,它演示了如何利用Android的`AsyncTask`来解决这个问题。`AsyncTask`是Android提供的一种轻量级的异步处理机制,用于在后台线程执行耗时操作,然后在UI线程更新结果,以...

    android 异步加载图片 完美版

    在Android开发中,异步加载图片是一项至关重要的技术,特别是在处理大量图片或者网络图片时,为了提高用户体验,避免UI线程阻塞,我们通常会采用异步加载的方式。本资源"android 异步加载图片 完美版"提供了一种高效...

    安卓源码包android图片缓存&展示Android 异步加载图片等24个合集.zip

    安卓源码包android图片缓存&展示Android 异步加载图片等24个合集: ‘360全景查看demo.rar afinal框架实现图片的简单异步缓存加载.rar andengine中直接加载多张小图片合成一张大图片生成动画精灵.rar android gif...

    Android演化理解 Android 异步加载图片.zip

    在Android应用开发中,异步加载图片是一项至关重要的技术,特别是在设计用户界面和优化用户体验时。这个"Android演化理解 Android 异步加载图片"的压缩包文件提供了关于如何在Android平台处理图片加载的源码参考,这...

Global site tag (gtag.js) - Google Analytics