Есть ли способ заблокировать текущий поток и ждать, пока изображение будет загружено на S3?Заблокировать поток при загрузке изображения на Amazon S3 на Android
Мой код для загрузки на S3 уже запущен в службе Android в методе doInBackground() (с другими сетевыми вызовами, которые должны быть в определенном порядке), поэтому он отключен от основного потока пользовательского интерфейса. Я просто хочу знать, когда загрузка выполняется, поэтому я могу отклонить уведомление и показать пользователю, что все загружено/сделано.
Я использую 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.
Любые решения?
Извините Эндрю, но это не отвечает на мой вопрос. Мне нужно заблокировать поток, из которого я вызываю функцию upload transferUtility. Этот код не решает этого. – Beemo
Но код для загрузки уже отключен от потока пользовательского интерфейса (в потоке службы), поэтому нет никаких проблем с его блокировкой. Я сохраняю логику синхронизации в этой службе (а не только фотографии, все виды других приложений), и это глупо, если служба выполнена, и пользователь думает, что все загружено, но загрузка фотографий находится в другом потоке, ожидающем обратного вызова из амазонка стрелять. – Beemo
Я был в замешательстве с тем, о чем вы говорили в своем OP. Я обновил свой ответ. –