Android sleep() без блокировки пользовательского интерфейса
Для моего нового приложения для Android мне нужна функция, которая затягивает мое приложение на 3 секунды. Я попробовал функцию "sleep()" следующим образом:
seekBar1.setProgress(50); // Set something for my SeekBar
try{
Thread.sleep(3000); // Wait for 3 Seconds
} catch (Exception e){
System.out.println("Error: "+e); // Catch the exception
}
button.setEnabled(true); // Enable my button
Кажется, что это работает, но если я запускаю приложение, он делает это так: Подождите 3 секунды, установите прогресс и кнопку включения. Сначала я хочу установить прогресс, а затем ждать 3 секунды и только затем включить кнопку.
Является ли "sleep()" правильным для моего использования или что я могу сделать иначе, что мое приложение делает это в правильном порядке?
Ответы
Ответ 1
Вы можете использовать метод postDelayed()
следующим образом:
handler=new Handler();
Runnable r=new Runnable() {
public void run() {
//what ever you do here will be done after 3 seconds delay.
}
};
handler.postDelayed(r, 3000);
Ответ 2
Вы не должны блокировать нить ui сон. Его нормально спать на другом потоке, но даже тогда его следует избегать. Правильный способ сделать это - отправить Runnable в обработчик. Затем поместите любой код, который вы хотите запустить после задержки в методе run() Runnable.
Ответ 3
Вы можете определить Handle
в своей деятельности и использовать Handle.postDelayed()
из Activity onCreate()
, чтобы вы получили сообщение от этого дескриптора за 3 секунды. После получения вы можете включить кнопку.
Вы можете сделать то же самое, используя AsyncTask
, где в doInBackground()
вы просто спите в течение 3 секунд. Затем в onPostExecute()
вы включаете кнопку.
Ответ 4
Использовать объект класса Handler и использовать метод handler.postDelayed(поток, время). Не используйте sleep(), он блокирует поток ui.