andorid 学习笔记 UniversalImageLoader的使用


from : http://blog.csdn.net/yuanlongquan753/article/details/52709658?ref=myread

UniversalImageLoader

问题:

从网络获取图片、显示、回收,每个环节都可能造成应用的OOM(如果没做相关的处理的话)。像ListView或者是GridView中,一页就含有大量的图片,快速滑动的时候,没有OOM也会有卡顿的现象。

解决办法:

使用异步加载网络图片、缓存以及显示。
ImageLoader的工作原理: 

这里写图片描述

  • 最后下载好图片,同时缓存到内存和本地中。
  • 当退出一个页面的时候,内存中ImageLoader的缓存将会全部清除,节省大量内存。
  • ImageLoader对图片的引用形式为软引用,当内不足的时候,将会被GC。
UniversalImageLoader的三大组件
  1. ImageLoadConfiguration: 
    对图片缓存过程进行总体的配置,包括内存缓存大小、本地缓存大小以及缓存的位置,下载策略(FIFO,LIFO)
  2. DisplayImageOptions: 
    控制图片显示的细节,比如指定下载中、下载失败、URL为空等默认图片,是否将图片缓存到内存或者硬盘中。
  3. ImageLoader: 
    在显示图片的地方,比如RecyclerView的Adapter中,使用displayImage把Url对应的图片显示在ImageView上。
使用流程:
1.  添加库的三种方法

   a.  将jar 包添加到lib目录下面

     b.Maven dependency:  

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <dependency>  
  2.     <groupId>com.nostra13.universalimageloader</groupId>  
  3.     <artifactId>universal-image-loader</artifactId>  
  4.     <version>1.9.5</version>  
  5. </dependency>  
     c. Gradle dependency:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family:-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;font-size:14px;color:#333333;">compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'</span>  
2、在Manifest文件中配置相关

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <manifest>  
  2.         <!-- 网络权限 -->  
  3.         <uses-permission android:name="android.permission.INTERNET" />  
  4.         <!-- 缓存图片到SD卡中所使用的权限 -->  
  5.         <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  6.     ...  
  7. </manifest>  

3、 在继承Application的类中或者是在Activity中初始化配置

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class YuZhenApplication extends Application {  
  2.     @Override  
  3.     public void onCreate() {  
  4.         super.onCreate();  
  5.   
  6.         DisplayImageOptions displayImageOptions =  
  7.                 new DisplayImageOptions.Builder()  
  8.                         // 当图片加载中的时候显示的图片,showStubImage()方法已废弃  
  9.                         .showImageOnLoading(R.mipmap.ic_launcher)  
  10.                         // 空url时显示的图片  
  11.                         .showImageForEmptyUri(R.mipmap.ic_launcher)  
  12.                         // 加载图片失败时显示的图片  
  13.                         .showImageOnFail(R.mipmap.ic_launcher)  
  14.                         // 解析Bitmap时使用的编码,默认为ARGB_8888  
  15.                         .bitmapConfig(Bitmap.Config.ARGB_8888)  
  16.                         // 缓存到内存中  
  17.                         .cacheInMemory(true)  
  18.                         // 缓存到本地  
  19.                         .cacheOnDisk(true)  
  20.                         // 设置在加载的前延迟的时间,默认没有延迟  
  21.                         .delayBeforeLoading(0)  
  22.                         .build();  
  23.   
  24.         ImageLoaderConfiguration imageLoaderConfiguration =  
  25.                 new ImageLoaderConfiguration.Builder(getApplicationContext())  
  26.                         // 设置线程的优先级  
  27.                         .threadPriority(Thread.NORM_PRIORITY - 2)  
  28.                         // 将图像解析成Bitmap时内存缓存保留的最大图片宽度和高度,默认为设备屏幕的宽高  
  29.                         .memoryCacheExtraOptions(480480)  
  30.                         // 默认的ImageLoader将会缓存多种尺寸的图片到内存中,调用这个方法禁止这个行为  
  31.                         .denyCacheImageMultipleSizesInMemory()  
  32.                         // 设置加载图片和设置图片的顺序(先进先出、先进后出)  
  33.                         .tasksProcessingOrder(QueueProcessingType.FIFO)  
  34.                         // 设置内存缓存的大小,默认是1/8APP当前可用的内存大小,可以设置为弱引用存储文件大小  
  35.                         // 注:设置完后,memoryCacheSize(int)方法将会被忽略  
  36.                         .memoryCache(new WeakMemoryCache())  
  37.                         // 设置文件名生成器,使用Md5算法生成(discCacheFileNameGenerator()方法已废弃)  
  38.                         .diskCacheFileNameGenerator(new Md5FileNameGenerator())  
  39.                         // 设置默认显示图片时的配置  
  40.                         .defaultDisplayImageOptions(displayImageOptions)  
  41.                         .build();  
  42.   
  43.         ImageLoader.getInstance().init(imageLoaderConfiguration);  
  44.     }  
  45. }  

4. Android Manifest 中添加application

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <application  
  2.         android:allowBackup="true"  
  3.         android:icon="@mipmap/ic_launcher"  
  4.         android:label="@string/app_name"  
  5.         android:supportsRtl="true"  
  6.         android:name=".SkApplication"  
  7.         android:theme="@style/AppTheme">  
  8.   
  9.         <activity  
  10.             android:name=".MainActivity"  
  11.             android:screenOrientation="portrait">  
  12.             <intent-filter>  
  13.                 <action android:name="android.intent.action.MAIN" />  
  14.   
  15.                 <category android:name="android.intent.category.LAUNCHER" />  
  16.             </intent-filter>  
  17.         </activity>  
  18.   
  19.     </application>  



5. 显示图片的方法

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ImageLoader.getInstance().displayImage(imageUrl,imageView);  


延伸:

优化UniversalImageLoader : http://www.open-open.com/lib/view/open1433940304473.html




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Android 的基本概念 Android 是一个开源的操作系统,主要用于移动设备,如智能手机、平板电脑等。它基于 Linux 内核,提供了丰富的应用程序框架和 API,支持多种开发语言,如 Java、C/C++、Kotlin 等。 Android 应用程序由多个组件组成,包括活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)等。这些组件可以组合在一起,形成复杂的应用程序。 2. Android 应用程序开发 Android 应用程序开发主要使用 Java 编程语言和 Android SDK。开发工具包括 Android Studio、Eclipse 等。 Android 应用程序的结构包括布局文件、资源文件、Java 代码和清单文件等。布局文件用于定义应用程序的用户界面,资源文件包括图像、声音、样式、主题等,Java 代码实现应用程序的逻辑,清单文件描述应用程序的组件和权限等信息。 3. Android 应用程序的调试和测试 Android 应用程序的调试和测试可以使用 Android Studio 提供的调试工具,包括断点调试、日志记录等。还可以使用模拟器或真实设备进行测试。 4. Android 应用程序的发布 发布 Android 应用程序需要进行签名和打包操作,签名用于验证应用程序的身份和完整性,打包将应用程序打包成 APK 文件,可以上传到应用商店进行发布。 5. Android 应用程序的优化 Android 应用程序的优化包括优化布局、资源、代码和网络等方面,以提高应用程序的性能和用户体验。其中,布局优化包括使用布局最优化算法、使用自定义视图等;资源优化包括压缩资源、使用向量图形等;代码优化包括使用异步任务、使用缓存等;网络优化包括使用数据压缩、使用本地存储等。 6. Android 开发的挑战 Android 开发面临的挑战包括设备碎片化、安全问题、性能问题等。设备碎片化指的是不同设备的屏幕尺寸、分辨率、操作系统版本等不同,需要对应用程序进行适配;安全问题指的是应用程序需要保证用户数据的安全和隐私;性能问题指的是应用程序需要保证快速响应和流畅运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值