如何在Android中“等待”一个线程
private void startGameTimeElapseThread(){ new Thread(new Runnable() { Date d = new Date(); public void run() { while (gameOn){ Log.d(TAG,""+d.getTime()+" "+gameStatus.getLastTimeUpdated()); postInvalidate(795, 150, 1024, 300); try { synchronized (this) { wait(1000); } } catch (InterruptedException e) { // TODO Auto-generated catch block Log.d(TAG, "Waiting didnt work!!"); e.printStackTrace(); } } } }).start(); }
这里我想每秒调用一次“Log.d”和“postInvalidate”。 但是,当我从LogCat中检查它似乎循环运行速度比我想要的。 为什么这个循环只是等待1000毫秒?
以下是LogCat中的输出。 所以你可以看到它不睡一秒钟。 我也使用Thread.sleep(build议之后)
05-27 11:40:10.060: DEBUG/NOPSA-P(4546): 1306496408950 1306496387535 05-27 11:40:10.070: DEBUG/NOPSA-P(4546): 1306496410037 1306496387535 05-27 11:40:10.232: DEBUG/NOPSA-P(4546): 1306496410201 1306496387535 05-27 11:40:10.250: DEBUG/NOPSA-P(4546): 1306496408214 1306496387535 05-27 11:40:10.310: DEBUG/NOPSA-P(4546): 1306496405988 1306496387535 05-27 11:40:10.361: DEBUG/NOPSA-P(4546): 1306496409327 1306496387535 05-27 11:40:10.431: DEBUG/NOPSA-P(4546): 1306496410398 1306496387535 05-27 11:40:10.521: DEBUG/NOPSA-P(4546): 1306496409478 1306496387535 05-27 11:40:10.593: DEBUG/NOPSA-P(4546): 1306496410566 1306496387535 05-27 11:40:11.230: DEBUG/NOPSA-P(4546): 1306496409678 1306496387535 05-27 11:40:11.230: DEBUG/NOPSA-P(4546): 1306496410201 1306496387535 05-27 11:40:11.241: DEBUG/NOPSA-P(4546): 1306496409878 1306496387535 05-27 11:40:11.241: DEBUG/NOPSA-P(4546): 1306496410037 1306496387535 05-27 11:40:11.241: DEBUG/NOPSA-P(4546): 1306496408950 1306496387535 05-27 11:40:11.260: DEBUG/NOPSA-P(4546): 1306496408214 1306496387535 05-27 11:40:11.314: DEBUG/NOPSA-P(4546): 1306496405988 1306496387535 05-27 11:40:11.314: DEBUG/NOPSA-P(4546): 1306496411254 1306496387535 05-27 11:40:11.361: DEBUG/NOPSA-P(4546): 1306496409327 1306496387535 05-27 11:40:11.431: DEBUG/NOPSA-P(4546): 1306496410398 1306496387535 05-27 11:40:11.520: DEBUG/NOPSA-P(4546): 1306496409478 1306496387535 05-27 11:40:11.551: DEBUG/NOPSA-P(4546): 1306496411508 1306496387535 05-27 11:40:11.712: DEBUG/NOPSA-P(4546): 1306496410566 1306496387535 05-27 11:40:11.881: DEBUG/NOPSA-P(4546): 1306496411865 1306496387535 05-27 11:40:12.051: DEBUG/NOPSA-P(4546): 1306496412025 1306496387535 05-27 11:40:12.211: DEBUG/NOPSA-P(4546): 1306496412198 1306496387535 05-27 11:40:12.231: DEBUG/NOPSA-P(4546): 1306496409678 1306496387535 05-27 11:40:12.242: DEBUG/NOPSA-P(4546): 1306496410201 1306496387535 05-27 11:40:12.251: DEBUG/NOPSA-P(4546): 1306496408950 1306496387535 05-27 11:40:12.251: DEBUG/NOPSA-P(4546): 1306496409878 1306496387535 05-27 11:40:12.251: DEBUG/NOPSA-P(4546): 1306496410037 1306496387535 05-27 11:40:12.261: DEBUG/NOPSA-P(4546): 1306496408214 1306496387535 05-27 11:40:12.311: DEBUG/NOPSA-P(4546): 1306496405988 1306496387535 05-27 11:40:12.341: DEBUG/NOPSA-P(4546): 1306496411254 1306496387535 05-27 11:40:12.371: DEBUG/NOPSA-P(4546): 1306496409327 1306496387535 05-27 11:40:12.442: DEBUG/NOPSA-P(4546): 1306496410398 1306496387535 05-27 11:40:12.471: DEBUG/NOPSA-P(4546): 1306496412431 1306496387535 05-27 11:40:12.521: DEBUG/NOPSA-P(4546): 1306496409478 1306496387535 05-27 11:40:12.553: DEBUG/NOPSA-P(4546): 1306496411508 1306496387535 05-27 11:40:12.671: DEBUG/NOPSA-P(4546): 1306496412639 1306496387535 05-27 11:40:12.711: DEBUG/NOPSA-P(4546): 1306496410566 1306496387535 05-27 11:40:12.841: DEBUG/NOPSA-P(4546): 1306496412813 1306496387535 05-27 11:40:12.891: DEBUG/NOPSA-P(4546): 1306496411865 1306496387535 05-27 11:40:13.001: DEBUG/NOPSA-P(4546): 1306496412983 1306496387535 05-27 11:40:13.051: DEBUG/NOPSA-P(4546): 1306496412025 1306496387535 05-27 11:40:13.193: DEBUG/NOPSA-P(4546): 1306496413166 1306496387535 05-27 11:40:13.231: DEBUG/NOPSA-P(4546): 1306496409678 1306496387535 05-27 11:40:13.251: DEBUG/NOPSA-P(4546): 1306496410201 1306496387535 05-27 11:40:13.251: DEBUG/NOPSA-P(4546): 1306496409878 1306496387535 05-27 11:40:13.251: DEBUG/NOPSA-P(4546): 1306496410037 1306496387535 05-27 11:40:13.251: DEBUG/NOPSA-P(4546): 1306496408950 1306496387535 05-27 11:40:13.261: DEBUG/NOPSA-P(4546): 1306496408214 1306496387535 05-27 11:40:13.271: DEBUG/NOPSA-P(4546): 1306496412198 1306496387535 05-27 11:40:13.321: DEBUG/NOPSA-P(4546): 1306496405988 1306496387535 05-27 11:40:13.341: DEBUG/NOPSA-P(4546): 1306496411254 1306496387535 05-27 11:40:13.371: DEBUG/NOPSA-P(4546): 1306496409327 1306496387535 05-27 11:40:13.431: DEBUG/NOPSA-P(4546): 1306496413405 1306496387535 05-27 11:40:13.441: DEBUG/NOPSA-P(4546): 1306496410398 1306496387535 05-27 11:40:13.481: DEBUG/NOPSA-P(4546): 1306496412431 1306496387535 05-27 11:40:13.532: DEBUG/NOPSA-P(4546): 1306496409478 1306496387535
这是最新的代码。 gameOn
是一个布尔值,现在是真的。
private void startGameTimeElapseThread(){ if (gameOn){ new Thread(new Runnable() { Date d = new Date(); public void run() { Log.d(TAG,""+d.getTime()+"ms "+d.getTime()/1000+"sec"); postInvalidate(795, 150, 1024, 300); android.os.SystemClock.sleep(1000); startGameTimeElapseThread(); } }).start(); } }
输出是
05-27 12:00:51.211: DEBUG/NOPSA-P(5098): 1306497650761ms 1306497650sec 05-27 12:00:51.211: DEBUG/NOPSA-P(5098): 1306497650786ms 1306497650sec 05-27 12:00:51.221: DEBUG/NOPSA-P(5098): 1306497650764ms 1306497650sec 05-27 12:00:51.221: DEBUG/NOPSA-P(5098): 1306497650763ms 1306497650sec 05-27 12:00:51.221: DEBUG/NOPSA-P(5098): 1306497650769ms 1306497650sec 05-27 12:00:51.231: DEBUG/NOPSA-P(5098): 1306497650749ms 1306497650sec 05-27 12:00:51.231: DEBUG/NOPSA-P(5098): 1306497650736ms 1306497650sec 05-27 12:00:51.231: DEBUG/NOPSA-P(5098): 1306497650742ms 1306497650sec 05-27 12:00:51.241: DEBUG/NOPSA-P(5098): 1306497650746ms 1306497650sec 05-27 12:00:51.241: DEBUG/NOPSA-P(5098): 1306497650848ms 1306497650sec 05-27 12:00:51.251: DEBUG/NOPSA-P(5098): 1306497650729ms 1306497650sec 05-27 12:00:51.271: DEBUG/NOPSA-P(5098): 1306497650739ms 1306497650sec 05-27 12:00:51.271: DEBUG/NOPSA-P(5098): 1306497650739ms 1306497650sec 05-27 12:00:51.271: DEBUG/NOPSA-P(5098): 1306497650868ms 1306497650sec 05-27 12:00:51.271: DEBUG/NOPSA-P(5098): 1306497650798ms 1306497650sec 05-27 12:00:51.281: DEBUG/NOPSA-P(5098): 1306497650870ms 1306497650sec 05-27 12:00:51.291: DEBUG/NOPSA-P(5098): 1306497651020ms 1306497651sec 05-27 12:00:51.551: DEBUG/NOPSA-P(5098): 1306497651498ms 1306497651sec 05-27 12:00:51.551: DEBUG/NOPSA-P(5098): 1306497651502ms 1306497651sec 05-27 12:00:51.642: DEBUG/NOPSA-P(5098): 1306497651523ms 1306497651sec 05-27 12:00:51.651: DEBUG/NOPSA-P(5098): 1306497651537ms 1306497651sec 05-27 12:00:51.691: DEBUG/NOPSA-P(5098): 1306497651529ms 1306497651sec 05-27 12:00:51.701: DEBUG/NOPSA-P(5098): 1306497651534ms 1306497651sec 05-27 12:00:51.784: DEBUG/NOPSA-P(5098): 1306497651527ms 1306497651sec 05-27 12:00:51.801: DEBUG/NOPSA-P(5098): 1306497651570ms 1306497651sec 05-27 12:00:51.801: DEBUG/NOPSA-P(5098): 1306497651564ms 1306497651sec 05-27 12:00:51.891: DEBUG/NOPSA-P(5098): 1306497651682ms 1306497651sec 05-27 12:00:51.891: DEBUG/NOPSA-P(5098): 1306497651690ms 1306497651sec 05-27 12:00:51.891: DEBUG/NOPSA-P(5098): 1306497651685ms 1306497651sec 05-27 12:00:51.901: DEBUG/NOPSA-P(5098): 1306497651693ms 1306497651sec 05-27 12:00:51.914: DEBUG/NOPSA-P(5098): 1306497651647ms 1306497651sec 05-27 12:00:51.914: DEBUG/NOPSA-P(5098): 1306497651667ms 1306497651sec 05-27 12:00:51.921: DEBUG/NOPSA-P(5098): 1306497651666ms 1306497651sec 05-27 12:00:51.921: DEBUG/NOPSA-P(5098): 1306497651658ms 1306497651sec 05-27 12:00:51.921: DEBUG/NOPSA-P(5098): 1306497651663ms 1306497651sec 05-27 12:00:51.932: DEBUG/NOPSA-P(5098): 1306497651688ms 1306497651sec 05-27 12:00:51.941: DEBUG/NOPSA-P(5098): 1306497651711ms 1306497651sec 05-27 12:00:51.961: DEBUG/NOPSA-P(5098): 1306497651792ms 1306497651sec 05-27 12:00:51.971: DEBUG/NOPSA-P(5098): 1306497651629ms 1306497651sec 05-27 12:00:51.981: DEBUG/NOPSA-P(5098): 1306497651714ms 1306497651sec 05-27 12:00:52.083: DEBUG/NOPSA-P(5098): 1306497652048ms 1306497652sec
你需要Thread
类的sleep
方法。
public static void sleep (long time)
使发送此消息的线程在给定的时间间隔(以毫秒为单位)hibernate。 精度不能保证 – 线程可能会比请求更多或更less。
参数
time
以毫秒为单位的睡眠时间。
不要使用wait(),使用android.os.SystemClock.sleep(1000);
或Thread.sleep(1000);
。 它们之间的主要区别是Thread.sleep()可以被提前中断 – 你会被告知,但是它还不是完整的秒钟。 android.os调用不会提前醒来。
我只是按照下面的内容添加这一行(如果需要第二次延迟):
try{ Thread.sleep(1000); }catch(InterruptedException e){ }
我觉得抓住是必要的。
你可以试试这个简短的:)
SystemClock.sleep(7000);
它会睡7秒看文档
写入Thread.sleep(1000);
它会使线程睡眠1000毫秒
- 如何使用vector绘图与除了ImageView与srcCompat?
- 更改应用程序的开始活动
- 什么时候SQLiteOpenHelper的onCreate()/ onUpgrade()运行?
- 如何在android中设置唯一的数值为edittext?
- 当AsyncTask.get()调用时,ProgressDialog不显示
- 无法从android.app.FragmentManager转换为android.support.v4.app.FragmentManager
- Genymotion,“无法加载VirtualBox引擎”,在小牛队。 VBox安装正确
- 我如何使用MS Visual Studio进行Android开发?
- HttpEntity在Android上已经被弃用了,有什么select?