Nano Hash - криптовалюты, майнинг, программирование

Остановить задачу загрузки файла firebase в Android?

Здесь я попытался загрузить файл из recyclerview с помощью Asynctask. Работа по загрузке устанавливается в методе 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, и я попытался остановить этот процесс из просмотра держателя, как показано ниже.

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


Ответы:


1

Firebase Storage SDK уже выполняет весь сетевой и дисковый ввод-вывод в отдельном потоке, поэтому вам не нужно оборачивать это в AsyncTask самостоятельно.

Вы можете отменить загрузку Firebase, вызвав cancel() в задаче загрузки. См. документацию Firebase по отслеживанию загрузок. Исходя из этого:

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

task.cancel();
02.04.2020
  • Я использую asynctask из-за многопоточности. Хорошо, .. так как я могу найти эту UploadTask, когда она выполняется из активности. Глобальная переменная не определена 02.04.2020
  • This is sample of downloader, concept is same but in my case this uploader(not a downloader)....camo.githubusercontent.com/ 02.04.2020
  • На этом изображении кнопка паузы/возобновления, и у меня есть кнопка отмены, чтобы прервать задачу загрузки 02.04.2020
  • Я показал, как именно это сделать и почему вам не нужен собственный AsyncTask. Я не уверен, как помочь дальше. 02.04.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..