Замедление графического интерфейса в Android

1

My Android App работает отлично, за исключением последовательности конца. Его игра, и в конце экран показывает оценку:

TextView allscores = new TextView(this);

allscores.setText("Your score: "+ mypoints);

Далее я хочу, чтобы графический интерфейс замедлился на несколько секунд, чтобы у пользователя было время взять информацию. Может быть, 2 или 3 секунды в порядке.

try {
                Thread.sleep(3000);

            } catch (InterruptedException e) {

                e.printStackTrace();
            }

                            layout.removeAllViews();

Помните, я новичок в программировании потоков. Все это делается в потоке пользовательского интерфейса, у меня нет других потоков. Затем я заканчиваю окончательный экран заставки:

AnView animator = new AnView(this);

            layout.addView(animator);

где AnView является моим собственным расширением View.

В целом он отлично работает. Проблема в том, что поток спит в течение 3 секунд, не показывая мой окончательный результат. Я не знаю почему. Я не знаю, почему это не показывает мой окончательный результат перед сном. Это действительно пустое, что указывает на то, что он удалил все виды, а затем спал.

Теги:
multithreading
sleep

4 ответа

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

Вы не видите счет, потому что спать в потоке пользовательского интерфейса предотвращает макет и операции рисования, которые делают ваши изменения текста видимыми. Никогда не спать в потоке пользовательского интерфейса.

Использование нового потока для этого является излишним. Используйте обработчик и метод postDelayed, чтобы что-то произошло после задержки.

private final Handler mHandler = new Handler();

Затем, когда вы хотите что-то сделать позже,

mHandler.postDelayed(new Runnable() {
    public void run() {
        doDelayedThing();
    }
}, 3000);
3

Как указывали другие: не используйте sleep в потоке пользовательского интерфейса.

То, что вы должны сделать, описано здесь:

http://developer.android.com/guide/appendix/faq/commontasks.html#threading

в разделе "Обработка дорогостоящих операций в потоке пользовательского интерфейса"

1

Вы также можете использовать Таймер, чтобы подождать 3 секунды, после чего начнется новый поток.

Timer timer = new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
                AnView animator = new AnView(this);
                layout.addView(animator);
    }
}, 3000);
1

Не рекомендуется когда-либо спать основной поток пользовательского интерфейса. Попробуйте что-то вроде этого:

new Thread (новый Runnable() {     // работаем здесь });

Или вы можете попробовать использовать всплывающее окно Toast для оценки.

  • 0
    В самом деле? Мне посоветовали сделать большую часть работы в программировании GUI в потоке пользовательского интерфейса. Есть ли причина не спать?
  • 1
    Прочитайте пару строк ниже, когда говорится о «однопоточной модели» developer.android.com/resources/articles/… Я подозреваю, что вы спите в потоке пользовательского интерфейса, и он даже не может отображать представление.
Показать ещё 1 комментарий

Ещё вопросы

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