Android睡眠()而不会阻塞用户界面

对于我的新的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秒,设置进度和启用button。 我首先要设置进度,然后等待3秒,然后才能启用button。

是“睡()”的权利为我使用,或者我可以做别的,我的应用程序按照正确的顺序吗?

Solutions Collecting From Web of "Android睡眠()而不会阻塞用户界面"

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

你永远不要用睡觉来阻塞UI线程。 它可以睡在另一个线程,但即使如此,它应该避免。 正确的方法是将Runnable发布到Handler。 然后在Runnable的run()方法的延迟之后放置任何你想运行的代码。

您可以在Activity中定义一个Handle ,并使用Activity的onCreate() Handle.postDelayed() ,以便在3秒内收到该句柄的消息。 收到后,您可以启用该button。

您可以使用AsyncTaskdoInBackground()中的doInBackground()位置进行同样的AsyncTask ,持续3秒。 然后在onPostExecute()你启用button。

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