Android LruCache图片异步加载工具类
来源:互联网 发布:中国isis知乎 编辑:程序博客网 时间:2024/05/17 07:53
使用LruCache进行图片异步缓存加载
AsyncImageLoader2.java
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.InputStream;import java.lang.ref.SoftReference;import java.net.URL;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Handler;import android.os.Message;import android.util.LruCache;/** * 图片异步加载工具类 * * @version V2.0 */public class AsyncImageLoader2 {private LruCache<String, SoftReference<Bitmap>> imageCache = new LruCache<String, SoftReference<Bitmap>>(100);private static ExecutorService executorService = Executors.newFixedThreadPool(10);public AsyncImageLoader2() {imageCache = new LruCache<String, SoftReference<Bitmap>>(100);}public AsyncImageLoader2(int maxSize) {imageCache = new LruCache<String, SoftReference<Bitmap>>(maxSize);}public Bitmap loadImage(final String imageUrl,final ImageCallback imageCallback, final boolean isZoom) {SoftReference<Bitmap> softReference = imageCache.get(imageUrl);if (softReference != null) {Bitmap bitmap = softReference.get();if (bitmap != null && !bitmap.isRecycled()) {return bitmap;}}final Handler handler = new Handler() {public void handleMessage(Message message) {imageCallback.imageLoaded((Bitmap) message.obj, imageUrl);}};executorService.submit(new Runnable() {@Overridepublic void run() {Bitmap bitmap = null;if (imageUrl.startsWith("http")) {bitmap = loadImageFromNet(imageUrl, isZoom);} else {bitmap = loadImageFromLocal(imageUrl, isZoom);}if (bitmap != null) {imageCache.put(imageUrl, new SoftReference<Bitmap>(bitmap));Message message = handler.obtainMessage(0, bitmap);handler.sendMessage(message);}}});return null;}public interface ImageCallback {public void imageLoaded(Bitmap bitmap, String imageUrl);}private Bitmap loadImageFromLocal(String path, boolean isZoom) {Bitmap bitmap = null;try {BitmapFactory.Options opts = new BitmapFactory.Options();opts.inPreferredConfig = Bitmap.Config.RGB_565;if (isZoom) {opts.inSampleSize = 2;}opts.inPurgeable = true;opts.inInputShareable = true;InputStream is = new FileInputStream(new File(path));bitmap = BitmapFactory.decodeStream(is, null, opts);} catch (FileNotFoundException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return bitmap;}private Bitmap loadImageFromNet(String imageUrl, boolean isZoom) {Bitmap bitmap = null;try {String fileName = imageUrl.substring(imageUrl.lastIndexOf("/") + 1);bitmap = loadImageFromLocal(FileUtils.SDCARD_BACKUP_IMAGE+ fileName, isZoom);if (bitmap == null) {URL url = new URL(imageUrl);InputStream is = url.openStream();FileUtils.saveImage(is, fileName);BitmapFactory.Options opts = new BitmapFactory.Options();opts.inJustDecodeBounds = false;if (isZoom) {opts.inSampleSize = 2;}opts.inPurgeable = true;opts.inInputShareable = true;bitmap = BitmapFactory.decodeStream(is, null, opts);}} catch (Exception e) {e.printStackTrace();return null;}return bitmap;}public void removeFromContainer(String key) {SoftReference<Bitmap> softReference = imageCache.get(key);if (softReference != null) {Bitmap bitmap = softReference.get();if (bitmap != null && !bitmap.isRecycled()) {bitmap.recycle();softReference.clear();}}}}
0 0
- Android LruCache图片异步加载工具类
- Android性能优化之实现双缓存的图片异步加载工具(LruCache+SoftReference)
- Android性能优化之实现双缓存的图片异步加载工具(LruCache+SoftReference) - 拿来即用
- LruCache缓存处理及异步加载图片类的封装
- Android批量图片加载经典系列——使用LruCache、AsyncTask缓存并异步加载图片
- Android 异步加载图片-LruCache和SD卡或手机缓存-三级缓存原理加载图片
- 图片异步加载工具类
- 使用新式LruCache取代SoftReference缓存图片,Android异步加载图片
- 使用Android新式LruCache缓存图片,基于线程池异步加载图片
- Android-GridView 实例(异步加载,LruCache缓存,图片请求,图片压缩)
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(一)
- 解决org.hibernate.LazyInitializationException: could not initialize proxy - no Session懒加载问题
- Java mina FundTradeLogger
- java mina FundTradeProtocolCodecFactory
- 第十周项目2 解码 i love u
- Android LruCache图片异步加载工具类
- TNS-12541: TNS: 无监听程序
- Linux下的USB总线驱动(二)
- zf2分析:Zend/EventManager(Part1)
- python 学习笔记——元组(tuple)
- 九度 题目1044:Pre-Post
- EDI在汽车行业的应用
- Linux下的USB总线驱动(三)
- 关于蓝牙连接java.io.IOException: Service discovery failed错误的解决方法