如何让应用程序主线程进入睡眠状态?

我有一个当前的问题:我有一个应用程序,并希望让主线程hibernate1500毫秒显示我可以显示ProgressDialog,我不知道该怎么做。 可以停止应用程序主线程吗? 我可以使用另一个线程实现相同的目标吗?

停止主线程通常是一个坏主意,因为它也会停止所有UI交互处理。

尝试进行模式的进度对话框。 这将阻止用户在对话框消失之前在UI上执行任何操作。 我认为这将实现您想要做的并且与Android的工作方式兼容

不要停止主UI线程! 它会冻结UI。 我可以想象你在一些后台操作中显示进度对话框。 完成此操作后,只需发布​​一些内容即可通过处理程序更新UI。

进度点对话框是在执行某些操作时与用户进行交互。 否则你甚至不需要后台操作和进度对话框。 您只需在主UI线程中操作并等待UI解冻。

你所要求的应该是不必要的,正如卡斯滕所说,这是一个坏主意。 这是一个基本规则,您既不会中断UI线程,也只会更新该线程上的UI元素。 虽然显示了一个Dialog及其任何子类,但后台中没有任何内容会收到任何输入,所以虽然它正在运行……虽然主线程正在运行,但除了Dialog中发生的事情之外,什么都不应该发生。

您可能要做的是使用类似AsyncTask()的东西来显示您的ProgressDialog,做一些工作,然后在完成该工作时将其解雇。

这不是一个好主意,但如果你必须使用它

try { Thread.sleep(1500); } catch (InterruptedException e) { //handle } 

要做这样的事情,你会想要使用“Runnables”和“Handler”。 正如其他人提到的,您不希望停止主UI线程。 由于只有一个,如果您让它睡眠或等待,您将不会显示任何更新。 请参阅下面的另一个线程上运行代码的小示例。

要解决的主要问题是睡眠主线程意味着停止任何和所有视觉更新。

 // Class Variables private Handler mHandler; @Override public void onCreate(){ // Create a Handler Object // In Layman's terms, Handlers can run processes off the main // User interface thread. mHandler = new Handler(); // Post a "Runnable" after a delay in milliseconds // On a separate thread, the progressDialog_Runnable // will call the function "createProgressDialog" mHandler.postDelayed(progressDialog_Runnable, 250); } // Runnables (Process to run on separate thread) private Runnable progressDialog_Runnable; { progressDialog_Runnable = new Runnable(){ @Override public void run() { createProgressDialog(); } }; } // Method you create to make the progress dialog private void createProgressDialog(){ //... Run this code on a separate thread via Runnable }