Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 2.2:你如何编写一个助手方法让你的应用程序“睡眠”N毫秒?_Android_Sleep - Fatal编程技术网

Android 2.2:你如何编写一个助手方法让你的应用程序“睡眠”N毫秒?

Android 2.2:你如何编写一个助手方法让你的应用程序“睡眠”N毫秒?,android,sleep,Android,Sleep,我需要编写一个helper方法,我可以在应用程序中的不同位置使用它,使其基本上处于N毫秒的“睡眠”状态。它看起来像Handler.posttime可能是一种方法,但我想要任何代码片段(如果可用) 你在找这样的东西吗 try { //Put the thread to sleep for the desired amount of time (milliseconds) Thread.currentThread().sleep(1000); } catch(InterruptedExcep

我需要编写一个helper方法,我可以在应用程序中的不同位置使用它,使其基本上处于N毫秒的“睡眠”状态。它看起来像Handler.posttime可能是一种方法,但我想要任何代码片段(如果可用)

你在找这样的东西吗

try {
  //Put the thread to sleep for the desired amount of time (milliseconds)
  Thread.currentThread().sleep(1000);
}
catch(InterruptedException ie){

}

这将使您调用它的线程在您指定的时间内处于睡眠状态。

您没有说明为什么需要应用程序睡眠

假设您需要在一段时间后运行任务:

Handler h = new Handler();
h.postDelayed(new Runnable() {
    public void run() {
       // do something here
    }
}, 1000); // 1000 ms delay

如果您不介意阻塞线程,可以使用SystemClock.sleep替代thread.sleep

好处是它是一条单行线,因为它忽略了 InterruptedException,这样您就不需要处理它了

更多信息


如前所述,您应该避免在主UI线程上调用此选项,因为它会导致您的应用程序变得无响应,并可能显示我们都不喜欢看到的可怕对话框。请等待或强制关闭。

是应用程序的主线程需要休眠N毫秒吗?让应用进入睡眠状态是什么意思?你不应该让应用进入睡眠状态,尤其是主UI线程。这将影响用户界面的绘制,并可能使你的应用程序看起来迟缓。我与Suresh-我们需要更多的信息来帮助。将X操作延迟到Y毫秒是很容易的,但它会让其他ui操作和后台进程正常继续。另一方面,你可能会期待你[每N毫秒更新或检查一次,这也是可行的。我们只需要知道更多。正如我在下面对Spencer所说的,你不应该让你的manin线程休眠,因为这将本质上冻结Android UI,激怒用户,并可能导致FC警告。我会警告你不要使用这种方法。Android框架强烈反对锁定g随时打开UI线程,这基本上就是你的代码在做的事情。+1 Eddie。是的,你永远不应该让主UI线程休眠。这是一个非常糟糕的做法。从积极的方面来说,这确实有效。从消极的方面来说,这听起来像是‘有更好的方法,请让我知道。它在哪里提到了那个线程。休眠会暂停UI线程?如果它出现了呢是从另一个线程调用的?是的,我的理解是,这不会在主UI线程上运行。ANR是一件非常糟糕的事情。我需要这样做的原因是我想在屏幕上显示一条消息,让它显示60秒,然后显示另一条消息。在我等待的60秒内,没有任何特定的事情发生完成,因此AsyncTask似乎不适用。在AsyncTask中执行sleep60000吗?不要每次发布消息时都创建新的处理程序,但除此之外,这是您想要的方法。我尝试将此代码放入我调用的帮助器方法中,//Do something here部分中没有任何内容,但强制关闭:java.lang.RuntimeException:无法创建在没有调用Looper.prepare的线程中使用e处理程序。这听起来是更好的方法,但是我如何使它成为一种通用的实用方法来实现这一点呢?