(转)Android图片加载框架

原文:http://www.jianshu.com/p/3ac30878c72c

一、UniversalImageLoader

https://github.com/nostra13/Android-Universal-Image-Loader
UIL可以算是老牌最火的图片加载库了,使用过这个框架的项目可以说多到教你做人。可惜的是该作者在项目中说明已经停止了对该项目的维护。这就意味着以后任何的新特性都不会再继续开发,所以毫无疑问 UIL不推荐在项目中使用了。

加载原理:
1、ImageLoader图片加载器,采取了单例模式,用于图片的加载和显示
2、MemoryCache图片内存换成,默认使用算法Least Recently Used(LRU),存储结构LinkedHashMap
3、DiskCache图片磁盘缓存,默认使用算法LruDiskCache,缓存目录下名为journal文件记录缓存所有操作
4、图片加载流程
    1.判断图片的内存缓存是否存在,若存在直接执行步骤8
    2.判断图片的磁盘缓存是否存在,若存在直接执行步骤5
    3.ImageDownloader从网络上下载
    4.将图片缓存在磁盘上
    5.ImageDecoder将图片decode成bitmap对象
    6.BitmapProcessor根据DisplayImageOptions配置对图片进行预处理(Pre-process Bitmap);
    7.将bitma对象缓存到内存中
    8.根据DisplayImageOptions配置对图片进行后处理(Post-process Bitmap)
    9.执行DisplayBitmapTask将图片显示在相应的控件上

二、Picasso

https://github.com/square/picasso
Picasso是Square公司开源的一个Android平台上的图片加载框架,简单易用,一句话完成加载图片

使用:Picasso.with(this).load("url").placeholder(R.mipmap.ic_default).into(imageView);
图片加载流程
    1.初始化Picasso,实例化其唯一的对象
    2.根据传入的Url、File、resource Id,构建ReqeustCreator对象
    3.根据ReqeustCreator构建Request对象,同时根据Reqeust属性,尝试从Cache中访问数据
    4.Cache Hit,则通过回调,设置Target或者ImageView,完成该Reqeust
    5.如果Cache Miss,那么则构建相应的Action,并提交到DispatcherThread当中
    6.Dispatcher中的Handler接收到相应的Message,调用dispatcher.performSubmit(action)进行处理
    7.创建BitmapHunter对象,并提交到PicassoExecutorService线程池
    8.再次检查Memory Cache中已经有缓存,如果Hit,则读取缓存中的Bitmap
    9.如果Cache miss,则交给Action对应的ReqeustHandler进行处理,比如网络请求,或者从File读取图片
    10.返回结果之后,通知Dispatcher中的Handler处理结果
    11.DispatcherThread中将BitmapHunter的结果打包(batch),最快200ms打包一次。通知主线程HANDLER进行处理
    12.主线程HANDLER接收打包的BitmapHunter,对最后的结果进行分发

三、Glide

https://github.com/bumptech/glide
Glide是Google一位员工的大作, 完全是基于Picasso,沿袭了Picasso的简洁风格,但是在此做了大量优化与改进

1.内存缓存
Picasso默认Bitmap是ARGB8888格式(一个像素占用4个字节内存), 
Glide默认是RGB565格式(一个像素占用2个字节内存,但是没有透明度A), 内存开销小一半    
2.磁盘缓存
Picasso只会缓存原始尺寸图片,而Glide缓存多种规格,
Glide根据ImageView大小来缓存相应大小图片尺寸,
如ImageView大小是200*200,原图是400*400,Glide会缓存200*200规格图,而Picasso只会缓存400*400规格    
3.Glide支持加载Gif动态图,而Picasso不支持   
总体来说, Glide是在Picasso之上的二次开发,各个方面做了不少改进,
不过这也导致jar包比Picasso大不少,不过也就不到500k,影响不是很大。

四、Fresco

https://github.com/facebook/fresco
Fresco是Facebook出品,新一代图片加载库

Android应用可用内存有限,经常会因为图片加载导致OOM,虽然我们有各种手段去优化,尽量减少出现OOM的可能性,但是永远没法避免,尤其某些低端手机OOM更是严重。
Facebook另辟蹊径,既然没法在Java层处理,在更底层的Native堆做手脚,于是Fresco将图片放到一个特别的内存区域叫Ashmem区,就是属于Native堆,图片不再占用Java层内存,所以能大大的减少OOM

四个库对比,加载大图Fresco较好,不过Fresco比较庞大,推荐在主要都是图片的app中使用,一般app使用Glide和Picasso

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,472评论 25 707
  • 成长犹如隔开那阴阳两边的带有窗台的高墙,未成熟的心就像从湿漉漉的地上长出的青苔一样,潜滋暗长而又肆无忌惮。...
    文刀草将阅读 113评论 0 0
  • 近日,逛了府邸之一的恭王府。 一进门口,真是很气派的宅子,一个恭王府,则是半个清王朝。 在这个恭王府当中,曾经住过...
    _美朵阅读 175评论 1 0
  • 幽溪居士春成作 故乡情 深渠木叶映日华,绿水绕田戏农鸦。 春风得意扶杨舞,斜面迎辉赏落霞。 鸟鸣回荡声悠悠,空林伴...
    墨泉書齋阅读 334评论 5 15