|
114 | 114 | <metaproperty="og:description"content="本文是 Glide 源码分析系列的第二篇,主要通过分析源码总结 Glide 的缓存机制。 |
115 | 115 | 从加载流程揭开缓存机制的面纱首先回忆一下上一篇关于 Glide 加载流程源码分析的内容,我们从 Glide.with().load().into() 这个最简单最基本的用法入手,一步步深入源码,梳理出了完整的图片加载流程。由于当时分析重点在于整体流程的把握上,所以对于缓存相关的部分都是简单带过而没有进行深入分"> |
116 | 116 | <metaproperty="og:image"content="http://o8swcawjo.bkt.clouddn.com/%E7%BC%93%E5%AD%98%E6%B5%81%E7%A8%8B.png"> |
117 | | -<metaproperty="og:updated_time"content="2017-05-08T03:48:22.000Z"> |
| 117 | +<metaproperty="og:updated_time"content="2017-05-08T03:54:18.000Z"> |
118 | 118 | <metaname="twitter:card"content="summary"> |
119 | 119 | <metaname="twitter:title"content="Glide源码解析(二):缓存机制"> |
120 | 120 | <metaname="twitter:description"content="本文是 Glide 源码分析系列的第二篇,主要通过分析源码总结 Glide 的缓存机制。 |
@@ -555,7 +555,7 @@ <h3 id="BitmapPool"><a href="#BitmapPool" class="headerlink" title="BitmapPool"> |
555 | 555 | <p>应用运行时图片内存往往占相当大的一部分,如果这部分内存能够尽量的复用,就能够显著地减少内存的频繁申请和释放了。基于这个考虑,Glide 针对 Bitmap 设计了复用方案,这就是 BitmapPool。</p> |
556 | 556 | <p>Glide 构建了一个 BitmapPool,图片的 Bitmap 的申请和释放都需要通过它来处理。需要加载新的图片时,先从 BitmapPool 中查找有没有相应大小或者稍大一点的 Bitmap,有则直接使用,没有再创建新的 Bimap。一个长列表中的图片往往是大小相同的,所以这个复用率还是相当可观的。</p> |
557 | 557 | <p>BitmapPool 的最大容量与屏幕分辨率有关,默认是 宽度 Pixels*高度 Piexls*ARGB_8888图片的质量参数*4,这样至少足够缓存四个屏幕大小的图片。容量到达阈值时,使用 LRU 算法从最近最少使用的图片尺寸中移除图片。</p> |
558 | | -<h5id="复用策略"><ahref="#复用策略"class="headerlink"title="复用策略"></a>复用策略</h5><p>BitmapPool 使用策略模式来封装不同的复用策略,策略接口是 LruPoolStrategy,定义了 put()、get()、getSize() 等方法。Glide 中有两种复用策略</p> |
| 558 | +<h4id="复用策略"><ahref="#复用策略"class="headerlink"title="复用策略"></a>复用策略</h4><p>BitmapPool 使用策略模式来封装不同的复用策略,策略接口是 LruPoolStrategy,定义了 put()、get()、getSize() 等方法。Glide 中有两种复用策略</p> |
559 | 559 | <ul> |
560 | 560 | <li>AttributeStrategy 复用的图片需要图片的尺寸和 Bitmap.Config 完全一致</li> |
561 | 561 | <li>SizeConfigStrategy 复用要求相对宽松,复用的图片需要 Bitmap.Config 一致,但复用图片的所需内存比原图小即可。确保 Bitmap.Config 一致后,如果有内存大小一致的图片则直接复用,没有则选取内存稍大一点的图片。需要 KITKAT 以上版本</li> |
@@ -774,7 +774,7 @@ <h4 id="LRU-算法实现"><a href="#LRU-算法实现" class="headerlink" title=" |
774 | 774 |
|
775 | 775 |
|
776 | 776 |
|
777 | | -<divclass="post-toc-content"><olclass="nav"><liclass="nav-item nav-level-3"><aclass="nav-link"href="#从加载流程揭开缓存机制的面纱"><spanclass="nav-number">1.</span><spanclass="nav-text">从加载流程揭开缓存机制的面纱</span></a><olclass="nav-child"><liclass="nav-item nav-level-4"><aclass="nav-link"href="#发起请求前"><spanclass="nav-number">1.1.</span><spanclass="nav-text">发起请求前</span></a></li></ol></li><liclass="nav-item nav-level-3"><aclass="nav-link"href="#内存缓存"><spanclass="nav-number">2.</span><spanclass="nav-text">内存缓存</span></a><olclass="nav-child"><liclass="nav-item nav-level-4"><aclass="nav-link"href="#引用计数"><spanclass="nav-number">2.1.</span><spanclass="nav-text">引用计数</span></a></li><liclass="nav-item nav-level-4"><aclass="nav-link"href="#LruResourceCache"><spanclass="nav-number">2.2.</span><spanclass="nav-text">LruResourceCache</span></a></li><liclass="nav-item nav-level-4"><aclass="nav-link"href="#ActiveResources"><spanclass="nav-number">2.3.</span><spanclass="nav-text">ActiveResources</span></a></li></ol></li><liclass="nav-item nav-level-3"><aclass="nav-link"href="#磁盘缓存"><spanclass="nav-number">3.</span><spanclass="nav-text">磁盘缓存</span></a><olclass="nav-child"><liclass="nav-item nav-level-4"><aclass="nav-link"href="#DiskLruCacheWrapper"><spanclass="nav-number">3.1.</span><spanclass="nav-text">DiskLruCacheWrapper</span></a><olclass="nav-child"><liclass="nav-item nav-level-5"><aclass="nav-link"href="#缓存写入"><spanclass="nav-number">3.1.1.</span><spanclass="nav-text">缓存写入</span></a></li><liclass="nav-item nav-level-5"><aclass="nav-link"href="#缓存读取"><spanclass="nav-number">3.1.2.</span><spanclass="nav-text">缓存读取</span></a></li></ol></li><liclass="nav-item nav-level-4"><aclass="nav-link"href="#DiskLruCache"><spanclass="nav-number">3.2.</span><spanclass="nav-text">DiskLruCache</span></a><olclass="nav-child"><liclass="nav-item nav-level-5"><aclass="nav-link"href="#缓存构建"><spanclass="nav-number">3.2.1.</span><spanclass="nav-text">缓存构建</span></a></li><liclass="nav-item nav-level-5"><aclass="nav-link"href="#缓存写入-1"><spanclass="nav-number">3.2.2.</span><spanclass="nav-text">缓存写入</span></a></li><liclass="nav-item nav-level-5"><aclass="nav-link"href="#缓存读取-1"><spanclass="nav-number">3.2.3.</span><spanclass="nav-text">缓存读取</span></a></li></ol></li></ol></li><liclass="nav-item nav-level-3"><aclass="nav-link"href="#BitmapPool"><spanclass="nav-number">4.</span><spanclass="nav-text">BitmapPool</span></a><olclass="nav-child"><liclass="nav-item nav-level-5"><aclass="nav-link"href="#复用策略"><spanclass="nav-number">4.0.1.</span><spanclass="nav-text">复用策略</span></a></li></ol></li><liclass="nav-item nav-level-4"><aclass="nav-link"href="#LRU-算法实现"><spanclass="nav-number">4.1.</span><spanclass="nav-text">LRU 算法实现</span></a></li></ol></li></ol></div> |
| 777 | +<divclass="post-toc-content"><olclass="nav"><liclass="nav-item nav-level-3"><aclass="nav-link"href="#从加载流程揭开缓存机制的面纱"><spanclass="nav-number">1.</span><spanclass="nav-text">从加载流程揭开缓存机制的面纱</span></a><olclass="nav-child"><liclass="nav-item nav-level-4"><aclass="nav-link"href="#发起请求前"><spanclass="nav-number">1.1.</span><spanclass="nav-text">发起请求前</span></a></li></ol></li><liclass="nav-item nav-level-3"><aclass="nav-link"href="#内存缓存"><spanclass="nav-number">2.</span><spanclass="nav-text">内存缓存</span></a><olclass="nav-child"><liclass="nav-item nav-level-4"><aclass="nav-link"href="#引用计数"><spanclass="nav-number">2.1.</span><spanclass="nav-text">引用计数</span></a></li><liclass="nav-item nav-level-4"><aclass="nav-link"href="#LruResourceCache"><spanclass="nav-number">2.2.</span><spanclass="nav-text">LruResourceCache</span></a></li><liclass="nav-item nav-level-4"><aclass="nav-link"href="#ActiveResources"><spanclass="nav-number">2.3.</span><spanclass="nav-text">ActiveResources</span></a></li></ol></li><liclass="nav-item nav-level-3"><aclass="nav-link"href="#磁盘缓存"><spanclass="nav-number">3.</span><spanclass="nav-text">磁盘缓存</span></a><olclass="nav-child"><liclass="nav-item nav-level-4"><aclass="nav-link"href="#DiskLruCacheWrapper"><spanclass="nav-number">3.1.</span><spanclass="nav-text">DiskLruCacheWrapper</span></a><olclass="nav-child"><liclass="nav-item nav-level-5"><aclass="nav-link"href="#缓存写入"><spanclass="nav-number">3.1.1.</span><spanclass="nav-text">缓存写入</span></a></li><liclass="nav-item nav-level-5"><aclass="nav-link"href="#缓存读取"><spanclass="nav-number">3.1.2.</span><spanclass="nav-text">缓存读取</span></a></li></ol></li><liclass="nav-item nav-level-4"><aclass="nav-link"href="#DiskLruCache"><spanclass="nav-number">3.2.</span><spanclass="nav-text">DiskLruCache</span></a><olclass="nav-child"><liclass="nav-item nav-level-5"><aclass="nav-link"href="#缓存构建"><spanclass="nav-number">3.2.1.</span><spanclass="nav-text">缓存构建</span></a></li><liclass="nav-item nav-level-5"><aclass="nav-link"href="#缓存写入-1"><spanclass="nav-number">3.2.2.</span><spanclass="nav-text">缓存写入</span></a></li><liclass="nav-item nav-level-5"><aclass="nav-link"href="#缓存读取-1"><spanclass="nav-number">3.2.3.</span><spanclass="nav-text">缓存读取</span></a></li></ol></li></ol></li><liclass="nav-item nav-level-3"><aclass="nav-link"href="#BitmapPool"><spanclass="nav-number">4.</span><spanclass="nav-text">BitmapPool</span></a><olclass="nav-child"><liclass="nav-item nav-level-4"><aclass="nav-link"href="#复用策略"><spanclass="nav-number">4.1.</span><spanclass="nav-text">复用策略</span></a></li><liclass="nav-item nav-level-4"><aclass="nav-link"href="#LRU-算法实现"><spanclass="nav-number">4.2.</span><spanclass="nav-text">LRU 算法实现</span></a></li></ol></li></ol></div> |
778 | 778 |
|
779 | 779 |
|
780 | 780 | </div> |
|