Android 没有阻塞的 sleep() UI

Android sleep() without blocking UI

对于我的新 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()" 是否适合我使用,或者我还能做些什么才能使我的应用程序以正确的顺序执行?

您不应该通过休眠来阻塞 ui 线程。在另一个线程上休眠是可以的,但即使那样也应该避免。正确的做法是 post 一个 Runnable 到一个 Handler。然后在 Runnable 的 运行() 方法中的延迟后 运行 放置任何你想要的代码。

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

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

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

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