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 ()" для права на мое использование или что я могу сделать еще, что мое приложение делает это в правильный порядок?

4 15

4 ответа:

Вы можете использовать метод 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);

Вы никогда не должны блокировать поток пользовательского интерфейса с помощью сна. Это нормально спать на другой нити, но даже тогда этого следует избегать. Правильный способ сделать это-отправить Runnable обработчику. Затем поместите любой код, который вы хотите запустить после задержки в методе run() Runnable.

Вы можете определить Handle в своем действии и использовать Handle.postDelayed() из действия onCreate(), так что вы получите сообщение об этом дескрипторе за 3 секунды. После получения вы можете включить кнопку.

Вы можете сделать то же самое с помощью AsyncTask, где в doInBackground() Вы просто спите в течение 3 сек. затем в onPostExecute() вы включаете кнопку.

Использовать объект класса обработчика и использовать обработчик метода.postDelayed (поток, время).Не используйте sleep (), это заблокирует поток пользовательского интерфейса.