【问题标题】:Stop firebase file uploading task in android?在android中停止firebase文件上传任务?
【发布时间】:2020-07-14 08:52:18
【问题描述】:

在这里,我尝试使用 Asynctask 从 recyclerview 上传文件。 doInBackground(MyTaskParams...params) 方法中设置的上传工作。 我做了什么

@Override
        protected Boolean doInBackground(MyTaskParams... params)
        {
            Thread.currentThread().setName(params[0].message_push_id);// here i set the background therad name

            filepath.putFile(sendingImageURI).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {

                    }
                }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onProgress(
                                UploadTask.TaskSnapshot taskSnapshot)
                        {
                            double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());

                            Intent intent=new Intent("data_changed");
                        intent.putExtra("UploadProgress",(int)progress);
                        intent.putExtra("UploadPosition",newPosition);
                        intent.putExtra("UploadPushId",message_push_id);
                        Log.i("atsender",String.valueOf((int)progress)+":"+String.valueOf(newPosition)+":"+message_push_id);
                        LocalBroadcastManager.getInstance(MessageActivity.this).sendBroadcast(intent);
                        }
                    });

我通过LocalBroadcastManager 在适配器类中收到了这个进展,我试图从 holderview 中停止这个过程,如下面的代码。

button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Thread thread=getThreadByName(pushId);
                    if (pushId==null)
                    {
                        Log.i("thread_status", "there no active thread named of "pushId");
                    }
                    else
                    {
                         thread.interrupt();
                    }
                }
            });

通过使用thread.interrupt();上传进度不会停止它仍然返回上传进度。 SO如何停止上传在recyclerview或listview中运行的任务

【问题讨论】:

    标签: android firebase android-asynctask firebase-storage


    【解决方案1】:

    Firebase 存储 SDK 已在单独的线程上执行所有网络和磁盘 I/O,因此您无需自己将其包装在 AsyncTask 中。

    您可以通过在上传任务上调用 cancel() 来取消 Firebase 的上传。请参阅 monitoring uploads 上的 Firebase 文档。基于此:

    UploadTask task = filepath.putFile(sendingImageURI);
    task.addOnCompleteListener(...
    );
    
    task.cancel();
    

    【讨论】:

    • 我使用 asynctask 因为多线程。好的,..所以我如何在从活动运行时找到这个 UploadTask 。没有定义全局变量
    • 这是下载器的示例,概念相同,但在我的情况下,这个上传器(不是下载器)....camo.githubusercontent.com/…
    • 在这张图片中暂停/恢复按钮,我有取消按钮来中断上传任务
    • 我确切地展示了如何做到这一点以及为什么你不需要自己的AsyncTask。我不知道如何进一步提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多