一,序言

Glide是安卓应用软件上的新闻媒体管理方法和照片载入架构,內部封裝了新闻媒体编解码专用工具,运行内存和硬盘缓存文件,资源池等。,并向业主公布简易实用的页面。大家可以用它来获得,编解码和表明视頻,照片和GIF动漫。假如你使用过毕加索,你应该知道Glide的应用方法和毕加索十分类似,乃至许多API都是有一样的名称。Glide是一个优秀的图片载入库,它有下列优势:

1.Glide能够监管Activity的生命期管理方法,更有效地管理图片的读取和公布。

2.载入品质:毕加索默认设置应用argb-8888,格精东默认设置应用RGB-565,内存占用会降低一半。

3.Glide能够载入Gif照片。

4.缓存文件对策和载入速率。毕加索的缓存文件是全规格的,而格精东的缓存文件图象与ImageView的尺寸同样。Glide的这一特点促使载入速率特别快,而毕加索在表明以前必须调节尺寸,这致使了一些延迟时间。

5.Glide能够根据订制GlideMoudle进行独特的载入规定,例如载入数据加密照片。下面,大家将从源码的视角讨论Glide的内部结构基本原理。

二,源码

用(……)滑跑

使我们看一下吉尔德的源码。

/**

*根据在前后文中传送逐渐载入Glide。

*

*

*应用前后文运行的一切要求将仅运用应用软件级选择项,而不容易

*依据生命期事情运行或终止。一般来说,负荷应当从結果的等级逐渐

*将用以。假如資源将在子精彩片段的主视图中应用,

*载入应当从应用该子精彩片段的{ @ link # with(Android . app . fragment)} }逐渐。一样的,

*假如資源将在父精彩片段的主视图中应用,载入应当从

* { @ link # with(Android . app . fragment)}应用父精彩片段。一样,假如資源将被应用

*在主题活动的主视图中,载入应当从{ @ link # with(Android . app . activity)} }逐渐。

*

*

*

*此方案适用将在一切正常精彩片段或主题活动以外应用的資源

*生命期(比如在服务项目或通告缩列图中)。

*

*

* @参照#with(android.app.Activity)

* @参照#with(android.app.Fragment)

* @参照# with(Android . support . v4 . app . fragment)

* @请参照# with(Android . support . v4 . app . fragmentactivity)

*

* @param前后文一切前后文都不容易被保存。

* @回到可用以运行载入的顶尖应用软件的RequestManager。

*/

公共性静态数据RequestManager,含有(前后文前后文){ 0

RequestManagerRetriever查找器= requestmanagertriever . get();return retriever . get(context);

}

/**

*逐渐载入Glide,它将关联到给出的{@link android.app.Activity}的生命期,并应用

*给出{@link Activity}的默认设置选择项。

*

* @param主题活动要应用的主题活动。

* @为给出的主题活动回到一个可用以运行载入的RequestManager。

*/

公共性静态数据要求管理工具,含有(主题活动主题活动){ 0

RequestManagerRetriever查找器= requestmanagertriever . get();return retriever.get(主题活动);

}

/**

*逐渐载入Glide,它将与give { @ link Android . support . v4 . app . fragmentactivity }的生命期密切相关

*而且应用给出的{ @ link Android . support . v4 . app . fragmentactivity }的默认设置选择项。

*

* @param主题活动要应用的主题活动。

* @为给出的精彩片段主题活动回到一个可用以运行载入的要求管理工具。

*/

含有(FragmentActivity)主题活动的公共性静态数据RequestManager

RequestManagerRetriever查找器= requestmanagertriever . get();return retriever.get(主题活动);

}

/**

*逐渐载入Glide,它将关联到给出的{@link android.app.Fragment}的生命期,并应用

*给出的{@link android.app.Fragment}默认设置选择项。

*

* @param精彩片段要应用的精彩片段。

* @回到给出精彩片段的要求管理工具,可用以运行载入。

*/

@TargetApi(搭建。版本号编码。蜂窝)

含有(android.app.Fragment)的公共性静态数据RequestManager片段{

RequestManagerRetriever查找器= requestmanagertriever . get();return retriever.get(精彩片段);

}

/**

*逐渐载入Glide,它将关联到给出的{ @ link Android . support . v4 . app . fragment }的生命期,而且

*应用给出的{ @ link Android . support . v4 . app . fragment }默认设置选择项。

*

* @param精彩片段要应用的精彩片段。

* @回到给出精彩片段的要求管理工具,可用以运行载入。

*/

含有(精彩片段精彩片段){的公共性静态数据RequestManager

RequestManagerRetriever查找器= requestmanagertriever . get();return retriever.get(精彩片段);

}

汇总:能够传到的主要参数有:

* @参照#with(android.app.Activity)

* @参照#with(android.app.Fragment)

* @参照# with(Android . support . v4 . app . fragment)

* @请参照# with(Android . support . v4 . app . fragmentactivity)

与此同时,应用Activity/Fragment as with()主要参数的益处是,照片的载入将与Activity/Fragment的生命期保持一致,比如,挂起状态挂起来载入,修复时全自动重新加载。因而,我建议在传送主要参数时,将Activity和Fragment传送给Glide而不是Context。

第三,标准。

下面我想说的是Glide的基本原理,下面的图是glide基本原理示意图。glide原理-分享glide使用教程-第1张图片下面,我觉得谈一谈滑行的基本原理。下面的图是Glide基本原理平面图。

滑跑电路原理图

1.Glide的資源获得部件:

实体模型:初始資源,如Url,AndroidResourceId,File等。

数据信息:共享文档时常见的是正中间資源,例如Stream和parcelfile descriptor(Content Provider),事实上是电脑操作系统的文件描述符的封裝,有三个值in out err。也有些人说是连接创建后的tcp协议返回值。),这些。

資源:立即运用的資源,包含位图文件,可制作等。

2.器重2的資源。滚动库:

安卓系统的运行内存运用基本上都是在新的情况下产生,当新的较为大的情况下(例如Bitmap),GC_FOR_ALLOW更非常容易被开启。因而,Glide尽量应用資源,避免多余的GC_FOR_ALLOC导致堵塞。

最显著的运行内存器重是运行内存LruResourceCache(第一次从网上或硬盘载入資源时,不容易保留在LruCache中,仅有在释放出来資源时,也就是View不用这一資源时,才会进到LruCache)。

及其BitmapPool(Glide会来尝试应用照片池来得可器重的照片,可是要是没有获得得话便会是新的,当LruCache开启Evicted时,它会回收利用从LruCache中清除的位图文件,并器重和回收利用变换中采用的正中间位图文件)。

3.滑行公共图书馆图库:

以往,位图文件时分复用在时分复用以前务必长短和总宽相同。

稍候,它是尺寸> =它能够按照必须器重,但只必须启用重新部署来调节尺寸。

Glide应用特性对策和尺寸对策来完成这二种对策。

照片池接受到传送的位图文件后,依据长短,总宽或尺寸从密匙池里获得密匙(目标被器重到完美,乃至密匙也在池里应用),随后将每一个密匙储存在双向链表构造中。每一个键下很有可能有很多不主题活动的位图文件。

取下后,减少照片池里纪录的当今尺寸,并擦掉色调。位图文件,以保障其易用性。

4.下降载入运行全过程:

1.Glide.with(context)建立RequestManager。

要求管理工具负责当今前后文的全部要求。

前后文能够传承给精彩片段,主题活动或别的前后文。当精彩片段和主题活动根据时,要求管理工具能够监管当页应对应的主题活动的生命期,进而操纵要求的中止,修复和消除。这儿选用的监管方式是在当今主题活动中加上一个沒有主视图的精彩片段,那样当主题活动在onStart onStop onDestroy上产生时,便会开启该精彩片段的onstart on destroy。

RequestTracker类由RequestManager用于追踪很多当今网页的要求。它应用弱引用来储存已经运作的要求,应用强引入来储存必须修复的要求。

2.带上(前后文)滑跑。载入(网站地址)以建立需要的要求。

一般是DrawableTypeRequest,后边能够是transform,fitCenter,animate,placeholder,error,override,skipMemoryCache,signature这些。

假如必须将資源变换为字节数二维数组,能够加上一个位图文件将其更改成位图文件种类要求。

要求是Glide上传图片的实行模块。

3.带上(前后文)滑跑。载入(url)。进到(imageview)

在要求的进到方式中,将启用要求的逐渐方式来逐渐实行。

在EngineJob宣布转化成并放进Engine实行以前,要是没有提早启用override(总宽,相对高度)来特定必须的间距和相对高度,Glide会试着获得imageview的间距和相对高度。假如当今imageview未复位,而且没法得到相对高度和总宽,Glide将等候主视图复位,随后再次下一步。

5.下降运载資源:

在复位滑行时,滑行制作器将转化成一个实行模块。

模块包括LruCache缓存文件和当今无法运用的主题活动資源缓存文件(弱引用)。

积极缓存文件协助LruCache。当資源从远程计算机中取下用时,它将从远程计算机中取下并投入具体电子计算机。

,缓存文件优先LruCache>activeCache。

模块应当在重置时传到2个ExecutorService,换句话说会出现2个线程池,一个用以从DiskCache获得reSource,另一个用以从Source获得(一般是免费下载)。

进程的封裝模块是EngineJob,它有两个次序的情况,第一个是CacheState,它最先进到DiskCacheService实行获得,要是没有寻找,就进到SourceState,随后进到SourceService实行免费下载。

6.滑行者的总体目标:

承担图象载入的回调函数。

四.引言

之上是Glide的源码和基本原理,其內部实际操作过度繁杂,但恰好是这类繁杂的內部完成提高了Glide的扩展性。例如能够订制硬盘缓存文件对策,订制ModelLoader完成从Model到Data的变换,订制ResourceDecoder和ResourceDecoder完成自然资源的转码和转换格式。用图表汇总全部运载全过程:

glide原理-分享glide使用教程-第2张图片好啦,文章内容告一段落。如果你觉得文章内容写的好,那么就夸我一句吧!如果你觉得有非常值得优化的地区,请给我留言板留言。会认真仔细并改正存在的不足。感谢大量详尽技术专业的安卓系统构架数据信息。

评论(0条)

刀客源码 游客评论