Universal Image Loader for Android 使用实例

简介: <p><strong><del>最简单的使用示例代码</del></strong></p> <div class="dp-highlighter bg_java"> <div class="bar"> <div class="tools"><strong>[java]</strong> <a target="_blank" href="http://blog.csdn.net/hk

最简单的使用示例代码

  1. <span style="white-space:pre">      </span>// 1.获取ImageLoader实例  
  2.         ImageLoader imageLoader = ImageLoader.getInstance();  
  3.         // 2. 使用默认配置  
  4.         ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);  
  5.         // 3. 初始化ImageLoader  
  6.         imageLoader.init(configuration);  
  7.         // 4. 显示图片时的配置  
  8.         displayImageOptions = new DisplayImageOptions.Builder().cacheInMemory().cacheOnDisc()  
  9.                 .bitmapConfig(Config.RGB_565).build();  
  10.         // 5.显示图片  
  11.         imageLoader.displayImage(uri, imageView, displayImageOptions);  

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以下为参照原文进行的翻译

1.    Caching默认不可用. 启用需要对DisplayImageOptions进行如下配置:

2.  // Create default options which will be usedfor every

3.  // displayImage(...) call if no options will be passed to this method

4.  DisplayImageOptions defaultOptions= new DisplayImageOptions.Builder()

5.          ...

6.          .cacheInMemory()

7.          .cacheOnDisc()

8.          ...

9.          .build();

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

11.         ...

12.         .defaultDisplayImageOptions(defaultOptions)

13.         ...

14.         .build();

15. ImageLoader.getInstance().init(config);// Do it on Application start

16. // Then later, when you want to display image

17. ImageLoader.getInstance().displayImage(imageUrl, imageView); // Default options will be used

or this way:

DisplayImageOptions options= new DisplayImageOptions.Builder()

        ...

        .cacheInMemory()

        .cacheOnDisc()

        ...

        .build();

ImageLoader.getInstance().displayImage(imageUrl, imageView, options); // Incoming options will be used

18.  开启缓存后默认会缓存到外置SD卡如下地址(/sdcard/Android/data/[package_name]/cache).如果外置SD卡不存在,会缓存到手机.缓存到Sd卡需要在Manifest文件中进行如下配置

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

20.  UIL是如何为ImageView精确定义需要的Bitmap的尺寸?它会搜索如下参数

o   获取ImageView真实的 width height

o   获取 android:layout_width  android:layout_height 参数

o   获取 android:maxWidth and/or android:maxHeight 参数

o   configuration (memoryCacheExtraOptions(int,int) option)获取 maximum width and/or height 参数

o   获取设备屏幕的 width and/or height  

所以如果你知道ImageView的大约最大尺寸,就可以设置如下参数android:layout_width|android:layout_height or android:maxWidth|android:maxHeight 这样会有助于正确计算当前View所需要的Bitmap尺寸,并节约内存

如果你使用UIL时经常出现 OutOfMemoryError 那你可以尝试如下方法:

o   减少线程池大小 (.threadPoolSize(...)). 1 - 5 isrecommended.

o   在显示选项中使用 .bitmapConfig(Bitmap.Config.RGB_565) . RGB_565模式消耗的内存比ARGB_8888模式少两倍.

o   配置中使用 .memoryCache(newWeakMemoryCache()) 或者完全禁用在内存中缓存(don't call .cacheInMemory()).

o   在显示选项中使用 .imageScaleType(ImageScaleType.IN_SAMPLE_INT) 或者.imageScaleType(ImageScaleType.EXACTLY).

o   避免使用 RoundedBitmapDisplayer.调用的时候它使用ARGB-8888模式创建了一个新的Bitmap对象来显示

对于内存缓存模式 (ImageLoaderConfiguration.memoryCache(...))你可以使用已经实现好的方法.

o   缓存只能使用强引用

§ LruMemoryCache (Least recently used bitmap is deleted when cache size limit isexceeded缓存大小超过指定值时,删除最近最少使用的bitmap) - Used by default for API >= 9

o   缓存使用弱引用和强引用:

§ UsingFreqLimitedMemoryCache (Least frequently used bitmap is deleted when cachesize limit is exceeded删除最少使用bitmap)

§ LRULimitedMemoryCache (Least recently used bitmap is deletedwhen cache size limit is exceeded删除最近最少使用bitmap) - Used by default for API < 9

§ FIFOLimitedMemoryCache (FIFOrule is used for deletion when cache sizelimit is exceeded先进先出规则删除bitmap)

§ LargestLimitedMemoryCache (The largest bitmap is deleted when cache sizelimit is exceeded删除最大的bitmap)

§ LimitedAgeMemoryCache (Decorator. Cached object is deleted when its ageexceeds defined value缓存对象超过定义的时间后删除)

o   缓存只能使用弱引用:

§ WeakMemoryCache (Unlimited cache不限制缓存)

21.  本地缓存模式可以使用以下以实现的方法 (ImageLoaderConfiguration.discCache(...)):

o   UnlimitedDiscCache (The fastest cache, doesn't limit cache size不限制缓存大小) - Used by default

o   TotalSizeLimitedDiscCache (Cache limited by total cache size. If cache size exceedsspecified limit then file with the most oldest last usage date will be deleted设置总缓存大小,超过时删除最久之前的缓存)

o   FileCountLimitedDiscCache (Cache limited by file count. If file count incache directory exceeds specified limit then file with the most oldest lastusage date will be deleted. Use it if your cached files are of about the samesize.设置总缓存文件数量,当到达警戒值时,删除最久之前的缓存。如果文件的大小都一样的时候,可以使用该模式)

o   LimitedAgeDiscCache (Size-unlimited cache with limited files' lifetime.If age of cached file exceeds defined limit then it will be deleted from cache.不限制缓存大小,但是设置缓存时间,到期后删除)

NOTE: UnlimitedDiscCache比其他方式快30%以上.

22.  To displaybitmap (DisplayImageOptions.displayer(...)) you can usealready prepared implementations:

o   RoundedBitmapDisplayer (Displays bitmap with rounded corners)

o   FadeInBitmapDisplayer (Displays image with "fade in" animation)

23.  To avoid list(grid, ...) scrolling lags you can use PauseOnScrollListener:

24. boolean pauseOnScroll= false; // or true

25. boolean pauseOnFling= true; // or false

26. PauseOnScrollListener listener= new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling);

27. listView.setOnScrollListener(listener);

目录
相关文章
|
6月前
|
Java 关系型数据库 数据库
Android App连接真机步骤与APP的开发语言和工程结构讲解以及运行实例(超详细必看)
Android App连接真机步骤与APP的开发语言和工程结构讲解以及运行实例(超详细必看)
94 0
|
编解码 Android开发 开发者
Android平台RTMP多实例推送的几种情况探讨
好多开发者提到,如何实现Android平台,多实例推送,多实例推送,有几种理解: 1. 多路编码,多个实例分别推送到不同的RTMP URL(如Android采集板卡同时接2路出去); 2. 同一路编码,多个实例分别推送到不同的RTMP URL(如推送到内网、外网不同的RTMP服务器); 3. 部分路编码、部分路对接编码后的H.264/AAC数据,多个实例分别推送到不同的RTMP URL(混合推)。
|
6月前
|
Android开发
Android应用实例(一)之---有道辞典VZ.0
Android应用实例(一)之---有道辞典VZ.0
42 2
|
1月前
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
174 0
|
4月前
|
API Android开发
Android 监听Notification 被清除实例代码
Android 监听Notification 被清除实例代码
|
5月前
|
安全 Java Android开发
使用Unidbg进行安卓逆向实例讲解
使用Unidbg进行安卓逆向实例讲解
125 2
|
6月前
|
Android开发
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。 【5月更文挑战第2天】
284 0
|
6月前
|
Android开发 C++
Android P HAL层添加HIDL实例
Android P HAL层添加HIDL实例
114 0
|
6月前
|
Shell Android开发 数据安全/隐私保护
安卓逆向 -- Frida环境搭建(HOOK实例)
安卓逆向 -- Frida环境搭建(HOOK实例)
137 0
|
Shell Android开发 数据安全/隐私保护
安卓逆向 -- Frida环境搭建(HOOK实例)
安卓逆向 -- Frida环境搭建(HOOK实例)
291 0