glide

1、github官网:      https://github.com/bumptech/glide  2、概念      http://www.jianshu.com/p/b160e8a0d88e  结合github官网的介绍  简单总结下  1、谷歌推荐使用  2、一个 android 平台上的快速和高效的开源的多媒体资源管理库,提供 多媒体文件的压缩,内存和磁盘缓存, 资源池的接口。  3、可以最大性能地在 Android 设备上读取、解码、显示图片和视频。  4、可以将远程的图片、视频、动画图片等缓存在设备本地,便于提高用户浏览图片的流畅体验。  5、网址下边有特点介绍  或者想下面网址一样简单总结  http://www.jianshu.com/p/5d156bdee68b  Glide是一个Android高性能媒体框架。支持图片、Gif、原生视频的加载。使用简单,可扩展性强,性能优异,Google推荐使用。  3、优势      1、Universal Image Loader,Volley,Picasso、Fresco、Glide比较    http://www.jianshu.com/p/239df3b480d0(简明扼要,特别是图片左边的总结) http://blog.csdn.net/richiezhu/article/details/46968569/(最下边有做总结)  2、Gilde、Picasso、Fresco    http://www.jianshu.com/p/48311f567969(总结的非常全面到位) http://www.jianshu.com/p/6d5ddfc4eabb http://www.jianshu.com/p/061d5ab2f9d2 http://www.jianshu.com/p/4ed015142857 简单总结下 1、先比较Glide和Picasso    1、总体来讲  二者极为相似,有着近乎相同的API的使用风格,但Glide在缓存策略和加载gif方面略胜一筹。2、Glide的with方法不光接受Context,还接受Activity和Fragment。  图片加载会和Activity/Fragment的生命周期保持一致,所以推荐传参的时候传递Activity和Fragment给Glide,而不是Context。3、默认加在格式  普通情况下,Glide加载的图片质量要差于Picasso。  这是因为Glide默认的Bitmap格式是RGB-565比ARGB-8888格式的内存开销要小一半。  想要提高Glide的图片效果,可以创建一个新的GlideModule将Bitmap格式转换到ARGB-8888。  同时在AndroidManifest.xml中将GlideModule定义为meta-data。4、内存消耗  Picasso内存开销大,原因在于Picasso加载了全尺寸的图片到内存,然后让GPU来实时重绘大小。  Glide加载的大小和ImageView的大小是一致的。  Picasso也是可以指定加载图片大小的,但是问题在于你需要主动计算ImageView的大小,或者说你的ImageView大小是具体的值(而不是wrap_content)5、缓存策略  Picasso缓存的是全尺寸的,Picasso只缓存一个全尺寸的  Glide缓存的是跟ImageView尺寸相同的,假如你要在另外一个地方再次以不同尺寸显示,需要重新下载,调整成新尺寸的大小,然后将这个尺寸的也缓存起来。  可以改变这种行为,看上面第四个网址6、gif  Glide支持gif,Picasso不支持gif7、包的大小  Picasso (v2.5.1)的大小约118kb,而Glide (v3.5.2)的大小约430kb。    2、Fresco(重点看第二个网址)    1、最大特点在于它的内存管理  Fresco 会将图片放到一个特别的内存区域,3级缓存设计(2级内存,1级磁盘)2、渐进式呈现、动图加载gif等3、其他特点看第二个网址4、最大缺点,体积大 3、综合比较    各网址最后部分Glide在多方面都优于Picasso,特别是内存消耗、缓存策略、加载gif上,更快更流畅            Picasso比Glide体积小很多且图像质量比Glide高。Fresco是性能最好的,但体积太大,如果应用没有太多图片需求,不推荐使用Fresco。  4、使用      http://www.jianshu.com/p/8d0fb78659a9  其中提到了非常有用的几点  1、转换Transformations    开发中经常要将图片剪裁成圆角、圆形等 http://www.jianshu.com/p/976c86fa72bc(可以导入类似这样的图像转换开源库)  2、回调Targets    1、SimpleTarget转为Bitmap再根据需要处理

2、ViewTarget(重点)

可以将图片设置到任意View中,而不只局限于imageview,具体操作看网址

3、NotificationTarget

加载图片到 Notifications,看网址

3、用GlideModule自定义 Glide(重点)

看网址和约车看房

5、原理

6、源码

1、初次看,建议照着下面的网址来看,按glide链式函数调用的顺序看

http://www.jianshu.com/p/0789b82b3f80

2、总体流程

http://www.jianshu.com/p/adada3a6e117(开头图解整体流程)

http://www.jianshu.com/p/03d536c43936(最后总结整体流程)

3、专题的解析

http://www.jianshu.com/p/c7746ffed0c7(图片加载的生命周期)

http://www.jianshu.com/p/87a75044a174(如何动态测量获取ImageView大小)

自己总结:

1、首先通过Glide.with方法生成RequestManager对象来管理请求

可以传入Activity、Fragment、Context类型的参数,里面会用到ActivityFragmentLifecycle接口(新建一个不显示的Fragment,在里面有此接口)

来实现图片加载与Activity或Fragment生命周期一样。

另外,RequestManager对象的生成也会调用Glide.get()方法(双重校验的单例模式),Glide.get()方法中有对设置的GlideModule的获取,并应用里面的配置。

2、然后调用RequestManager.load方法得到相应的RequestBuilder对象

可以传入多种类型参数,比如图片url,本地资源文件,File文件等

3、通过Builder建造者模式不断给RequestBuilder添加条件,

比如裁剪,优先级,占位图,缓存策略等等

4、通过into方法传入目的target,并开启请求

5、查看目标View的tag中获取看看是否有request,如果有则清除。然后用新建的request来覆盖。

6、执行request,三级缓存策略,先看缓存中是否存在EngineResource(通过LruResourceCache来实现),再看是否有EngineResource的若引用,

最后看Map中是否存在EngineJob。如果有则直接返回结果并进行相应加载

7、new并执行EngineRunnable这个DecoderJob的封装

EngineJob管理两个线程池,一个磁盘线程池,一个资源线程池,先从磁盘获取,磁盘没有再从其他地方获取。

8、在DecoderJob内部查看是否存在相应的InputStream或者是ParcelFileDescriptor,如果已经存在,则直接将其通过loadProviderdecode成相应的Bitmap,gif等。

否则就通过fetcher先将我们通过load传入的路径进行解析成InputStream、ParcelFileDescriptor,再decode。

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

推荐阅读更多精彩内容