- 原文鏈接: Cache Indicators, Logging & Stats
- 原文作者: Future Studio
- 譯文出自: 小鄧子的簡(jiǎn)書
- 譯者: 小鄧子
- 狀態(tài): 完成
緩存指示器
如果閱讀了之前的所有文章,那么你一定記得Picasso使用了兩種緩存策略:磁盤緩存和內(nèi)存緩存。最后才就是耗時(shí)的網(wǎng)絡(luò)加載。
對(duì)于開(kāi)發(fā)者而言,研究圖片的來(lái)源是非常重要的。最簡(jiǎn)單的辦法就是通過(guò)調(diào)用.setIndicatorsEnabled(true);激活緩存指示器。示例如下:
Picasso
.with(context)
.setIndicatorsEnabled(true);
所有圖像請(qǐng)求后,都會(huì)在左上角顯示一個(gè)小型指示器。

每一種顏色都代表一種來(lái)源:
- 綠色(來(lái)自內(nèi)存,效率最高)
- 藍(lán)色(來(lái)自磁盤,效率良好)
- 紅色(來(lái)自網(wǎng)絡(luò),效率最低)
日志
因?yàn)轭伾甘酒髂軌驇椭ㄎ痪彺鎭?lái)源,因此可以在一定程度上解決圖像加載緩慢的問(wèn)題。如果問(wèn)題依然不能得以解決,可以通過(guò)在Picasso請(qǐng)求上調(diào)用.setLoggingEnabled(true)來(lái)打開(kāi)日志輸出(默認(rèn)情況下關(guān)閉日志輸出)。
Picasso
.with(context)
.setLoggingEnabled(true);
這會(huì)影響到所有的Picasso請(qǐng)求上,并把日志輸出到Android logcat上(直到調(diào)用.setLoggingEnabled(false))。一旦開(kāi)始加載圖像,便可以通過(guò)logcat查看關(guān)于Picasso請(qǐng)求的詳細(xì)信息。Picasso將打印所有相關(guān)數(shù)據(jù)。
比如,強(qiáng)制要求Picasso從網(wǎng)絡(luò)加載圖片:
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
狀態(tài)快照
最后,但并非最不重要,你可能需要了解大局情況。通過(guò)StatsSnapshot來(lái)了解累計(jì)和平均值,而不是分析單個(gè)請(qǐng)求。
為了訪問(wèn)這些數(shù)據(jù),只需調(diào)用:
StatsSnapshot picassoStats = Picasso.with(context).getSnapshot();
返回的對(duì)象可以通過(guò)Android debugger來(lái)分析,也可以打印在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}]