2012-10-08 7 views
7

Ich arbeite an App, die alle 5 Sekunden einen Teil des Status des Telefons überprüfen. ich es getan:Thread und Akkuverbrauch

Thread checking = new Thread() { 
    public void run(){ 
     while(<<some status>>) { 
      <<checkstatus and do something>> 
      Thread.sleep(5000); 
     } 
    } 
} 

Diese für die Batterie schlecht ist? Wie kann ich es anders machen? Der Service hört nach einigen Sekunden auf zu arbeiten.

Antwort

5

Um Ihre Frage zu beantworten, kommt es darauf an, was Sie in der while-Schleife tun.

Wenn Sie keine "teuren" Komponenten (wie Internet, Bluetooth, andere Sensoren und Bildschirm) verwenden und aufwecken, sollten Sie in Ordnung sein. Im Grunde funktioniert das OS sowieso im Hintergrund und die Verwendung eines Threads ist eine der günstigsten Möglichkeiten.

Wenn Ihre Aufgabe CPU-intensiv ist, würden Sie auch die Batterie entleeren.

Ihr Service sollte gut funktionieren, wenn Sie es richtig machen.

Eine andere Möglichkeit wäre die Verwendung von Handlern, die einen Großteil der Thread-Verwaltung für Sie abstrahieren.

+0

Vielen Dank für die Antwort. Ich überprüfe, ob es einige ungelesene SMS gibt, die dem Benutzer Erinnerung geben. Dies ist der beste Weg, das zu tun? Gibt es die Möglichkeit, dass Android meinen Thread tötet? –

+1

Informationen zum Empfang von SMS finden Sie unter http://stackoverflow.com/questions/1973071/broadcastreceiver-sms-received. Sie sollten stattdessen einen Empfänger verwenden. – Edison

2

Thread.sleep() schaltet den aktuellen Thread aus, was bedeutet, dass die CPU für andere Threads zur Verfügung steht oder einfach abgeschaltet wird. Bitte beachten Sie auch, Schlafkräfte Kontextwechsel, aber Sie sind auf der sicheren Seite mit großen Schlafintervall. Im Allgemeinen liegt alles an Ihnen.

Sie können beispielsweise PowerTutor verwenden, um sicherzustellen, dass Ihre Anwendung ordnungsgemäß entwickelt und implementiert wurde.