com.birbit:android-priority-jobqueue:1.3.5
サーバーにデータを送信するために使用しています。方法は次のとおりです。
@Override
public void onRun() throws Throwable {
MyStuff myStuff = getMyStuffFromContentProvider(mDbId);
SendAfterPhotosCallback callback = new SendAfterPhotosCallback() {…}
callback.xDone=false;
callback.yDone=false;
callback.zDone=false;
sendPhotosXToAmazonS3UsingTransferUtility(myStuff,callback);
sendPhotosYToAmazonS3UsingTransferUtility(myStuff,callback);
sendPhotosZToAmazonS3UsingTransferUtility(myStuff,callback);
//callback.sendJson(myStuff);
}
大したことは何ですか?sendJson
他の 3 つのメソッドの処理が完了した後に呼び出す必要があります。ただし、TransferUtility はデータを S3 に非同期で送信します。したがって、これらのそれぞれ-ToAmazonS3UsingTransferUtility
が成功したことを追跡するために、AtomicInteger を使用してそれぞれの完了をカウントしていますTransferObserver
。
public static abstract class SendAfterPhotosCallback{
static boolean xDone = false;
static boolean yDone = false;
static boolean zDone = false;
abstract public void sendJson(MyStuff myStuff) throws Throwable;
}
それぞれ-ToAmazonS3UsingTransferUtility
が完全に完了すると、それぞれのフラグを true (つまりcallback.xDone=true
) に設定し、 を呼び出しますcallback.sendJson(myStuff)
。内部sendJson
では、すべてのフラグが設定されているかどうかを確認し、json をサーバーに送信します。
とにかく、それぞれ-ToAmazonS3UsingTransferUtility
が非同期で呼び出すので、例外がスローされcallback.sendJson(myStuff)
たらどうなるでしょうか? ジョブ キューはそれを認識しますかcallback.sendJson(myStuff)
?onRun()
onRun
が例外をスローすると、JobQueue は後で再試行することを認識しているため、これは重要です。
私の知る限りonRun
、非同期呼び出しが行われると実行が完了します。では、この問題を修正してコードがうまく機能するようにするにはどうすればよいでしょうか? おそらく TransferUtility を同期的に動作させる方法はありますか?