【发布时间】:2019-01-23 04:03:48
【问题描述】:
我正在使用 S3 TransferUtility 上传文件,我面临的问题是它在应用程序关闭时停止上传。我希望它继续在后台运行上传,为此我开始在 WorkManager 中上传,但它仍然完成上传。问题是什么?以及如何阻止工作管理器发送成功结果,直到 onStatusListener 要求它。当前它甚至在文件上传开始之前立即返回。
public class TestPhotoUploadManager extends BaseWorker {
private FileTransferUtil fileTransferUtil;
@NonNull
@Override
public Result doWork() {
try {
fileTransferUtil = new FileTransferUtil();
String filePath = getExtras().getInputData().getString(CommonTags.URL);
if (filePath != null) {
uploadWithTransferUtility(filePath);
}
return workerResult[0];
} catch (Exception e) {
e.printStackTrace();
setWorkerResult(Result.FAILURE);
return workerResult[0];
}
}
private void uploadWithTransferUtility(String filePath) {
TransferUtility transferUtility = fileTransferUtil.getTransferUtility(getApplicationContext());
String fileName = filePath.substring(filePath.lastIndexOf("/"));
AppLogger.d("usm_s3_file", "name= " + fileName + " ,path= " + filePath);
String folderName = AmazonHelper.BUCKET_NAME;
TransferObserver uploadObserver =
transferUtility.upload(AmazonHelper.BUCKET_NAME, folderName + fileName, new File(filePath));
uploadObserver.setTransferListener(new TransferListener() {
@Override
public void onError(int id, Exception e) {
setWorkerResult(Result.FAILURE);
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
}
@Override
public void onStateChanged(int id, TransferState newState) {
switch (newState) {
case WAITING_FOR_NETWORK:
case PENDING_NETWORK_DISCONNECT:
setWorkerResult(Result.RETRY);
break;
case COMPLETED:
setWorkerResult(Result.SUCCESS);
break;
case WAITING:
case IN_PROGRESS:
break;
default:
setWorkerResult(Result.FAILURE);
break;
}
}
});
}
【问题讨论】:
标签: android multithreading amazon-s3 android-workmanager