Как мгновенно поменять состояние Button, TextView и т.д.?
У меня не сложная программа но проблема заключается в этой части
Effects.highlightCorrectAnsware(key1,key2,key3,key4,correctKey,
upLeft,upRight,bottomLeft,bottomRight);
try {
Thread.sleep(2000);
} catch(Exception ex) {
ex.getMessage()
};
Функция highlight просто меняет цвета кнопок. Но почему наоборот, цвет меняется после 2 секундной паузы?
Я пробовал реализовывать с помощью другого потока, но это тоже не помогло. Помогите пожалуйста.
Ответы (1 шт):
Команды, отрисовывающие интерфейс, при вызове не исполняются мгновенно, но попадают в очередь команд.
При этом они все работают в главном, UI потоке.
В итоге, когда вы усыпляете поток, то очередь команд, в которую вы добавили свою команду, зависает (вместе со всем интерфейсом) и начинает исполняться только по завершении сна потока.
Так делать нельзя, т.к. программа становится нерабочей. И даже, если UI поток зависнет более чем на 5 секунд, система выведет вам сообщение об этом и предложит закрыть программу.
Если вам надо изменить что-то в UI через n времени вам надо ждать в другом потоке, после чего вернуться в UI поток и вызвать команду изменения интерфейса. Это можно сделать через TimerTask, например или используя RxJava, что сложнее, но требует меньше кода.