今天在做项目的时候用了之前写的图片载入类。尽管也能实现缓存什么的。可是在载入大图的时候非常慢非常慢。于是上网找解决方式,准备优化一下,无意中发现了 Android-Universal-Image-Loader。用过的人都说好。一開始我是拒绝的。可是耐不住网友的评论,于是尝试用了一下,结果我duang了。真的好好吃啊。哦。不,是好好用啊。以下就解说一下使用过程吧。

事实上有位网友已经写的非常具体了,我也是參考他的:http://blog.csdn.net/vipzjyno1/article/details/23206387,有须要的能够直接看他的,我这里仅仅是简单记录下学习记录罢了。

首先是GITHUB上的下载路径为:https://github.com/nostra13/Android-Universal-Image-Loader

一、既然是通过网络获取图片,并涉及缓存,那么肯定须要两个权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

二、配置ImageLoaderConfiguration这个类。能够在Application中初始化设置该类。

ImageLoaderConfiguration config = new ImageLoaderConfiguration  .Builder(context)  .memoryCacheExtraOptions(480, 800) // max width, max height,即保存的每一个缓存文件的最大长宽  .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) // Can slow ImageLoader, use it carefully (Better don't use it)/设置缓存的具体信息,最好不要设置这个  .threadPoolSize(3)//线程池内载入的数量  .threadPriority(Thread.NORM_PRIORITY - 2)  .denyCacheImageMultipleSizesInMemory()  .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache implementation/你能够通过自己的内存缓存实现  .memoryCacheSize(2 * 1024 * 1024)    .discCacheSize(50 * 1024 * 1024)    .discCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候的URI名称用MD5 加密  .tasksProcessingOrder(QueueProcessingType.LIFO)  .discCacheFileCount(100) //缓存的文件数量  .discCache(new UnlimitedDiscCache(cacheDir))//自己定义缓存路径  .defaultDisplayImageOptions(DisplayImageOptions.createSimple())  .imageDownloader(new BaseImageDownloader(context, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间  .writeDebugLogs() // Remove for release app  .build();//開始构建  // Initialize ImageLoader with configuration.  

以上配置按需选择。无需所有配置

记得在你的Manifest中为你的application写上name属性

<applicationandroid:name="com.cwenhui.chowhound.config.UILApplication"android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@android:style/Theme.Light.NoTitleBar" >
......
</application>

配置好ImageLoaderConfiguration后。调用下面方法来实现初始化:

[java]  view plain copy
  1. ImageLoader.getInstance().init(config);//全局初始化此配置

注1:ImageLoaderConfiguration 配置中的.discCacheFileNameGenerator()方法是将缓存下来的文件以什么方式命名

里面能够调用的方法有  1.new Md5FileNameGenerator() //使用MD5对UIL进行加密命名

2.new HashCodeFileNameGenerator()//使用HASHCODE对UIL进行加密命名

注2:关于 设置缓存的文件夹,能够通过下面方法:

[java]  view plain copy
  1. File cacheDir = StorageUtils.getOwnCacheDirectory(getApplicationContext(), "imageloader/Cache");

//这个是你希望的缓存文件的文件夹:imageloader/Cache

之后在ImageLoaderConfiguration的配置文件里通过设置

[java]  view plain copy
  1. .discCache(new UnlimitedDiscCache(cacheDir))//自己定义缓存路径

方法来设置该应用的图片缓存路径。

三、使用ImageLoader进行图片载入的时候,先要实例化ImageLoader,调用下面方法进行实例化。在每一个布局里面都要实例化后再使用。

[java]  view plain copy
  1. protected ImageLoader imageLoader = ImageLoader.getInstance();

之后进行显示的图片的各种格式DisplayImageOptions 的设置:

[java]  view plain copy
  1. DisplayImageOptions options;
  2. options = new DisplayImageOptions.Builder()
  3. .showImageOnLoading(R.drawable.ic_launcher) //设置图片在下载期间显示的图片
  4. .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片
  5. .showImageOnFail(R.drawable.ic_launcher)  //设置图片载入/解码过程中错误时候显示的图片
  6. .cacheInMemory(true)//设置下载的图片是否缓存在内存中
  7. .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
  8. .considerExifParams(true)  //是否考虑JPEG图像EXIF參数(旋转,翻转)
  9. .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以怎样的编码方式显示
  10. .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
  11. .decodingOptions(android.graphics.BitmapFactory.Options decodingOptions)//设置图片的解码配置
  12. //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间
  13. //设置图片增加缓存前。对bitmap进行设置
  14. //.preProcessor(BitmapProcessor preProcessor)
  15. .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位
  16. .displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少
  17. .displayer(new FadeInBitmapDisplayer(100))//是否图片载入好后渐入的动画时间
  18. .build();//构建完毕

相同是依据需求选择性地配置

注:

以上配置中的:

1).imageScaleType(ImageScaleType imageScaleType)  是设置 图片的缩放方式
     缩放类型mageScaleType:

EXACTLY :图像将全然按比例缩小的目标大小

EXACTLY_STRETCHED:图片会缩放到目标大小全然

IN_SAMPLE_INT:图像将被二次採样的整数倍

IN_SAMPLE_POWER_OF_2:图片将降低2倍。直到下一降低步骤,使图像更小的目标大小

NONE:图片不会调整
  2).displayer(BitmapDisplayer displayer)   是设置 图片的显示方式

显示方式displayer:

RoundedBitmapDisplayer(int roundPixels)设置圆角图片

FakeBitmapDisplayer()这个类什么都没做

FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间

         SimpleBitmapDisplayer()正常显示一张图片  

之后依照需求调用

1.纯粹为了载入默认配置的一个图片的

方法:

public void displayImage(String uri, ImageView imageView) {}

详细实现:

[java]  view plain copy
  1. ImageLoader.getInstance().displayImage(imageUrl, imageView); // imageUrl代表图片的URL地址。imageView代表承载图片的IMAGEVIEW控件

2.载入自己定义配置的一个图片的

方法:

public void displayImage(String uri, ImageView imageView, DisplayImageOptions options) {}

详细实现:

[java]  view plain copy
  1. ImageLoader.getInstance().displayImage(imageUrl, imageView,options); // imageUrl代表图片的URL地址,imageView代表承载图片的IMAGEVIEW控件 。 options代表DisplayImageOptions配置文件

3.图片载入时候带载入情况的监听

方法:

public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,ImageLoadingListener listener) {}

ImageLoadingListener 用于监听图片的下载情况。

详细实现:

[java]  view plain copy
  1. imageLoader.displayImage(imageUrl, imageView, options, new ImageLoadingListener() {
  2. @Override
  3. public void onLoadingStarted() {
  4. //開始载入的时候运行
  5. }
  6. @Override
  7. public void onLoadingFailed(FailReason failReason) {
  8. //载入失败的时候运行
  9. }
  10. @Override
  11. public void onLoadingComplete(Bitmap loadedImage) {
  12. //载入成功的时候运行
  13. }
  14. @Override
  15. public void onLoadingCancelled() {
  16. //载入取消的时候运行
  17. }});

4.图片载入时候。带监听又带载入进度条的情况
   调用:
public void loadImage(String uri, ImageSize targetImageSize, DisplayImageOptions options,
                    ImageLoadingListener listener, ImageLoadingProgressListener progressListener) {}
   详细实现:

[java]  view plain copy
  1. imageLoader.displayImage(imageUrl, imageView, options, new ImageLoadingListener() {
  2. @Override
  3. public void onLoadingStarted() {
  4. //開始载入的时候运行
  5. }
  6. @Override
  7. public void onLoadingFailed(FailReason failReason) {
  8. //载入失败的时候运行
  9. }
  10. @Override
  11. public void onLoadingComplete(Bitmap loadedImage) {
  12. //载入成功的时候运行
  13. }
  14. @Override
  15. public void onLoadingCancelled() {
  16. //载入取消的时候运行
  17. },new ImageLoadingProgressListener() {
  18. @Override
  19. public void onProgressUpdate(String imageUri, View view, int current,int total) {
  20. //在这里更新 ProgressBar的进度信息
  21. }
  22. });

四、注意事项
  1.上述提到的2个权限必须增加。否则会出错
  2.ImageLoaderConfiguration必须配置而且全局化的初始化这个配置ImageLoader.getInstance().init(config);  否则也会出现错误提示
  3.ImageLoader是依据ImageView的height,width确定图片的宽高。
  4.假设常常出现OOM(别人那边看到的。认为非常有提的必要)
   ①降低配置之中线程池的大小,(.threadPoolSize).推荐1-5;
   ②使用.bitmapConfig(Bitmap.config.RGB_565)取代ARGB_8888;
   ③使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者        try.imageScaleType(ImageScaleType.EXACTLY);
   ④避免使用RoundedBitmapDisplayer.他会创建新的ARGB_8888格式的Bitmap对象;
   ⑤使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory();

对于怎样载入本地图片:

  1. String imageUri = "http://site.com/image.png"; // from Web
  2. String imageUri = "file:///mnt/sdcard/image.png"; // from SD card
  3. String imageUri = "content://media/external/audio/albumart/13"; // from content provider
  4. String imageUri = "assets://image.png"; // from assets
  5. String imageUri = "drawable://" + R.drawable.image; // from drawables (only images, non-9patch)

參考:http://blog.csdn.net/vipzjyno1/article/details/23206387

图片异步载入之 Android-Universal-Image-Loader相关推荐

  1. android universal image loader 缓冲原理详解

    1. 功能介绍 1.1 Android Universal Image Loader Android Universal Image Loader 是一个强大的.可高度定制的图片缓存,本文简称为UIL ...

  2. Android新浪微博client(七)——ListView图片异步加载、高速缓存

    原文出自:方杰|http://fangjie.sinaapp.com/?p=193 转载请注明出处 终于效果演示:http://fangjie.sinaapp.com/?page_id=54 该项目代 ...

  3. 【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 )

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/50824912 相关地址介绍 : -- Universal I ...

  4. Android 图片异步加载

    所谓图片异步加载,意思是不用一次把图片全部加载完,你可以叫它延迟加载,缓冲加载都行. 看看你有没有这种需求:某篇文章图片很多,如果在载入文章时就载入所有图片,无疑会延缓载入速度,让用户等更久,所以,我 ...

  5. universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法

    universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法 参考文章: (1)universal image loader在listview/ ...

  6. android复位机器人图片_Universal-Image-Loader 图片异步加载类库还不熟?

    码个蛋(codeegg) 第 824 次推文 作者:欢醉 博客:https://cloud.tencent.com/developer/article/1026386 码妞看世界 写在前面 这个图片异 ...

  7. Android 图片异步加载的体会,SoftReference已经不再适用

    在网络上搜索Android图片异步加载的相关文章,目前大部分提到的解决方案,都是采用Map<String, SoftReference<Drawable>>  这样软引用的方式 ...

  8. android webview 图片异步加载,Webview 图片异步加载及bug解决

    在项目中新闻显示需要使用图片的异步加载,并且在加载图片前和加载图片失败时显示默认图片. 关于webview中图片的异步加载的思路如下: 方案一:由前端同学全权负责(使用js实现异步加载) 方案二:an ...

  9. (universal Image Loader)UIL 使用 (2)

    系列(universal Image Loader)UIL 使用 (1)   UIL 使用 3 简单介绍了UIL的最基本的使用方法,这次继续老学习UIL的使用 这次只是分析学习一个方法 <spa ...

最新文章

  1. win7访问不了服务器共享文件夹权限设置,win7系统开启共享文件夹访问权限的操作方法...
  2. 用CSS伪元素制作箭头
  3. hihocoder #1055 : 刷油漆(树形dp)
  4. dom4kj解析xml
  5. 使用git remote提交代码
  6. java方法的定义格式
  7. 将 Fortinet 连接到
  8. 动态规划之《寻找最大上升序列》
  9. 工具类与工具函数 —— fatal.h
  10. 一维树桩数组区间更新、区间查询
  11. 冷美人为什么“冷”?
  12. 线性查找算法(BFPRT)
  13. 【PADS】用PADS画PCB
  14. int类型和String类型相互转换
  15. 一文读懂IT行业都有哪些职位
  16. 【NEO NEXT社区】高校区块链技术分享会——上海交通大学
  17. 小白都能做到的使用css如何让一个盒子沾满剩余的空间
  18. 中文加解密异常的问题
  19. jQuery实现购物车
  20. 联发科射频工程师题目_MTK联发科技面试经验

热门文章

  1. oracle12c-AFD故障
  2. 老薛主机磁盘空间满了怎么办
  3. dijkstra算法 java eclipse_数学:Dijkstra算法
  4. matlab doc(),matlab指令大全(Matlab instruction Daquan).doc
  5. Codeforces Round 868 (Div. 2) C. Strongly Composite
  6. 【Caffe特征图可视化】【权重图weight】【特征图feat】
  7. 【云原生之Docker实战】在Docker环境部署Answer问答平台
  8. 通过禁止用户权限来禁止Win10自动重启更新
  9. redis漏洞利用总结
  10. 【Java基础】面向对象与面向过程、编译型语言与解释型语言