Ich habe einen Dienst, ich möchte eine Aufgabe jede Minute im Hintergrund ausführen. Es muss die Aufgabe nicht ausgeführt werden, wenn das Telefon schläft, nur wenn der Benutzer es aktiv verwendet. Ich versuche, dies mit einem IntentService zu tun, die wie folgt aufgebaut ist:Dienst, der jede Minute läuft
public class CounterService extends IntentService{
public CounterService() {
super("CounterService");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent,flags,startId);
}
@Override
protected void onHandleIntent(Intent intent) {
Toast.makeText(this, "onhandleintent", Toast.LENGTH_SHORT).show();
while(true)
{
//one minute is 60*1000
try {
Thread.sleep(5 * 1000);
Toast.makeText(getApplicationContext(), "getting app count", Toast.LENGTH_LONG).show();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Gerade jetzt die Funktionalität zu erhalten arbeite ich einfach will es alle 5 Sekunden einen Toast angezeigt werden, ich werde es später zu einer Minute ändern . Wenn ich die while(true)
auskommentiert habe, dann wird die "onhandleintent" Nachricht angezeigt. Wenn ich jedoch den folgenden Code ausführen lasse, wird keiner der Toasts angezeigt. Wie kann ich das beheben?
Betrachten Sie die Verwendung von PendingIntent und AlarmManager anstelle einer while-Schleife. Weitere Informationen finden Sie in den Dokumenten. Hier ist ein [SO-Beitrag] (http://stackoverflow.com/questions/3052149/using-alarmmanager-to-start-a-service-at-specific-time), der ein Beispiel zeigt. – Vino