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

android image cache 图片缓存 异步 下载

阅读更多
自动判断从内存还是网络获取图片,缓存自动回收


import java.io.InputStream;
import java.lang.ref.SoftReference;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;
import java.util.HashMap;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

/**
 * 
 * @author yizhe
 * @date 2012-6-13
 */
public class BitmapLoader {
	// 内存缓存,SoftReference实现自动回收
	private static HashMap<String, SoftReference<Bitmap>> imageCache = new HashMap<String, SoftReference<Bitmap>>();

	/**
	 * 自动判断从内存还是从网络获取图片
	 * 
	 * @param imageURL
	 * @return
	 */
	public static Bitmap loadBitmap(String imageURL) {
		long time = new Date().getTime();
		Comm.print(time + "--loadBitmap--" + imageURL);

		Bitmap bm = null;
		if (imageCache.containsKey(imageURL)) {// 从内存中获取
			Comm.print(time + "--loadBitmap--from Cache");
			SoftReference<Bitmap> reference = imageCache.get(imageURL);
			bm = reference.get();
		}
		if (null == bm) {// 到网络下载
			Comm.print(time + "--loadBitmap--from Net");
			bm = getNetBitmap2(imageURL);
			if (null != bm) {
				imageCache.put(imageURL, new SoftReference<Bitmap>(bm)); // 保存到内存
			}
		}
		if (null == bm) {
			Comm.print(time + "--loadBitmap--false");
		} else {
			Comm.print(time + "--loadBitmap--true");
		}
		return bm;
	}

	// 从网络下载图片,方法2,本方法下载图片可能出现返回200状态但得到的bitmap为null的情况
	private static Bitmap getNetBitmap(String imageURL) {
		Bitmap bitmap = null;
		try {
			// 要下载的图片的地址,
			URL url = new URL(imageURL);// 获取到路径
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();// http协议连接对象
			conn.setRequestMethod("GET");// 这里是不能乱写的,详看API方法
			conn.setConnectTimeout(9000);// 别超过10秒。
			int state = conn.getResponseCode();
			if (state == 200) {
				Comm.print("--loadNetBitmap--" + state);
				InputStream inputStream = conn.getInputStream();
				bitmap = BitmapFactory.decodeStream(inputStream);
			}
		} catch (Exception e) {
			Comm.print("--loadNetBitmap--e--" + e.toString());
		}
		return bitmap;
	}

	// 从网络下载图片,方法2,请使用本方法下载图片,
	public static Bitmap getNetBitmap2(String imageURL) {
		Bitmap bitmap = null;
		try {
			URL url = new URL(imageURL);// 获取到路径
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();// http协议连接对象
			conn.setRequestMethod("GET");// 这里是不能乱写的,详看API方法
			conn.setConnectTimeout(9000);// 别超过10秒。
			int state = conn.getResponseCode();
			if (state == 200) {
				Comm.print("--loadNetBitmap--" + state);
				int length = (int) conn.getContentLength();// 获取长度
				InputStream is = conn.getInputStream();
				if (length != -1) {
					byte[] imgData = new byte[length];
					byte[] temp = new byte[512];
					int readLen = 0;
					int destPos = 0;
					while ((readLen = is.read(temp)) > 0) {
						System.arraycopy(temp, 0, imgData, destPos, readLen);
						destPos += readLen;
					}
					bitmap = BitmapFactory.decodeByteArray(imgData, 0,
							imgData.length);
				}
			}
		} catch (Exception e) {
			Comm.print("--loadNetBitmap--e--" + e.toString());
		}
		return bitmap;
	}

}


分享到:
评论

相关推荐

    Android-Universal-Image-Loader 图片异步加载类库的使用

    **Android-Universal-Image-Loader 图片异步加载库详解** 在Android开发中,图片的加载和显示是一项常见的任务,特别是在处理大量图片或者网络图片时,如何高效、流畅地加载和展示图片至关重要。为此,开发者社区...

    Android Google官网的图片缓存源码

    首先,图片缓存通常包括两大部分:内存缓存(Memory Cache)和磁盘缓存(Disk Cache)。内存缓存是将图片数据存储在应用的内存中,响应速度快,但当系统需要回收内存时,这些数据可能会被清除。磁盘缓存则将图片数据...

    Android-Image-Cache-master

    "Android-Image-Cache-master"项目专注于解决这个问题,提供了一种高效、智能的图片缓存机制。在这个项目中,我们将探讨Android图像缓存的基本原理,以及如何利用这个开源库来提升应用的用户体验。 一、Android ...

    Android 图片缓存 源码+事例

    Android Universal Image Loader (UIL) 是一个强大的、灵活的图片加载库,它提供了高效的图片缓存策略,使得图片加载更加流畅,用户体验更佳。本文将深入探讨Android Universal Image Loader的源码和使用实例,帮助...

    多线程异步下载图片Image-Loader

    《Android-Universal-Image-Loader:多线程异步下载图片技术详解》 在移动开发领域,尤其是在Android平台上,高效地加载和展示网络图片是一项重要的任务。为了优化用户体验,开发者通常会选择使用多线程和异步加载...

    异步下载网络图片

    在IT行业中,异步下载网络图片是一项常见的任务,特别是在开发移动应用、网页或者桌面软件时。这个主题涉及到网络编程、多线程、内存管理以及用户体验等多个方面。下面将详细讲解异步下载网络图片的关键知识点。 1....

    Android之实现图片缓存、加载器功能源码.zip

    这个"Android之实现图片缓存、加载器功能源码.zip"文件很可能包含了一个实现高效图片加载和缓存机制的示例代码。下面将详细讨论Android中图片缓存和加载器的工作原理以及实现方法。 **一、为什么要进行图片缓存** ...

    android中图片的三级缓存cache策略(内存/文件/网络)

    在Android开发中,图片缓存是一个非常重要的技术,特别是在处理大量图片展示的应用中,如社交媒体、图片浏览应用等。为了优化用户体验,减少网络流量的消耗,开发者通常会采用三级缓存策略,即内存缓存、文件缓存和...

    关于 图片 缓存 下载

    在Android中,可以使用像Universal Image Loader、Glide或Picasso这样的库来实现图片缓存。这些库不仅支持异步加载,还能智能地处理内存和磁盘缓存,避免内存溢出,并优化图片解码过程,减少对CPU和内存的占用。而在...

    android缓存网络图片

    在Android开发中,图片缓存是一项非常重要的技术,特别是在处理大量网络图片的应用中。网络图片缓存能够提高用户体验,减少网络请求,节省流量,并减轻服务器压力。本文将深入探讨如何在Android应用中实现图片的网络...

    Android加载网络图片缓存处理库的使用-Universal-ImageLoader

    Universal Image Loader (UIL) 是一个强大的Android图片加载库,它提供了缓存机制、线程控制、图片占位符等功能,使得在Android应用中加载网络图片变得更加简单和高效。本文将详细介绍如何使用Universal ImageLoader...

    android 图片缓存

    3. **图片加载库**:在Android中,处理图片缓存的常见库有Universal Image Loader、Picasso、Glide等。它们都集成了内存和磁盘缓存的处理,提供了一套完整的解决方案。例如,Glide库通过其强大的生命周期感知能力和...

    Android应用源码之-Image-Cache-master.rar

    "Android应用源码之-Image-Cache-master.rar"是一个专注于图片缓存实现的开源项目,它为我们提供了一个理解和学习Android图片缓存策略的绝佳案例。本文将详细阐述该源码中的主要知识点,帮助开发者深入理解并掌握这...

    Android实现图片异步加载并缓存到本地

    其次,图片缓存机制能够提高应用性能,避免频繁地从网络下载图片,减轻服务器压力,同时减少用户流量消耗。通常,我们可以采用两种类型的缓存:内存缓存和磁盘缓存。 1. 内存缓存:利用Java的WeakReference或...

    应用源码之-Image-Cache-master.zip

    本篇文章将深入探讨Image-Cache-master这个开源项目,它为Android开发者提供了一个高效、灵活的图片缓存解决方案。 首先,我们来理解一下“Image Cache”的概念。图片缓存是一种优化策略,通过将网络请求的图片保存...

    Android图片缓存、加载

    在Android设备上加载网络图片时,如果每次请求都直接从网络下载,不仅会消耗大量的数据流量,而且可能导致用户界面卡顿,因为网络请求通常比读取本地文件慢得多。为了解决这个问题,开发者通常采用图片缓存机制。它...

    Android图片异步加载

    "Android-Universal-Image-Loader"是一个广受欢迎的开源库,它提供了强大的图片异步加载、缓存和显示功能。此库由Sergey Tarasevich开发,版本1.9.3具有良好的稳定性和兼容性。 1. **配置与初始化**:在应用启动时...

    android 异步加载

    这些库提供了强大的图片缓存机制,支持从网络、本地文件系统或资源加载图片,并自动进行尺寸调整和内存管理,避免内存溢出。 2. **自定义ListView适配器**:通过重写getView()方法,根据视图的状态决定是否加载图片...

    android 照相、压缩图片、图片缓存

    - 内存缓存:使用LRUCache或Android提供的MemoryCache实现内存中的图片缓存,避免频繁创建Bitmap对象。 - 磁盘缓存:通过SQLite、文件系统或者OkHttp的DiskLruCache实现磁盘缓存,提高图片加载速度。 - 缓存策略...

    图片缓存 android

    在Android开发中,图片缓存是一项至关重要的技术,特别是在处理大量图像数据的移动应用中,如社交媒体、电商应用等。有效的图片缓存机制能够提高用户体验,减少网络请求,节省流量,同时减轻服务器压力。本文将深入...

Global site tag (gtag.js) - Google Analytics