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.