1

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 を同期的に動作させる方法はありますか?

4

0 に答える 0