Android

How do you have the code pause for a couple of seconds in android?

Как сделать паузу кода на пару секунд в Android?

В принципе, мне нужна пауза (всего на несколько секунд) для выполнения одного действия, чтобы пользователь мог видеть, что происходит, прежде чем будет предпринято следующее действие. Итак, в блэкджеке, когда наступает очередь дилера и он решает ударить, он бьет, добавляется карта, а затем он решает, что делать дальше. Итак, прежде чем он решит, что делать дальше, я хочу, чтобы код приостановился, чтобы его можно было "увидеть" относительно того, что делает дилер. таким образом, дилер не завершает свои действия менее чем за секунду, а игрок видит только результаты.

Заранее спасибо!

Я должен отметить, что я пытался использовать wait (вставьте номер здесь); но eclipse сообщает мне, что это вызывает ошибку перехвата стека или что-то в этом роде и выдает исключение, таким образом, ничего не делая : (

Что ж, это интересно (то, как я все запрограммировал, мягко говоря, "интересно") Я выполнил Thread.sleep (5000) и бросил его в try catch, он переходит в режим ожидания на 5 секунд, а затем продолжает выполнять код. Однако мои обновления представлений не отображаются до тех пор, пока я не нажму кнопку (на самом деле я ненавижу программирование, управляемое событиями).

Переведено автоматически
Ответ 1

Научиться мыслить в терминах событий - это действительно ключ здесь. Вы можете это сделать. :)

Первое правило таково: никогда не останавливайте поток пользовательского интерфейса. Поток пользовательского интерфейса отвечает за то, чтобы ваше приложение оставалось отзывчивым. Любая работа, которую вы там выполняете, не должна блокироваться; делайте то, что вам нужно, и возвращайтесь как можно быстрее. Определенно избегайте выполнения операций ввода-вывода в потоке пользовательского интерфейса. (Есть некоторые места, где вы действительно не можете ничего поделать из-за требований жизненного цикла, например, сохранение состояния приложения в onPause.) Если вы когда-нибудь вызываете Thread.sleep поток пользовательского интерфейса, вы делаете это неправильно.

Android применяет это с помощью ошибки "Приложение не отвечает" (или "ANR"), которую видит пользователь. Всякий раз, когда вы видите это в приложении для Android, это означает, что разработчик сделал что-то, из-за чего поток пользовательского интерфейса зависал слишком долго. Если устройство действительно по какой-то причине зависло, эта ошибка на самом деле может быть не по вине разработчика приложения, но обычно это означает, что приложение делает что-то неправильно.

Вы можете использовать эту модель в своих интересах, публикуя свои собственные события. Это дает вам простой способ сообщить своему приложению: "Сделайте это позже". В Android ключ к публикации ваших собственных событий находится в Handler классе. Метод postDelayed позволяет вам запланировать Runnable выполнение, которое будет выполнено через определенное количество миллисекунд.

Если у вас есть действие, которое выглядит примерно так:

public class MyActivity extends Activity {
private Handler mHandler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mHandler.postDelayed(new Runnable() {
public void run() {
doStuff();
}
}, 5000);
}

private void doStuff() {
Toast.makeText(this, "Delayed Toast!", Toast.LENGTH_SHORT).show();
}
}

Затем через 5 секунд после создания действия вы увидите всплывающее окно, созданное в doStuff.

Если вы пишете пользовательский View, это еще проще. У Views есть свой собственный postDelayed метод, который приведет все к правильной публикации Handler, и вам не нужно создавать свой собственный.

Второе правило таково: представления должны только изменяться в потоке пользовательского интерфейса. Те исключения, которые вы получаете и игнорируете, означают, что что-то пошло не так, и если вы проигнорируете их, ваше приложение, вероятно, начнет вести себя неправильно интересным образом. Если ваше приложение выполняет большую часть своей работы в других потоках, вы можете post отправлять события непосредственно в представление, которое хотите изменить, чтобы изменения выполнялись правильно.

Если у вас есть ссылка на ваш Activity из этой части вашего кода, вы также можете использовать Activity#runOnUIThread, который делает именно то, что следует из названия. Возможно, вы предпочтете этот подход, если публикация в одном представлении на самом деле не имеет смысла в контексте.

Что касается обновлений представлений, которые не появляются, пока вы не нажмете кнопку, что это за представления? Это пользовательские представления, которые отображают эти обновления? Если да, то не забываете ли вы вызвать invalidate после изменения данных, чтобы запустить перерисовку? Представления перерисовываются сами по себе только после того, как они были признаны недействительными.

2023-10-09 04:05 java android time