Android图片缓存

Android基于universal-image-loader-1.9.4.jar的图片缓存。

jar包可以去网上下载,其中封装了网络获取图片及在手机开辟缓存区域的方法,只需要做如下配置操作就可以使用。

它的作用方式是这样的,如果手机连接网络,那么该组件会从网络获取图片并将图片写入缓存,如果没有连接网络,那么会从缓存区域获取已经加载的图片并显示出来。

一下是具体的配置和使用方式:

1:添加jar包,并添加依赖。

2:配置universal-image-loader,代码:

import com.inext.test.volleytest.R;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;

/**
 * Created by Administrator on 2016/5/6.
 */
public class ImgLoaderUtil {

    private static DisplayImageOptions options =
            new DisplayImageOptions.Builder()
                    //下载时显示的图片
            .showImageOnLoading(R.mipmap.ic_launcher)
                    //下载错误时显示的图片
            .showImageOnFail(R.mipmap.ic_launcher)
                    //下载为空时显示的图片
            .showImageForEmptyUri(R.mipmap.ic_launcher)
                    //存储和硬盘
            .cacheInMemory(true)
            .cacheOnDisk(true)
            .bitmapConfig(Bitmap.Config.ARGB_8888)
                    //缩放类型
            .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
            //复位
            .resetViewBeforeLoading(true)
            .build();

    public static void display(String url,ImageView imageView){
        //此ImageLoader不是volley下的
        ImageLoader.getInstance().displayImage(url,imageView,options);

    }
public static void clear(){
    ImageLoader.getInstance().clearDiskCache();
    ImageLoader.getInstance().clearMemoryCache();
}
    public static void imageLoader(Context context){
        ImageLoaderConfiguration configuration =
                new ImageLoaderConfiguration.Builder(context)
                .denyCacheImageMultipleSizesInMemory()
                        //线程池推荐大小为3
                .threadPoolSize(3)
                        //线程优先级
                .threadPriority(Thread.NORM_PRIORITY)
                        //内存缓存大小
                .memoryCacheSize((int) (Runtime.getRuntime().maxMemory()/8))
                        //硬盘缓存大小
                .diskCacheSize(50*1024*1024)
                        //加密方式
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())
                        //默认设置
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
                .imageDownloader(new BaseImageDownloader(context,50000,50000))
                        //无限制缓存
                .diskCache(new UnlimitedDiskCache(FileUitlity.getInstance(context).makeDir("imgCache")))
                .build();
        ImageLoader.getInstance().init(configuration);
    }
}

3:调用:

//初始化
ImgLoaderUtil.imageLoader(context);
//传入图片地址和要显示的imageview,系统会自动处理网络与缓存并加载显示图片
ImgLoaderUtil.display(url, img);
时间: 2024-08-14 17:05:20

Android图片缓存的相关文章

Android图片缓存技术!直接用在你的项目中,简单方便高效

好久没有写博客了,最近比较繁琐,什么面试呀,找工作呀,大三的生活就快完了,准确的是大学的生活就快完了!三年了,一直在搞移动开发,感觉好快呀,不想就这样的离开学校了!咳咳咳,扯远了... 前不久搞的Android图片缓存,刚开始引入开源的框架,用着还行,但是在开发中遇到问题,就比如universal-image-loader-1.9.5.jar这个框架吧,在加载图片的时候自定义imageview无法加载,可能是存在以下问题吧,况且导入框架导致开发的项目包越来越大,基于上面的这几种情况,于是我就想自

android图片缓存框架Android-Universal-Image-Loader(二)

这篇打算直接告诉大家怎么用吧,其实这个也不是很难的框架,大致使用过程如下: // 获取缓存图片目录 File cacheDir = StorageUtils.getOwnCacheDirectory(activity, "imageloader/Cache"); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( activity).memoryCacheExtraOptions(800, 76

android图片缓存框架Android-Universal-Image-Loader

最近跟同学们做了一个创业项目,其实跟以前做项目不同,以前大多数都是做web网站,对内存管理这些不太关注,因为是pc机,做android的话也就是一些小列子,现在到了做产品阶段吧,只能把项目做到最优.不扯了,先来说这个框架是做什么的,Android-Universal-Image-Loader主要是一个图片的缓存框架,根据官方解释就是,它提供了一个异步处理图片的方案.它提供两种获取图片方式async or sync,并且提供了一个可定制化的组件(thread executors, download

图片会说话系列之Android图片缓存框架

前言:看过很多精彩的文章,作者写的非常好,但总觉得文字描述没有图片或图表说明来得直观,因为图片可以化抽象为具体.语言是有区域性的,而图片则是全世界通用的,即使语言不通,却能通过图片了解一切.因此想做一个系列的简博客,内容就是一张图附带一些必要的说明,这样就能迅速抓住重点,而不需要做太多的阅读,便能了解框架性的东西.文章所涉及到的图片有的可能来自官方网站,有的来自名家博客,或者是自己绘制的,都会一一说明. 切入正题,先来第一发,上图: 上图来自:https://github.com/nostra1

Android图片缓存分析(一)

Android中写应用时,经常会遇到加载图片的事,由于很多图片是网络上下载获取的,当我们进页面时,便会去网络下载图片,一两次可能没啥问题,但如果同一张图片每次都去网络拉取,不仅速度慢,更影响用户体验,同时会浪费用户的流量. 基于此,很多人便想到了图片缓存的方法. 现在比较普遍的图片缓存主要有以下几个步骤: 一.从缓存中获取图片 二.如果缓存中未获取图片,则从存储卡中获取 三.如果存储卡中未获取图片,则从网络中获取 一.从缓存中获取图片 我们知道,Android中分配给每个应用的内存空间是有限的,

Android 图片缓存设计

1.简介 大家都知道,在我们Android 开发的过程中,对于图片的处理,是非常重要的,而对于我们如果每次都重网络去拉去图片,那样会造成,现在android应用中不可避免的要使用图片,有些图片是可以变化的,需要每次启动时从网络拉取,这种场景在有广告位的应用以及纯图片应用(比如淘宝,qq的照片墙)中比较多. 现在有一个问题:假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量.在当前的状况下,对于非wifi用户来说,流量还是很贵的,一个很耗流量的应用,其用户数量级肯定要受到影响.当然,我想,

Android图片缓存库使用经验总结

Volley,Universal-Image-Loader和picasso 几个图片加载请求 框架的分析 http://www.wl566.com/biancheng/154046.html http://blog.csdn.net/djun100/article/details/24708825 主要是 在 ListView 滑动的时候,取消已经消失的,省下资源. Picasso 和 Universal-Image-Loader 都做了. volley 取消 好像要我们自己去取消, cancl

Android 图片缓存机制

1.采用线程池 2.内存缓存+文件缓存 3.内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制只能使用最大JVM内存的1/4 4.对下载的图片进行按比例缩放,以减少内存的消耗 具体的代码里面说明.先放上内存缓存类的代码MemoryCache.java: public class MemoryCache { private static final String TAG = "MemoryCache"; // 放入缓存时是个同步操作 // LinkedHashM

android图片缓存(包含ReusableBitmapDrawable和BitmapPool)

现在做的项目中,有用到一个开源的2D地图框架osmdroid,但是在项目中,使用还是有一些问题,例如,多个地图实例,会有独自的图片缓存,Activity onPause时,并不会释放图片缓存,如果多级界面都有地图的话,可能会造成很多手机内存溢出(按照每个瓦片256*256,屏幕1280*720来算,显示一个屏幕的地图,至少要在内存保存15张图片,占用内存256*256*4*15=3.75M),所以还是得针对项目做一定的修改调整.今天将项目中使用到的图片缓存做一个整理. 首先说下整体的图片加载流程