关闭

Android图片异步加载之Android-Universal-Image-Loader

494人阅读 评论(0) 收藏 举报
分类:

将近一个月没有更新博客了,由于这段时间以来准备毕业论文等各种事务缠身,一直没有时间和精力沉下来继续学习和整理一些东西。最近刚刚恢复到正轨,正好这两天看了下Android上关于图片异步加载的开源项目,就顺便整理记录下来,作为这一个多月来博客的重新开火做饭吧。从今天起我会陆续恢复博客的更新,也希望大家继续支持。

今天要介绍的是Github上一个使用非常广泛的图片异步加载库Android-Universal-Image-Loader,该项目的功能十分强大,可以说是我见过的目前功能最全、性能最优的图片异步加载解决方案。做Android的同学都知道,Android加载大量图片时,由于系统分配给图片加载的内存大小有限,所以,如果加载图片量非常大的话容易报OOM异常,关于这个异常已经有不少解决方案了,我就不赘述。下面就简要介绍下这个开源项目的主要功能和使用:

一、功能概要

多线程图片加载;

灵活更改ImageLoader的基本配置,包括最大线程数、缓存方式、图片显示选项等;

图片异步加载缓存机制,包括内存缓存(软引用)及本地缓存;

对加载过程实现监听和事件处理;

能够配置加载图片的显示选项,包括图片圆角处理和加载完成显示动画等;

二、基本使用

下载jar包universal-image-loader-1.8.5-with-sources.jar并导入工程(这应该不用教了吧)

配置Manifest文件,添加网络请求和访问外部存储的权限,因为要进行网络请求和本地缓存

[html] view plaincopy

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

   <!-- Include next permission if you want to allow UIL to cache images on SD card -->  

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

3. 实现自定义的MyApplication类,并初始化ImageLoader,注意要在Manifest的Application标签注明

android:name=".MyApplication",否则还是使用的默认的Application类。

[java] view plaincopy

public class MyApplication extends Application {  

   @Override  

   public void onCreate() {  

       super.onCreate();  

         

       // This configuration tuning is custom. You can tune every option, you may tune some of them,  

       // or you can create default configuration by  

       //  ImageLoaderConfiguration.createDefault(this);  

       // method.  

       ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())  

               .threadPriority(Thread.NORM_PRIORITY - 2)  

               .denyCacheImageMultipleSizesInMemory()  

               .discCacheFileNameGenerator(new Md5FileNameGenerator())  

               .tasksProcessingOrder(QueueProcessingType.LIFO)  

               .enableLogging() // Not necessary in common  

               .build();  

         

       //Initialize ImageLoader with configuration  

       ImageLoader.getInstance().init(config);  

   }  

}  

4. 配置图片加载及显示选项,此处有多种自定义配置选项,可以查看doc文档一一了解,这里就不赘述(实在太多)

[java] view plaincopy

DisplayImageOptions options = new DisplayImageOptions.Builder()  

           .showStubImage(R.drawable.ic_launcher)  

           .showImageForEmptyUri(R.drawable.ic_launcher)  

           .showImageOnFail(R.drawable.ic_launcher)  

           .cacheInMemory(true)  

           .cacheOnDisc(false)  

           .displayer(new RoundedBitmapDisplayer(20))  

           .build();  

5. 使用ImageLoader加载图片,这里以在ListView中为每个item异步加载图片为例,只要在Adapter的getView方法中调用如下方法即完成了异步列表图片加载,其中options是之前定义的图片加载和显示选项,animateFirstListener是当图片第一次加载的监听事件,目的在于显示一个淡入的显示效果动画,可以添加其他事件

另外,本例还实现了当列表滑动过程中暂停加载和在用户手放开时才开始加载的功能,这样的好处是保证在列表图片异步加载的过程中不出现卡顿的现象,保证加载的顺滑性。实现这一功能的手段是使ListView监听一个由ImageLoader包含的监听事件PauseOnScrollListener。

若设置cacheOnDisc(true)的话,则缓存的文件可以在/sdcard/Android/data/[package_name]/cache目录下看到。不过建议定期清理缓存,否则时间一长,SD卡就会被占满了,同时也可以在ImageLoaderConfiguration中配置SD的缓存策略,有限制缓存文件数量的,有限制缓存文件最大尺寸等选项。

如果在使用过程中遭遇OOM异常,则建议在ImageLoaderConfiguration中设置threadPoolSize在1-5之间合适。在DisplayOption配置时使用。


0
0
查看评论

Android图片异步加载之Android-Universal-Image-Loader使用

Android开发中我们会经常遇到图片过多或操作不当造成OOM异常,有时虽然是解决了这个问题但却会影响程序的运行效率,例如:当用户在快速滑动滚动条的过程中,我们程序在仍在艰难的加载服务器端的图片,这样给用户造成了极不好的体验。其实网络上关于图片的异步加载和缓存的讲解很多,但是其实,写一个这方面的程序...
  • chaishen10000
  • chaishen10000
  • 2014-03-23 11:37
  • 3632

图片异步加载之 Android-Universal-Image-Loader

今天在做项目的时候用了之前写的图片加载类,虽然也能实现缓存什么的,但是在加载大图的时候很慢很慢,于是上网找解决方案,准备优化一下,无意中发现了 Android-Universal-Image-Loader,用过的人都说好,一开始我是拒绝的,但是耐不住网友的评论,于是尝试用了一下,结果我du...
  • u014038534
  • u014038534
  • 2016-03-25 23:19
  • 799

Android图片异步加载框架Android-Universal-Image-Loader

Android-Universal-Image-Loader是一个图片异步加载,缓存和显示的框架。这个框架已经被很多开发者所使用,是最常用的几个Android开源项目之一,主流的应用,随便反编译几个,都可以见到它的身影。淘宝,天猫,Facebook,京东商城等都用到了这个项目。 该项目的Github...
  • HanTangSongMing
  • HanTangSongMing
  • 2014-12-17 09:03
  • 17481

Android图片异步加载之Android-Universal-Image-Loader使用1

Android开发中我们会经常遇到图片过多或操作不当造成OOM异常,有时虽然是解决了这个问题但却会影响程序的运行效率,例如:当用户在快速滑动滚动条的过程中,我们程序在仍在艰难的加载服务器端的图片,这样给用户造成了极不好的体验。其实网络上关于图片的异步加载和缓存的讲解很多,但是其实,写一个这方面的程序...
  • u013338165
  • u013338165
  • 2014-11-29 11:37
  • 390

【移动开发】Android图片异步加载之Android-Universal-Image-Loader使用

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://smallwoniu.blog.51cto.com/3911954/1336194    Android开发中我们会经常遇...
  • sun1021976312
  • sun1021976312
  • 2014-04-29 23:37
  • 477

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

前段时间做项目遇到在gallery中加载图片的问题,可是我加载的都是本地的图片,而且是壁纸,图片很大,所以每次加载的时候会很慢,后来想到了做个异步加载处理,但是自己写的怎么调试都存在问题,后来就想着直接用网上现有的类库,一查用的最多的就是Android-Universal-Image-Loader,...
  • u011403718
  • u011403718
  • 2015-08-26 16:28
  • 386

图片异步加载框架 Android-Universal-Image-Loader

1.自定义XXXAppllication类,初始化ImageLoader public class XXXApplication extends Application { @Override public void onCreate() { super.onCreate(); ...
  • a125138
  • a125138
  • 2013-10-22 15:08
  • 7986

Android-Universal-Image-Loader 图片异步加载框架

特点 多线程图片加载 尽可能多的配置选项(线程池,加载器,解析器,内存/磁盘缓存,显示参数等等) 图片可以缓存在内存中,或者设备文件目录下,或者SD卡中 可以监听加载进度 可以自定义显示每一张图片时都带不同参数 支持Widget   jar包...
  • yangdeli888
  • yangdeli888
  • 2013-12-11 15:40
  • 1342

Android-Universal-Image-Loader图片异步加载并缓存

这个图片异步加载并缓存的类已经被很多开发者所使用,是最常用的几个开源库之一,主流的应用,随便反编译几个火的项目,都可以见到它的身影。        可是有的人并不知道如何去使用这库如何进行配置,网上查到的信息对于刚接触的人来说可能太少了,下面我就把我使用...
  • xiangzhihong8
  • xiangzhihong8
  • 2014-04-17 22:41
  • 1046

Android开发之listview优化+图片异步加载+避免图片显示闪烁(修改版)

小鹿路过此地。。心热之下写写我li
  • lusiting
  • lusiting
  • 2014-10-19 12:24
  • 1307
    个人资料
    • 访问:81261次
    • 积分:1615
    • 等级:
    • 排名:千里之外
    • 原创:78篇
    • 转载:24篇
    • 译文:0篇
    • 评论:7条
    我的公众号
    文章分类
    最新评论