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();
}
Ici, je voulais faire appeler le "Log.d" et "postInvalidate" toutes les secondes. Mais lorsque je le vérifie depuis LogCat, il semble que la boucle soit plus rapide que je ne le souhaite. Pourquoi cette boucle n'attend-elle pas seulement 1000 ms?
Voici la sortie dans LogCat. Donc, vous pouvez voir que ça ne dort pas pendant une seconde du tout. J'ai aussi utilisé Thread.sleep (après vous l'avoir suggéré)
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
C'est le dernier code. gameOn
est un booléen, pour le moment c'est vrai.
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();
}
}
La sortie est
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
Vous avez besoin de la méthode sleep
de la classe Thread
.
public static void sleep (long time)
Force le thread qui a envoyé ce message à dormir pendant l'intervalle de temps donné (exprimé en millisecondes). La précision n'est pas garantie - le thread peut dormir plus ou moins que demandé.
Paramètres
time
Le temps de sommeil en millisecondes.
N'utilisez pas wait()
, utilisez soit Android.os.SystemClock.sleep(1000);
ou Thread.sleep(1000);
.
La principale différence entre eux est que Thread.sleep()
peut être interrompu plus tôt - on vous le dira, mais ce n'est toujours pas la seconde complète. Le Android.os
appel ne se réveillera pas tôt.
Je viens d'ajouter cette ligne exactement comme elle apparaît ci-dessous (si vous avez besoin d'un second délai):
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
// Process exception
}
Je trouve la capture IS nécessaire (votre application peut se bloquer en raison de Android du système d'exploitation autant que de votre propre code).
Vous pouvez essayer celui-ci c'est court :)
SystemClock.sleep(7000);
Il va dormir pendant 7 secondes, regardez documentation
Ecrit Thread.sleep(1000);
il fera dormir le thread pendant 1000 ms