我正在使用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同步工作?