- 原文链接: Cache Indicators, Logging & Stats
- 原文作者: Future Studio
- 译文出自: 小鄧子的简书
- 译者: 小鄧子
- 状态: 完成
缓存指示器
如果阅读了之前的所有文章,那么你一定记得Picasso使用了两种缓存策略:磁盘缓存和内存缓存。最后才就是耗时的网络加载。
对于开发者而言,研究图片的来源是非常重要的。最简单的办法就是通过调用.setIndicatorsEnabled(true);
激活缓存指示器。示例如下:
Picasso
.with(context)
.setIndicatorsEnabled(true);
所有图像请求后,都会在左上角显示一个小型指示器。
每一种颜色都代表一种来源:
- 绿色(来自内存,效率最高)
- 蓝色(来自磁盘,效率良好)
- 红色(来自网络,效率最低)
日志
因为颜色指示器能够帮助定位缓存来源,因此可以在一定程度上解决图像加载缓慢的问题。如果问题依然不能得以解决,可以通过在Picasso请求上调用.setLoggingEnabled(true)
来打开日志输出(默认情况下关闭日志输出)。
Picasso
.with(context)
.setLoggingEnabled(true);
这会影响到所有的Picasso请求上,并把日志输出到Android logcat
上(直到调用.setLoggingEnabled(false)
)。一旦开始加载图像,便可以通过logcat
查看关于Picasso请求的详细信息。Picasso将打印所有相关数据。
比如,强制要求Picasso从网络加载图片:
Picasso
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[2])
.memoryPolicy(MemoryPolicy.NO_CACHE)
.networkPolicy(NetworkPolicy.NO_CACHE)
.into(imageViewFromNetwork);
它将在logcat
打印类似的输出:
D/Picasso﹕ Main created [R0] Request{http://i.imgur.com/rT5vXE1.jpg}
D/Picasso﹕ Dispatcher enqueued [R0]+21ms
D/Picasso﹕ Hunter executing [R0]+26ms
D/Picasso﹕ Hunter decoded [R0]+575ms
D/Picasso﹕ Dispatcher batched [R0]+576ms for completion
D/Picasso﹕ Main completed [R0]+807ms from NETWORK
D/Picasso﹕ Dispatcher delivered [R0]+809ms
状态快照
最后,但并非最不重要,你可能需要了解大局情况。通过StatsSnapshot
来了解累计和平均值,而不是分析单个请求。
为了访问这些数据,只需调用:
StatsSnapshot picassoStats = Picasso.with(context).getSnapshot();
返回的对象可以通过Android debugger
来分析,也可以打印在logcat
中。
Log.d("Picasso Stats", picassoStats.toString());
输出信息类似于如下示例:
D/Picasso Stats﹕ StatsSnapshot{
maxSize=28760941,
size=26567204,
cacheHits=30,
cacheMisses=58,
downloadCount=0,
totalDownloadSize=0,
averageDownloadSize=0,
totalOriginalBitmapSize=118399432,
totalTransformedBitmapSize=96928004,
averageOriginalBitmapSize=2466654,
averageTransformedBitmapSize=2019333,
originalBitmapCount=48,
transformedBitmapCount=41,
timeStamp=1432576918067}]