取消UploadTask到firebase存储

时间:2017-05-21 15:21:59

标签: android firebase firebase-storage

我想更好地理解firebase.storage.StorageTask.cancel()的行为,如文档here所述。

我正在创建一个UploadTask,目的是将图片上传到Firebase存储。

// Create an UploadTask
final UploadTask mUploadTask = storageRef.putFile(_photoUri);
    // Add Listeners to mUploadTask.
    mUploadTask_ChangeProfilePhoto
                    .addOnPausedListener(new OnPausedListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onPaused(UploadTask.TaskSnapshot taskSnapshot) {
                            Log.d(TAG, "mUploadTask: onPaused: ");
                        }
                    })
                    .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                            Log.d(TAG, "mUploadTask: : onProgress: ");
                        }
                    })
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            Log.d(TAG, "mUploadTask: onSuccess");
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Log.e(TAG, "mUploadTask: On Failure", e);
                        }
                    });

UploadTask开始工作后的随机数毫秒,我尝试取消UploadTask:

// Attempt to cancel the UploadTask some seconds after it's started.
boolean canBeCancelled = mUploadTask.cancel();
Log.d(TAG, "mUploadTask CAN BE CANCELLED: " + canBeCancelled);

如上所述herecanBeCancelled应为:

  

如果此任务已成功取消或正在取消,则为true。如果任务已完成或处于无法取消的状态,则返回false。

我尝试取消mUploadTask时的预期:

如果canBeCancelledtrue,则立即取消UploadTask或至少最终取消。

当我尝试取消mUploadTask时我得到了什么:

  • 案例1: 如果canBeCancelledtrue,则在1-3秒后取消UploadTask,而不是立即取消。这是logcat中提供的时间。

Logcat when mUploadTask gets cancelled

  • 案例2: 虽然canBeCancelled为true,但UploadTask在1-3秒后成功完成,并且永远不会被取消。

Logcat when UploadTask completes successfully

上述情况产生了三个问题:

  1. mUploadTask.cancel()返回true并且UploadTask最终被取消时(如案例1中所示),在发出取消命令和取消UploadTask之间有1-3秒的延迟是正常的?
  2. mUploadTask.cancel()返回true时,这是否表示UploadTask最终会被取消,或者上传任务是否仍然可以完成或失败(如案例2中所示)?
  3. 是否有更好的方法取消UploadTask?
  4. 提前填写任何输入!

0 个答案:

没有答案