разрыв цикла из обработчика

1

Мне нужно разбить мой цикл из обработчика в этом цикле, но есть проблема:

break cannot be used outside of a loop or a switch

Это мой код:

        Handler mHandler = new Handler();
        for (int i = 0; i < 10; i++) {
            mHandler.post(new Runnable() {

                @Override
                public void run() {
                    if (Break)
                        break;
                }
            });
        }

Я также не могу использовать разрыв метки, как эта ссылка: Разница между выражениями Return и Break

  • 0
    Если ваш обработчик предназначен только для цикла, почему вы просто удаляете обратные вызовы для вашего обработчика?
  • 1
    Что ты на самом деле пытаешься сделать? Runnable не имеет никакого смысла с перерывом.
Показать ещё 1 комментарий
Теги:
handler
loops

4 ответа

1
Лучший ответ

Вы добавляете 10 Runnables для запуска потоком, с которым связан обработчик, а затем пытаетесь остановить добавление после факта внутри Runnable.

Если вы хотите остановить оставшиеся runnables, запущенные в какой-то момент, тогда, если в вашем коде Runnable будет таким же, вы можете добавить один и тот же runnable 10 раз и удалить остальные, используя removeCallback.

Если Runnables отличаются друг от друга, вы можете проверить свой флаг в начале каждого метода run() и return раньше, поэтому runnables запускаются, но не делают много, или вы можете заставить каждый Runnable добавить следующий для запуска если флаг не установлен.

2

break может только позволить вам остановить цикл (для/время) или переключатель.

Если вы хотите остановить метод от дальнейшего продолжения, вы должны вызвать return.

  • 0
    я хочу разорвать на петлю, но возвращаться не разорвать мою петлю
1

Я думаю, вы можете использовать логическое значение для достижения своей задачи.

                 boolean isBreak = false;
                 Handler mHandler = new Handler();
                 for (int i = 0; i < 10; i++) {
                        if(!isbreak)
                        {

                           mHandler.post(new Runnable() {

                            @Override
                            public void run() {
                           if (Break)
                          isBreak = true;
                        }
                      });

                       }
                      }
  • 0
    Проблема в том, что необходимо, чтобы Break был последним, тогда вы не можете изменить его в своем обработчике.
  • 1
    Да, так и должно быть, если мы используем его внутри внутреннего класса анонимного локального метода.
1

Ни за что. run() выполняется асинхронно и может начинаться после того, как цикл выполнит все 10 итераций.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню