【问题标题】:IntentService Terminated before Picasso loads BitmapIntentService 在 Picasso 加载位图之前终止
【发布时间】:2016-05-25 20:21:22
【问题描述】:

我正在尝试使用 IntentService 来处理和上传在不同进程中运行的图像以获得更多内存。我也在使用毕加索来加载图像。当图像较小时,位图会成功加​​载并上传,但是如果图像很大,则 IntentService 在 Picasso 完成加载之前终止。

Picasso 必须在 UIThread 上运行

这里是代码。

private void downloadImage(File file) {
    final Uri uri = Uri.fromFile(file);
    Handler uiHandler = new Handler(Looper.getMainLooper());
    uiHandler.post(new Runnable() {
        @Override
        public void run() {
          Picasso.with(NewImageProcessingService.this).load(uri).transform(new ImageLoadingUtil.DecreaseQualityTransformation(imageQuality)).into(NewImageProcessingService.this);
        }
    });
}
@Override
protected void onHandleIntent(Intent intent) {
    File file = (File) intent.getSerializableExtra(KEY_IMAGE_FILE);
    imageQuality = ImagesUtils.IMAGE_QUALITY
            .values()[intent.getIntExtra(IMAGE_QUALITY, ImagesUtils.IMAGE_QUALITY.DEFAULT.ordinal())];
    downloadImage(file);
}

【问题讨论】:

    标签: android picasso intentservice


    【解决方案1】:

    这个问题很老了,但如果有人走过。 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));
    

    【讨论】:

      猜你喜欢
      • 2020-12-08
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-29
      • 2017-01-14
      • 1970-01-01
      相关资源
      最近更新 更多