Я не знаю, является ли это подходящим заголовком для этого вопроса, но это происходит примерно так.Как приостановить основную тему u.i (Android)
Я запускаю цикл for на моей основной и.и.и нити длиной около 1000. Это довольно много, не следует ли мне это делать в AsyncTask или что-то еще, так как это занимает довольно долгое время и может заморозить приложение? Да, я знаю, но главное, что я делаю в основной теме.
здесь возникает проблема
я есть TextView на пользовательском интерфейсе, что я хочу, чтобы установить его значение, когда цикл достигает определенного числа. Но поскольку он конкурирует с циклом, который уже запущен, он не будет работать до тех пор, пока цикл цикла не будет завершен.
for (int i = 0; i < 3000; i++){
if(i = 400) {
textView.setText('blah ' + i);
}
}
мой вопрос, как я приостановить цикл, обновить TextView и продолжить цикл после этого в то время как в том же потоке. Я пробовал Thread.yield() без каких-либо результатов. Любые предложения будут высоко оценили
«Да, я знаю, но важно, что я делаю на главной теме»: можете ли вы объяснить, почему? Вы правильно определили проблему, делая большую работу над основным потоком, это не очень хорошая идея. – Henry
Я боюсь, что это невозможно, потому что поток выполняет код в линейном режиме, а Java не имеет 'goto'. Я вижу некоторые варианты, например, использование 'break' в' for', обновление пользовательского интерфейса и повторное выполнение 'for' или правильное использование других потоков для параллелизации цикла' for' с обновлением UI – nandsito
@Henry i don ' Не обращайте внимания на замораживание приложения, я действительно предпочитаю, чтобы каждый мог делать что угодно, пока цикл работает. Теперь я хочу, чтобы иметь возможность приостановить мой основной поток, а затем setTextview и продолжить цикл. –