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 секунд, не показывая мой окончательный результат. Я не знаю почему. Я не знаю, почему это не показывает мой окончательный результат перед сном. Это действительно пустое, что указывает на то, что он удалил все виды, а затем спал.
Вы не видите счет, потому что спать в потоке пользовательского интерфейса предотвращает макет и операции рисования, которые делают ваши изменения текста видимыми. Никогда не спать в потоке пользовательского интерфейса.
Использование нового потока для этого является излишним. Используйте обработчик и метод postDelayed, чтобы что-то произошло после задержки.
private final Handler mHandler = new Handler();
Затем, когда вы хотите что-то сделать позже,
mHandler.postDelayed(new Runnable() {
public void run() {
doDelayedThing();
}
}, 3000);
Как указывали другие: не используйте sleep
в потоке пользовательского интерфейса.
То, что вы должны сделать, описано здесь:
http://developer.android.com/guide/appendix/faq/commontasks.html#threading
в разделе "Обработка дорогостоящих операций в потоке пользовательского интерфейса"
Вы также можете использовать Таймер, чтобы подождать 3 секунды, после чего начнется новый поток.
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
AnView animator = new AnView(this);
layout.addView(animator);
}
}, 3000);
Не рекомендуется когда-либо спать основной поток пользовательского интерфейса. Попробуйте что-то вроде этого:
new Thread (новый Runnable() { // работаем здесь });
Или вы можете попробовать использовать всплывающее окно Toast для оценки.