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必须在其他三个方法完成工作后调用。但是 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