1

Как реализовать pause() и resume() таким образом, что pause() останавливает выполнение кода (предотвращает proceedFurther() от исполнения) до тех пор, пока resume() называется, нажав button?Как приостановить выполнение до завершения прослушивания?

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     resume(); 
    } 
}); 
pause(); 
proceedFurther(); 

Как я понимаю OnClickListener создает separeate нить и основной поток должен быть остановлен каким-то образом с параллелизмом-вещами я не в курсе.

+0

См http://stackoverflow.com/questions/20900885/what-is-the-best-way-to-stop-execution-for-few-seconds-in-java и HTTP: // StackOverflow .com/questions/2622804/how-to-indefinitely-pause-a-thread-in-java-and-later-resume-it –

ответ

1

Ваше предположение неверно - код внутри прослушивателя щелчка выполняется в потоке пользовательского интерфейса.

Итак, чтобы определить задачу лучше - вы не должны убеждаться, что continueFurther() вызывается только после выполнения функции resume().

Они два пути для достижения этой цели:

  • Если вам не нужна обработка фона - резюме не прикасаются к базе данных или сети, или другой потенциально памяти - тяжелая и отнимает много времени вещи, вы можете просто последовательный метод вызывает в функции обратного вызова:

    public void onClick(View v) { 
        resume(); 
        proceedFurther(); 
    } 
    
  • Если вам необходимо выполнить резюме() в фоновом потоке, вы действительно можете использовать AsyncTask. Вам просто нужно вызвать resume() в doInBackground() и продолжитьFurther() в onPostExecute().

+0

Мне просто нужно продолжить работу после нажатия кнопки. Возможно, использование OnClickListener - неправильный выбор, и есть метод, подобный 'waitForAction()', который останавливает выполнение кода и ждет клика? – aikrikunov95

+0

К сожалению, вы не можете остановить выполнение кода и дождаться щелчка. Это означает, что вы заблокируете основной поток, что фактически сделает ваше приложение неприемлемым. ОС не будет допускаться. Почему бы вам просто не вызвать метод продолжения изнутри onClick()? –

+0

, потому что 'ProceedFurther()' идет после переключения, и только в последнем случае требуется ожидание щелчка, тогда как все предыдущие не делают этого, поэтому установка 'ProceedFurther()' в 'onClick()' Listener' будет создавать дублирование кода, что плохой дизайн. – aikrikunov95

0

Является результатом функции onClick(), вызванной в основном потоке пользовательского интерфейса.

Если вы хотите сделать что-то в фоновом режиме, используйте AnsycTask.

+0

Просто посмотрите на это http://developer.android.com/reference/android/os /AsyncTask.html – eddykordo

Смежные вопросы