Жизненный цикл JobQueue относительно метода обратного вызова

Я использую 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 должен быть вызван после того, как остальные три метода сделаны с их работой. Но 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 работать синхронно?

0 ответов

Другие вопросы по тегам