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 线程。
对于我的新 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 线程。