Android sleep()没有阻止UI

时间:2015-03-22 18:37:40

标签: android sleep thread-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秒,然后才启用按钮。

是"睡觉()"对于我的使用权或我可以做什么,我的应用程序以正确的顺序执行它?

4 个答案:

答案 0 :(得分:30)

您可以使用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);

答案 1 :(得分:2)

你不应该在睡眠时阻止ui线程。可以在另一个线程上睡觉,但即使这样也应该避免。正确的方法是将Runnable发布给Handler。然后在Runnable的run()方法中放入你想要运行的任何代码。

答案 2 :(得分:1)

您可以在活动中定义Handle并使用活动Handle.postDelayed()中的onCreate(),这样您就可以在3秒内收到有关该句柄的消息。收到后,您可以启用该按钮。

您可以使用AsyncTask执行相同操作,doInBackground()您只需睡3秒钟。然后在onPostExecute()中启用按钮。

答案 3 :(得分:1)

使用Handler类的对象并使用方法handler.postDelayed(thread,time)。不要使用sleep()它会阻塞ui线程。