未经本人授权,不得转载!否则必将维权到底
平时做开发的时候, App 中肯定有异步加载图片,或者加载大量图片的需求。而加载图片常常会遇到许多的问题,比如说图片的错乱,OOM 等问题。相信大多数 Android 程序员都是用网络上最流行的图片加载库来实现咱们的需求。比较著名的就是 Universal-Image-Loader 、Fresco 、Picasso 、Glide 。今天首先来讲下大名鼎鼎的 Universal-Image-Loader
###一、特征:
-
多线程下载图片,图片可以来源于网络,文件系统,项目文件夹 assets 中以及 drawable 中等
-
支持随意的配置 ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
-
支持图片的内存缓存,文件系统缓存或者 SD 卡缓存
-
支持图片下载过程的监听
-
根据控件 ImageView 的大小对 Bitmap 进行裁剪,减少 Bitmap 占用过多的内存
-
较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在 ListView , GridView 中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
-
提供在较慢的网络下对图片进行加载
###二、设计原理:
在显示图片的时候,它会先在内存中查找;如果没有,就去本地查找;如果还没有,就开一个新的线程去下载这张图片,下载成功会把图片同时缓存到内存和本地。基于这个原理,我们可以在每次退出一个页面的时候,把 ImageLoader 内存中的缓存全都清除,这样就节省了大量内存,反正下次再用到的时候从本地再取出来就是了。此外,由于 ImageLoader 对图片是软引用的形式,所以内存中的图片会在内存不足的时候被系统回收(内存足够的时候不会对其进行垃圾回收)—— 包建强《 App 研发录》
###三、使用步骤:官方教程 Quick Setup
-
添加依赖:
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
-
添加权限:
<manifest> <!-- Include following permission if you load images from Internet --> <uses-permission android:name="android.permission.INTERNET" /> <!-- Include following permission if you want to cache images on SD card --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_S