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 ответа:
Вы можете использовать метод
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()
вы включаете кнопку.