我正在尝试使用IntentService处理和上传在不同进程中运行的图像以获得更多内存。我也使用Picasso加载图像。当Image很小时,位图成功加载并上传,但是如果图像很大,则在Picasso加载It之前终止IntentService。
毕加索必须在UIThread上运行
这是代码。
npairs
答案 0 :(得分:0)
这个问题很老了,但是如果有人走过的话。 Target
在显示位图之前会收集垃圾。
像这样使用
public class BitmapLoader {
public static Target getViewTarget(final OnImageLoadingCompleted onCompleted) {
return new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
onCompleted.imageLoadingCompleted(bitmap);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
}
}
您需要对Target
有一个强烈的引用,所以在IntentService
中有一个字段,例如。
private Target viewTarget;
viewTarget = BitmapLoader.getViewTarget(bitmap -> {
// do stuff with the bitmap
});
new Handler(Looper.getMainLooper()).post(() -> Picasso.with(getApplicationContext()).load(object.getImageUrl()).into(viewTarget));