2012-04-03 7 views
0

Ich habe Schleife für:Android und Zeit

for (int i = 1; i < 2000; i++) 

Wie kann ich diese Schleife ändern, dass anstelle von int < 2000 I Zeit erhalten:

for (int i = 1; i < 2000(miliseconds); i++) 

ich diese Schleife tun wollen, bis die Zeit ist weniger als 2000 Millisekunden. Ich meine, dass diese Schleife für 2 Sekunden und nach 2 Sekunden Pause funktionieren muss.

In Schleife mache ich einige Operationen. Ich speichere die Position des Cursors. Ich möchte diese Position für 2 Sekunden speichern.

+2

die Schleife etwas tut oder erfordert nur eine Pause für 2 Sekunden? – hmjd

+3

Sie möchten, dass die Benutzer Ihrer App ihre Akkuleistung für leere Loops verwenden? – SirDarius

+0

@SirDarius: du nimmst an, er tut nichts im Körper der for-Schleife, die nicht in seinen Schnipsel gezeigt wird ... – maerics

Antwort

4

Angenommen, Sie etwas in einer Schleife tun wollen bis 2000 ms vergangen ist:

long then = new Date().getTime() + 2000/*ms*/; 
do { 
    // Do some work here... 
    long now = new Date().getTime(); 
} while (now < then); 

[Bearbeiten] Als Kommentator @CheJami weist darauf hin, gibt es keine Notwendigkeit, ein Date-Objekt zu erstellen, da Sie das bekommen aktuelle Zeit in Millisekunden direkt:

long then = System.currentTimeMillis() + 2000/*ms*/; 
do { 
    // Do some work here... 
    long now = System.currentTimeMillis(); 
} while (now < then); 

Diese Strategie wird insgesamt zu einer besseren Leistung wahrscheinlich zur Folge haben, da es keine Notwendigkeit, immer wieder ist es, neue Objekte zu erstellen und schließlich Müll sie sammelt.

+0

Ugh .... -1 für einen busy-warte vorschlagen. –

+3

Ich schlage nicht vor, dass er beschäftigt-wartet, ich schlage vor, er tut etwas Arbeit, per "Hier arbeiten" Kommentar ... – maerics

+0

Warum müssen Sie ein "Date" -Objekt erstellen, nur um abgelaufene Zeit zu erarbeiten ? Dadurch werden einfach mehr Zuordnungen erstellt, damit sich der GC auszahlen kann. –

0

Wenn es nur eine leere Schleife ist, um die Ausführung des nachfolgenden Codes zu verzögern, müssen Sie die Dinge ein wenig umstrukturieren. Sie müssen den verzögerten Code in eine Runnable setzen und Handler.postDelayed() verwenden, um es nach einer bestimmten Zeit aufzurufen. Du kannst nicht einfach nur da sitzen und warten.

+1

es sei denn, er macht tatsächlich etwas in der Schleife? – assylias

+0

Ja, erklärte meine Antwort. –

3

Ohne ein Date Objekt ständig erstellen zu müssen, hier ist eine Alternative Antwort:

long startTime = System.currentTimeMillis(); 
while(System.currentTimeMillis() - startTime < 2000){ 
    // Do something 
} 
+0

+1 für eine prägnantere Lösung. – maerics