Подтвердить что ты не робот

Как у вас пародия на пару секунд в андроиде?

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

Спасибо заранее!

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

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

4b9b3361

Ответ 1

Изучение мысли с точки зрения событий действительно является ключевым здесь. Ты можешь это сделать.:)

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

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

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

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

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, это еще проще. В представлениях есть свой собственный postDelayed метод, который выведет все на правильный Handler, и вам не нужно создавать свои собственные.

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

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

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