如何使用等待'任何循环内的命令?

时间:2015-01-17 11:02:37

标签: java android wait

学习Android开发。 在转到for循环中的下一个语句之前,代码必须等待几秒/分钟/小时。

for( i=0; i<number; i++) {

  // Do Something

  // Then Wait for x hours, y minutes, and z seconds. Then proceed to next command.

  // Do some more things.

} //End for loop.

我搜索了这个,但找到了许多答案,例如thread.SleepSleeptry{wait(); } Catch{ }等等。

另外,发现了Handler。我可以在Handler循环中使用for吗?

相反,是否有一个简单的命令,如wait(x小时,x分钟,x秒);这样的事情?

请帮助!!

5 个答案:

答案 0 :(得分:2)

这取决于你在哪里循环。如果你在主线程中运行循环,你就不能简单地插入一个延迟&#34;进入它,因为它会阻止执行,并且Java没有像C#async&amp; await那样容易地和#34;解决这个问题因此,最简单的方法是:首先,将整个循环移动到后台线程。 然后,您可以在需要延迟的地方使用Thread.sleep(…)。但是,如果你需要更新UI,你不能直接从后台线程执行此操作,则需要使用Handler,调用post(Runnable)方法(传递的Runnable将在主线程上运行),以及在Runnable中你必须检查用户界面是否还活着(因为用户可以&#34;关闭&#34;应用程序,所以你的活动/片段/视图/任何可以完成或者在#34;坏&#34 ;州)

答案 1 :(得分:1)

在Android中,有一个类可以完成您所说的所有内容,AsyncTask。

private class YourTaskClassName extends AsyncTask<Void, Integer, Long> {
 protected Long doInBackground(Void.. values) {
     //Here is where you do the loop
     for (int i = 0; i < number; i++) {
        ...
        publishProgress(yourProgress); //Value passed to onProgressUpdate
     }

     return totalSize; //Value for onPostExecute
 }

 protected void onProgressUpdate(Integer... progress) {
     //Here is what you wanna show while your loop is running in background
     setProgressPercent(progress[0]);
 }

 protected void onPostExecute(Long result) {
     //Here is what you wanna do when your loop has finished
 }

}

你可以这样称呼new YourTaskClassName().execute();

答案 2 :(得分:0)

Thread.sleep(time_in_miliseconds)

看起来像最简单的解决方案。它是一个静态方法,因此您不需要Thread类的实例。

答案 3 :(得分:0)

Wait是一种监视方法,这意味着您可以从synchronized块或方法中调用该方法。 为你的情况使用睡眠。

答案 4 :(得分:0)

我过去曾做过Android编程但不是最近。我已经做了很多Java,并认为我仍然会有所帮助。

关于Handler,看起来你可以做到这一点。看过文档http://developer.android.com/reference/android/os/Handler.html#handleMessage(android.os.Message),基本上你是从一个线程发布消息或runnables并在另一个线程中处理消息。你的for循环不会因为你在使用处理程序时启动一个新线程而停止。

创建处理程序时,如果它是一条消息或发布您正在发送的runnable,则需要覆盖handleMessage(Message msg)方法,因为这是在适当的时间已经过去之后调用的方法。要在特定时间或延迟的时间后发送消息,您可以使用postAtTime,postDelayed,sendMessageAtTime和sendMessageDelayed方法,无论哪个方法都需要。

new Handler() {

    public void handleMessage(Message msg) {
        // Your code here.
    }

}.sendMessageDelayed(yourMessage, theAmountOfTimeInMilles);

此外,在处理完邮件后,如果要进行任何用户界面更新(换句话说,更改任何图形,例如更新标签或更改背景),则需要使用runOnUiThread方法,否则它会引发异常:

runOnUiThread(new Runnable() {
    public void run() {
        // Code including UI code here.
    }
});