Как остановить поток (и цикл foor) - Java - PullRequest
0 голосов
/ 16 мая 2019

Я инициализирую поток, который обновляет строку прогресса, внутри потока у меня есть цикл for для обновления индикатора выполнения, эта часть работает нормально, но ...... в приложении у меня есть кнопка для отмены, этовозможно остановить поток (и цикл for),

с тем, что у меня сейчас есть в моих журналах, я вижу STOP THREAD, но индикатор выполнения продолжает обновлять содержимое;

 Thread myThread =  new Thread(new Runnable() {
    @Override
    public void run() { 
            Log.e(TAG, "HERE");
            for (int progress = 0; progress <= progressMax; progress+=4096) {

                notification.setProgress(progressMax, progress, false);
                notificationManager.notify(id, notification.build());
            }
            notification.setContentText(text)
                    .setProgress(0, 0, false);
            notificationManager.notify(id, notification.build()); 

         }
    });
    if (value == 2000) {
        myThread.start();

    } else {
        Log.e(TAG, "STOP THREAD");
        myThread.interrupt();
        notification.setContentText(text)
                        .setProgress(0, 0, false);
                notificationManager.notify(id, notification.build());
    }

}

1 Ответ

0 голосов
/ 16 мая 2019

Вы должны добавить флаг, чтобы отметить, если отменено. И сделайте проверку и выход из цикла for. Установите флаг в значение true при нажатии кнопки отмены.

for (int progress = 0; progress <= progressMax; progress+=4096) {
    if(quit_flag) {
        // do some clear work
        return;
    }
    notification.setProgress(progressMax, progress, false);
    notificationManager.notify(id, notification.build());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...