0

我想做这样的事情:

@Override
protected String doInBackground(Object... params) {     
    int i = 0;
    int max = Integer.MAX_VALUE;
    GPSTracker gps = new GPSTracker(context);
    do
    {
        //Something

    } while(10 seconds);

    return null;

}

如何在 while 语句中放置计数时间。我想在 10 秒内完成。

4

5 回答 5

2

如果您想定期运行任务,请使用Timer#scheduleAtFixedRate.

于 2013-08-29T16:44:12.557 回答
2

要延迟执行,您可以sleep使用线程:

Thread.sleep(timeInMills);

此行可能会引发线程异常,并且永远不应在主 UI 线程上执行,因为它会导致应用程序停止与 Android 的通信,从而导致ANR.

要在单个活动的后台运行进程,您应该生成一个新的Thread.

new Thread(){
    public void run(){
        //Process Stuff
    }
}.start();

如果您希望这部分代码在应用程序的整个生命周期中运行,包括对用户隐藏时,您应该考虑为长期任务运行服务。

于 2013-08-29T16:39:32.117 回答
0

一个方便的替代品

Thread.sleep(timeInMillis)

TimeUnit.SECONDS.sleep(10)

然后单位更明确,更容易推理。

请注意,这两种方法都会抛出 InterruptedException,您将不得不处理它。您可以在此处了解更多信息。如果通常情况下,您不想使用中断,并且您不希望代码被 try/catch 块弄得杂乱无章,那么Google Guava 的 Uninterruptibles会很方便:

Uninterruptibles.sleepUninterruptibly(10, TimeUnit.SECONDS);
于 2013-08-29T16:46:15.820 回答
0

您可以使用 Thread.sleep(); (不是很干净)。

最好使用 Handler 来执行此操作。

前任:

new Handler().postDelayed(new Runnable() {

                @Override
                public void run() {
                   // You code here
                }

            }, 775); // Time in millis
于 2013-08-29T16:46:46.130 回答
0

我做的:

long start = System.currentTimeMillis();
long end = start + 60*1000; // 60 seconds * 1000 ms/sec
while (System.currentTimeMillis() < end)
{
    // run
}

谢谢你的所有答案。

于 2013-08-29T17:09:40.827 回答