Android源码分析之Glide源码分析&基础版ImageLoader框架
来源:互联网 发布:sql删除表中一行 编辑:程序博客网 时间:2024/06/07 20:48
1 Glide源码分析
Glide是一款由Bump Technologies开发的图片加载框架,使得我们可以在Android平台上以极度简单的方式加载和展示图片。本博客基于Glide 3.7.0版本来进行讲解,这个版本的Glide相当成熟和稳定。
1.1 时序图
(1)Glide框架时序图-加载网络图片
下载链接:Glide框架时序图-加载网络图片
(2)Glide框架时序图-加载网络图片
下载链接:Glide框架时序图-加载缓存图片
1.2 参考博客
Android图片加载框架最全解析(一),Glide的基本用法
Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程
Android图片加载框架最全解析(三),深入探究Glide的缓存机制
Android图片加载框架最全解析(四),玩转Glide的回调与监听
Android图片加载框架最全解析(五),Glide强大的图片变换功能
Android图片加载框架最全解析(六),探究Glide的自定义模块功能
Android图片加载框架最全解析(七),实现带进度的Glide图片加载功能
Android图片加载框架最全解析(八),带你全面了解Glide 4的用法
2 基础版ImageLoader框架
1 介绍
花了2周的晚上和周末,学习了MrSimp1e老师的教你写Android ImageLoader框架,能够在一个稍微简单但功能齐全的框架基础上,深入了解实现的同时学到知识,也能够体会到在设计一个开源库时应该要做哪些考虑、做哪些取舍、有什么模式,了解一些开源库的设计基本原则。当然在了解了ImageLoader的实现之后再去使用专业的开源库,例如:Glide,也会更加的得心应手,出现问题的时候自己也能够不太费力地去究其原因。因此,经过分析后,我决定把此框架加入到我的CodeLibs公共库中。
2 使用方法
(1)在 gradle 中引入:
compile 'com.guan.codelibs:imageloader:1.0.0'
(2)example
public class MainActivity extends AppCompatActivity { private SimpleImageLoader imageLoader; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list); GridView listview = (GridView) findViewById(R.id.listview); listview.setAdapter(new MyAdapter(this)); //配置 ImageLoaderConfig.Builder builder = new ImageLoaderConfig.Builder(); ImageLoaderConfig config = builder.setThreadCount(3) //线程数量 .setLoadPolicy(new ReversePolicy()) //加载策略 .setCachePolicy(new DoubleCache(this)) //缓存策略 .setLoadingImage(R.drawable.loading) .setFaildImage(R.drawable.not_found) .build(); //初始化 imageLoader = SimpleImageLoader.getInstance(config); } private class MyAdapter extends BaseAdapter { private LayoutInflater inflater; MyAdapter(Context context) { inflater = LayoutInflater.from(context); } @Override public int getCount() { return imageThumbUrls.length; } @Override public Object getItem(int position) { return imageThumbUrls[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View item = inflater.inflate(R.layout.item, null); ImageView imageView = (ImageView) item.findViewById(R.id.iv); //请求图片 imageLoader.displayImage(imageView, imageThumbUrls[position]); return item; } } public final static String[] imageThumbUrls = new String[]{ "http://img.my.csdn.net/uploads/201407/26/1406383299_1976.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383291_6518.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383291_8239.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383290_9329.jpg",//DB123421AC "http://img.my.csdn.net/uploads/201407/26/1406383290_1042.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383275_3977.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383265_8550.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383264_3954.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383264_4787.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383264_8243.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383248_3693.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383243_5120.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383242_3127.jpg","http://img.my.csdn.net/uploads/201407/26/1406383242_9576.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383242_1721.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383219_5806.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383214_7794.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383213_4418.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383213_3557.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383210_8779.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383172_4577.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383166_3407.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383166_2224.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383166_7301.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383165_7197.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383150_8410.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383131_3736.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383130_5094.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383130_7393.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383129_8813.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383100_3554.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383093_7894.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383092_2432.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383092_3071.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383091_3119.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383059_6589.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383059_8814.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383059_2237.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383058_4330.jpg", "http://img.my.csdn.net/uploads/201407/26/1406383038_3602.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382942_3079.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382942_8125.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382942_4881.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382941_4559.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382941_3845.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382924_8955.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382923_2141.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382923_8437.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382922_6166.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382922_4843.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382905_5804.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382904_3362.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382904_2312.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382904_4960.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382900_2418.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382881_4490.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382881_5935.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382880_3865.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382880_4662.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382879_2553.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382862_5375.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382862_1748.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382861_7618.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382861_8606.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382861_8949.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382841_9821.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382840_6603.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382840_2405.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382840_6354.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382839_5779.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382810_7578.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382810_2436.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382809_3883.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382809_6269.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382808_4179.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382790_8326.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382789_7174.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382789_5170.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382789_4118.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382788_9532.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382767_3184.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382767_4772.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382766_4924.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382766_5762.jpg", "http://img.my.csdn.net/uploads/201407/26/1406382765_7341.jpg"};}
(3)效果图
3 源码地址
github项目地址:CodeLibs/lib-imageloader/
4 分析
(2)基本架构图分析
图来源于:教你写Android ImageLoader框架之基本架构
(2)框架图分析
(3)UML图分析
(4)时序图分析
由于篇幅较大,请需要的小伙伴下载文件:imageloader框架时序图分析
5 使用到的知识点
- 内存缓存 LruCache技术
- 硬盘缓存技术DiskLruCache技术
- 图片下载时请求转发
- 生产者–消费者模式
- 建造者模式
- 单例模式
- 模板方法模式
- 策略模式—LoadMannger–UrlLoader\LocalLoader\NullLoader
6 学习链接
彻底解析Android缓存机制——LruCache
Android DiskLruCache完全解析,硬盘缓存的最佳方案
LinkedHashMap源码剖析
Android高效加载大图、多图解决方案,有效避免程序OOM
- Android源码分析之Glide源码分析&基础版ImageLoader框架
- Glide源码分析1 - 框架
- android开发-Glide源码分析
- android-----Volley框架使用ImageLoader加载图片源码分析
- 从源码角度分析imageLoader框架
- Volley框架中ImageLoader源码分析
- Android进阶——源码分析之图片加载框架Glide
- Universal ImageLoader源码分析
- universal imageloader源码分析
- ImageLoader源码分析
- glide源码分析
- Glide 源码分析
- Glide源码分析 一
- Glide源码分析
- Glide源码分析
- Android源码/框架源码分析
- Android之MediaPlayer的框架源码分析
- Android之Volley框架源码分析
- 文本挖掘分析技术
- v-model的语法糖
- k倍区间
- 通过转成Blob文件下载base64图片(兼容IE)
- Recycleview 多布局添加和cardview使用
- Android源码分析之Glide源码分析&基础版ImageLoader框架
- JAVA蓝桥杯 数列特征
- 1125 POJ#1208 The Blocks Problem
- Type setting_latex 表格
- 【解题报告】openjudge DNA排序 数据结构与算法mooc 内排序
- 重学JavaScript笔记
- [hdu1695][莫比乌斯反演]Gcd
- java实现易宝支付
- CentOS & Ubuntu 开关网口脚本