Picasso的主要使用方法有3个:
- Picasso.with(context).load(xxx).into();
.into(imageview,new Callback(){})直接把图片加载进imageview,并监听加载进度,获取到bitmap自行处理,源码如下:
public void into(ImageView target, Callback callback) {
。。。。
if (shouldReadFromMemoryCache(memoryPolicy)) {//是否需要从缓存中获取
//从缓存中获取bitmap
Bitmap bitmap = picasso.quickMemoryCacheCheck(requestKey);//
if (bitmap != null) {//缓存成功
picasso.cancelRequest(target);
//调用PicassoDrawable的setBitmap方法
setBitmap(target, picasso.context, bitmap, MEMORY, noFade, picasso.indicatorsEnabled);
//加载完成回调
if (callback != null) {
callback.onSuccess();
}
return;
}
}
}
2.Picasso.with(context).load(xxx).fetch();
fetch()/fetch(callback),传入callback会回调onComplete和onError函数源码如下
@Override void complete(Bitmap result, Picasso.LoadedFrom from) {
if (callback != null) {
callback.onSuccess();
}
}
@Override void error() {
if (callback != null) {
callback.onError();
}
}
当fetch方法不传入callback对象时候,fetch方法只是把bitmap存到缓存,什么的不做,这样当再次调用into(imageview)时候就会直接从缓存中拿bitmap,起到预加载图片的作用!
源码如下:
public void fetch(@Nullable Callback callback) {
。。。省略部分代码。。
//创建请求对象
Request request = createRequest(started);
if (shouldReadFromMemoryCache(memoryPolicy)) {//读取内存
Bitmap bitmap = picasso.quickMemoryCacheCheck(key);
if (bitmap != null) {
//仍然是调用callback的onSuccess
if (callback != null) {
callback.onSuccess();
}
return;
}
}
Action action =
new FetchAction(picasso, request, memoryPolicy, networkPolicy, tag, key, callback);
//提交action
picasso.submit(action);
}
}
3.Picasso.with(context).load(xxx).get();
get()方法是picasso的一个同步方法可以通过该方法获得bitmap对象然后自行处理bitmap,且该方法不能再UI线程中使用
源码分析如下:
public Bitmap get() throws IOException {
checkNotMain();//确保是非UI线程
。。。省略部分代码。。。
Request finalData = createRequest(started);
String key = createKey(finalData, new StringBuilder());
//创建GetAction
Action action = new GetAction(picasso, finalData, memoryPolicy, networkPolicy, tag, key);
return forRequest(picasso, picasso.dispatcher, picasso.cache, picasso.stats, action).hunt();
}
各位看官觉得分析不对的欢迎指出,谢谢!
网友评论