有没有办法阻止当前线程并等待图片上传到S3?在Android上将图片上传到Amazon S3时阻止线程
我的上传到S3的代码已经在doInBackground()方法的Android服务中运行(其他网络调用必须按照特定的顺序),所以它不在主UI线程中。我只想知道上传何时完成,因此我可以关闭通知并向用户显示上传/完成的所有内容。
我使用SDK v2的,就像这样:
TransferUtility transferUtility = new TransferUtility(s3, ctx);
TransferObserver obs = transferUtility.upload(
S3BucketNamePhotoTEST,
imageId + ".jpg",
file, new ObjectMetadata());
obs.setTransferListener(new UploadListener(dbHandler, ctx, imageId));
凡UploadListener是一个类实现TransferListener,其中onStateChanged()方法中,我们可以发现,当上传完成后:
public void onStateChanged(int id, TransferState state) {
if (state == TransferState.COMPLETED) {
//do something here!
}
}
这不是我需要的,因为当onStateChange()回调触发时,我的服务调用将会很长时间。
但在SDK V1看(这是现在大多不建议使用),有阻止它的方式,与:
TransferManager tx = new TransferManager(
credentialProviderChain.getCredentials());
Upload myUpload = tx.upload(myBucket, myFile.getName(), myFile);
...
// Or you can block the current thread and wait for your transfer to
// to complete. If the transfer fails, this method will throw an
// AmazonClientException or AmazonServiceException detailing the reason.
myUpload.waitForCompletion();
这waitForCompletion()方法正是我所需要的,但不能得到它与更新的API。
任何解决方案?
对不起安德鲁,但是,这并不回答我的问题。我需要阻止来自我称之为transferUtility的上传功能的线程。这段代码并没有解决这个问题。 – Beemo
但上传的代码已经离开UI线程(在服务线程上),所以在阻止它的时候没有问题。我保持在该服务中同步的逻辑(不仅仅是照片,所有类型的其他应用程序),而且如果服务完成并且用户认为所有内容都已上传,但是上传照片在其他线程上等待回调,这很愚蠢亚马逊火。 – Beemo
我对你在OP中谈论的内容感到困惑。我已经更新了我的答案。 –