在android开发中我们要进行网络交互请求数据时,避免不了对图片的加载与缓存。下面讲下我用到的方法:
一.运用DisplayImageOption加载。运用架包再进行配置就行(架包已上传)。
//加载图片 public static void getview(String icon_path,ImageView imageview){ ImageLoader loader=ImageLoader.getInstance(); //图片请求路径给ImageView设置图片 loader.displayImage("http://192.168.0.107:8080/LaQuan/"+icon_path, imageview);
在application中创建DisplayImageOption加载
public void onCreate() { super.onCreate(); //加载并缓存图片配置 // 使用DisplayImageOptions.Builder()创建DisplayImageOptions DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() .cacheInMemory() //1.8.6包使用时候,括号里面传入参数true 设置下载的图片是否缓存在内存中 .cacheOnDisc() //1.8.6包使用时候,括号里面传入参数true 设置下载的图片是否缓存在SD卡中 .build(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) .defaultDisplayImageOptions(defaultOptions) .threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() .discCacheFileNameGenerator(new Md5FileNameGenerator()) .tasksProcessingOrder(QueueProcessingType.LIFO) .build(); ImageLoader.getInstance().init(config); map=new HashMap<String, Object>(); }
二.通过异步任务加载图片保存到缓存
; private LruCache<String,Bitmap> mLruCache; final int maxSize=(int) Runtime.getRuntime().maxMemory(); //运行时最大内存 final int cacheSize=maxSize/5; //设置将最大内存的五分之一用于缓存 public TuanAdapter(ArrayList<Goods> list, Context context) { super(); mLruCache=new LruCache<String,Bitmap>(cacheSize){ protected int sizeOf(String key, Bitmap value) { return value.getByteCount()/1024; } }; }
//通过路劲异步加载图片并给ImageView设置图片 public void lodadBitmap(ImageView imageview,String url){ Bitmap bitmap=null; GetImageAsyncTask asyncTask=new GetImageAsyncTask(imageview,mLruCache); bitmap=asyncTask.getBitmapFromMemoryCache(url); if(bitmap!=null){ //如果缓存中有图片就直接给ImageView设置 imageview.setImageBitmap(bitmap); }else{ //如果缓存中没有图片就进行异步加载 imageview.setImageResource(R.drawable.ic_launcher); asyncTask.execute(url); //通过路劲启动异步加载 } }
异步加载类
public class GetImageAsyncTask extends AsyncTask<String,Integer,Bitmap>{ private ImageView mImageView; private LruCache<String,Bitmap> mLruCache; public GetImageAsyncTask(ImageView mImageView,LruCache<String,Bitmap> mLruCache) { super(); this.mImageView = mImageView; this.mLruCache=mLruCache; } //异步加载图片��̨ ���� @Override protected Bitmap doInBackground(String... url) { Bitmap mBitmap=null; try { URL imgUrl=new URL(url[0]); InputStream is=imgUrl.openConnection().getInputStream(); mBitmap=BitmapFactory.decodeStream(is); addBitmapToMemoryCache(url[0],mBitmap); } catch (IOException e) { e.printStackTrace(); } return mBitmap; } //从内存获取图片 public Bitmap getBitmapFromMemoryCache(String key){ return mLruCache.get(key); } //将图片保存至内存 public void addBitmapToMemoryCache(String key,Bitmap bitmap){ if(mLruCache.get(key)==null){ mLruCache.put(key, bitmap); } } //异步加载后调用方法�ִ�� @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result); mImageView.setImageBitmap(result); } }
三.运用Google提供Volley架包进行图片的获取与缓存
public class BitmapLruCache implements ImageCache { private LruCache<String, Bitmap> mCache; public BitmapLruCache(){ //设置最大缓存为10M int maxCache=10*1024*1024; mCache = new LruCache<String, Bitmap>(maxCache) { @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight(); } }; } //从缓存获取图片 @Override public Bitmap getBitmap(String url) { return mCache.get(url); } //将图片存入缓存 @Override public void putBitmap(String url, Bitmap bitmap) { mCache.put(url, bitmap); }
public class App extends Application { /** * 整个App的图片内存缓存类 */ public static BitmapLruCache bitmapLruCache; /** * 整个App内AVOS相关类要用到的RequestQueue */ public static RequestQueue requestQueue; @Override public void onCreate() { super.onCreate(); requestQueue=Volley.newRequestQueue(getApplicationContext()); bitmapLruCache=new BitmapLruCache(); } }
ImageLoader imageLoader=new ImageLoader(App.requestQueue, App.bitmapLruCache); //给ImageView设置图片(imgurl为图片路径) holder.img.setImageUrl(imgurl,imageLoader);
相关推荐
程序运行后,将获取网络上下载的照片,缓存更新至本地,再次开启无网状态下或网络图片传输异常情况下,程序将读取本地缓存图片。
这是一个异步加载 图片缓存管理的小例子 简化对网络图片加载的处理
异步的网络图片加载、缓存及显示,实现网络下载显示图片
在线图片加载,可重新加载,可缓存,可清除缓存功能,分别有按钮对应
android 网络和本地图片加载 支持异步加载并缓存
Android webview 加载网页以及本地资源以及SD资源demo,以及加载缓存资源
xamarin异步加载并缓存图片库
ListView的异步加载图片并缓存,可以实现异步加载数据,异步加载图片,缓存图片,并且实现退出删除图片缓存
iOS 图片异步加载 图片缓存
Volley框架二次封装,实现了带Cookie的Get和Post请求,图片加载和图片缓存(内存缓存,SD缓存,内存SD双缓存.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android项目实战-ListView异步图片加载及压缩缓存
实现Android中WebView图片的缓存,并且实现如何替换WebView中默认图片以及如何实现图片的点击。
android listView图片异步加载(拖动时不加载,双缓存)
在tableview上异步加载图片,可以清除缓存。
一个Android图像加载和缓存库专注于流畅体验
图片加载器.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android 异步加载图片缓存优化能异步加载图片,并缓存到本地,采用一级缓存,二级缓存和本地缓存,避免oom异常。源码中有详细注释,资料中有jar包,可以直接复制到项目中使用。
android端用于异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画。.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
android图片异步加载缓存