一張圖片加載可以分為以下幾步:
創建->入隊->執行->解碼->變換->批處理->完成->分發->顯示(可選)
涉及到的設計模式
1.單例
2.Builder
3.責任鏈模式
static BitmapHunter forRequest(Picasso picasso, Dispatcher dispatcher, Cache cache, Stats stats,
Action action) {
Request request = action.getRequest();
List<RequestHandler> requestHandlers = picasso.getRequestHandlers();
//從requestHandlers中檢測哪個RequestHandler可以處理這個request,如果找到就創建
//BitmapHunter并返回.
for (int i = 0, count = requestHandlers.size(); i < count; i++) {
RequestHandler requestHandler = requestHandlers.get(i);
if (requestHandler.canHandleRequest(request)) {
return new BitmapHunter(picasso, dispatcher, cache, stats, action, requestHandler);
}
}
return new BitmapHunter(picasso, dispatcher, cache, stats, action, ERRORING_HANDLER);
}
- private Downloader downloader;
此對象是用來下載網絡上的圖片
- private Cache cache;
cache對象把圖片資源緩存在內存當中,內存容量是有大小限制的,但超過限制的時候,會消除最老的圖片資源
LinkedHashMap<String, Bitmap>中保存Bitmap的一個對象引用。 - private ExecutorService service;
線程池,用來下載圖片和解析圖片的。 - private RequestTransformer transformer;
對圖片資源進行變換操作。 - Stats stats
狀態通知中心,通知狀態的完成情況。 - Dispatcher dispatcher
操作管理中心,可以用來管理操作的執行,可以取消操作。
把他們集合起來,就是
return new Picasso(context, dispatcher, cache, listener, transformer, stats,
indicatorsEnabled, loggingEnabled);