Android-Universal-Image-Loader异步加载图片框架学习研究(2)

啧啧,这里就不详叙了,框架里面命名很透彻,基本见名知意,它总共分为几大模块:

1、缓存模块;

下图为缓存模块包结构图:

主要分为disc和memory,这主要是磁盘缓存跟内存缓存管理,哈,咋看介么多类,其实大部分是官方提供给我们的策略实现,这里主要用的是策略模式,来分析一下这个包结构:

其实这里我们只要关注两个类,分别是disc和memory下面的DiscCacheAware、MemoryCacheAwarer这两个接口,它提供给了我们外部调用所需要的接口,外部也是直接使用这两个接口,而impl里面则是对这两个类的实现,将接口的行为方法进行不同的策略实现即真正执行的代码; 而我们需要使用的时候,只需要在配置ImageLoaderConfiguration的时候,根据需要配置对应的DiscCacheAware、MemoryCacheAwarer的子类实现即可;

这样做即结构清晰,而且当我们有自己的需求的时候,我们只需要继承这两个接口,定义自己的策略行为即可,不需要修改任何代码逻辑;

2、解码模块:

下图为解码模块包结构图:

看似简单,姑且就当做一个模块吧,结构跟缓存模块类似,我们主要关注ImageDecoder接口,它只有一个方法Bitmap decode(ImageDecodingInfo imageDecodingInfo),其意根据imageDecodingInfo提供给他的解码信息,进行解码,得到我们需要的bitmap;这里应该就明白这个模块的功能了吧!

官方只提供给了我们一个实现类即BaseImageDecoder,这里实现细节就不记录了。

3、显示模块:

下图为显示模块包结构图:

额,多么熟悉的结构,只需要看一个接口BitmapDisplayer,里面只有一个方法display,即整个模块目的只有一个,显示图片,至于如何显示,官方也提供给了我们几种行为策略:FadeInBitmapDisplayer(渐变显示)、RoundedBitmapDisplayer(图片圆角显示)、RoundedVignetteBitmapDisplayer(没玩过,意思是装饰圆角么,嘿嘿)!

当然这只是一点点,具体你要怎么显示,当然是天高任你飞了,只要实现BitmapDisplayer这个接口,就行了。

4、下载模块:

见图:

结构再也不陌生了,啧啧,此模块核心接口ImageDownloader,图片下载,这个接口里面定义了一个内部枚举类Scheme,不得不被如此强大的功能折服了:

Scheme代码:

/** Represents supported schemes(protocols) of URI. Provides convenient methods for work with schemes and URIs. */

public enum Scheme {

HTTP(“http”), HTTPS(“https”), FILE(“file”), CONTENT(“content”), ASSETS(“assets”), DRAWABLE(“drawable”), UNKNOWN(“”);

private String scheme;

private String uriPrefix;

Scheme(String scheme) {

this.scheme = scheme;

uriPrefix = scheme + “😕/”;

}

/**

  • Defines scheme of incoming URI

  • @param uri URI for scheme detection

  • @return Scheme of incoming URI

*/

public static Scheme ofUri(String uri) {

if (uri != null) {

for (Scheme s : values()) {

if (s.belongsTo(uri)) {

return s;

}

}

}

return UNKNOWN;

}

private boolean belongsTo(String uri) {

return uri.toLowerCase(Locale.US).startsWith(uriPrefix);

}

/** Appends scheme to incoming path */

public String wrap(String path) {

return uriPrefix + path;

}

/** Removed scheme part (“scheme://”) from incoming URI */

public String crop(String uri) {

if (!belongsTo(uri)) {

throw new IllegalArgumentException(String.format(“URI [%1 s ] d o e s n ′ t h a v e e x p e c t e d s c h e m e [ s] doesn't have expected scheme [%2 s]doesnthaveexpectedscheme[s]”, uri, scheme));

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后笔者收集整理了一份Flutter高级入门进阶资料PDF

以下是资料目录和内容部分截图



里面包括详细的知识点讲解分析,带你一个星期入门Flutter。还有130个进阶学习项目实战视频教程,让你秒变大前端。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

[外链图片转存中…(img-5u8oc89q-1712610699169)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-msKH4yW1-1712610699169)]

  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值