以下代码笔记基于 commitId:aef01ed7565a88392e4bb32d8deb986aab6d0177,commit 时间:2013/2/21, 12:53 AM。点击上面的 commitId 可以跳转到 github 看代码,配合本文阅读。
本系列的文章结构包括以下 5 个部分。重构 是同样功能的代码的变动。feature 是对比上次提交,这次提交的新功能。设计 是我觉得可以提一下的代码设计,这部分可能不同的程序员会做不同的设计。疑惑 是我看代码过程中觉得有问题或者不懂的地方。知识点 是关于 Java 或者安卓的一些通用知识。
由于 Picasso.java checkNotMain
方法在几个地方都有用到,所以把它抽取成工具类里的静态方法。
final class Utils { static void checkNotMain() { if (Looper.getMainLooper().getThread() == Thread.currentThread()) { throw new IllegalStateException("Method call should not happen from the main thread."); } } private Utils() { // No instances. } } 复制代码
for (Iterator<Entry> i = lruEntries.values().iterator(); i.hasNext(); ) 改成了 Iterator<Entry> i = lruEntries.values().iterator(); while (i.hasNext()) 复制代码
Map.Entry<String, Entry> toEvict = lruEntries.entrySet().iterator().next(); remove(toEvict.getKey()); 改成了 remove(lruEntries.entrySet().iterator().next().getKey()); 复制代码
import static com.squareup.picasso.external.DiskLruCache.open; diskLruCache = open(directory, 1, 1, maxSize); 改成了 diskLruCache = DiskLruCache.open(directory, 1, 1, maxSize); 复制代码
private static final Handler handler
里面 handler
改成了 HANDLER
。this.retryCount = 2;
改成了 this.retryCount = DEFAULT_RETRY_COUNT;
。声明了一个静态常量 DEFAULT_RETRY_COUNT = 2
。把 Request.java 里面的很多 getter 和 setter 方法都取消了,改成直接访问 Request.java 的成员变量。例如
existing.getFuture().cancel(true); // 笔者注:existing 是一个 request 改成了 existing.future.cancel(true); 复制代码
注意 Request.java 里面的这些成员变量是 protected 的,所以属于包内可见。
这个和 commit 日记(2) 写的配置 placeHolder 差不多。
在 Builder 里用 placeholderResId 设置 placeholder 的方法里,先检测了如果 placeholderResId != 0
,则报错。这里应该检测 placeholderResId <= 0
吧?正确的 placeholderResId 应该是大于 0 的。
public Builder placeholder(int placeholderResId) { if (placeholderResId != 0) { throw new IllegalArgumentException("Placeholder image resource invalid."); } } 复制代码
注意本文一开头的工具类的一些细节: final class 、private contructor 。