2016-05-25 6 views
1

私はIntentServiceを使用して、別のプロセスで実行されている画像を処理しアップロードしてメモリを増やそうとしています。私はPicassoを使って画像を読み込んでいます。 Imageが小さい場合、ビットマップは正常に読み込まれ、アップロードされますが、イメージが大きい場合、Picasaが読み込まれる前にIntentServiceが終了します。IntentService 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); 
} 

答えて

0

この質問はかなり古いですが、誰かが踏み込んだ場合です。 Targetは、ビットマップを表示する前にガベージコレクションされています。

は、あなたがそう、例えば、それを保持するあなたのIntentServiceのフィールドを持っている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) { 

     } 
    }; 
} 
} 

のようにそれを使用します

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)); 
関連する問題