JobQueue的生命周期与回调方法

时间:2016-02-08 21:52:49

标签: java android multithreading amazon-s3 android-priority-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 个答案:

没有答案