0

Ich benutze AlarmManager, um den Dienst alle 1 Minute zu starten, um einige Hintergrundjobs auszuführen.Hintergrundjob alle 1 Minute, Dienst, sollte ich `stopSelf()` aufrufen?

Hier ist Code-Schnipsel:

Intent intent = new Intent(context, PostLocationService.class); 
    PendingIntent pendingIntent = PendingIntent.getService(context, POST_LOCATION_REQUEST_CODE, intent, 0); 

    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

    alarmManager.setInexactRepeating(
      AlarmManager.ELAPSED_REALTIME_WAKEUP, 
      SystemClock.elapsedRealtime() + TEN_SECONDS_INTERVAL, 
      ONE_MINUTE_INTERVAL, pendingIntent); 

PostLocationService erstreckt Service. In onStartCommand() mache ich einen Job und rufe stopSelf(), nachdem dieser Job erledigt ist.

Aber ich weiß, dass, wenn dieser Dienst noch läuft, das nächste Mal nach Erhalt der Absicht onStartCommand() wird erneut ausgeführt werden und benötigte Arbeit wird erledigt sein.

Was ist die beste Vorgehensweise hier: Starten Sie alle 1 Minute einen neuen Dienst oder lassen Sie einen Dienst laufen und warten auf Intents?

+0

Ich habe meine Antwort hinzugefügt, Bitte lassen Sie mich wissen, wenn Sie weitere Informationen wünschen. –

Antwort

0

Verwenden Sie IntentService für schnelle Hintergrundaufgaben.

IntentService ist eine Basisklasse für Dienste, die asynchrone Anforderungen (ausgedrückt als Intents) bei Bedarf verarbeiten. Clients senden Anfragen über startService (Intent) -Aufrufe; Der Dienst wird nach Bedarf gestartet, behandelt jede Absicht der Reihe nach mit einem Arbeitsthread und beendet sich selbst, wenn keine Arbeit mehr zur Verfügung steht.

+0

Mit anderen Worten, Ihre Stimme ist für das Anhalten des Dienstes, nachdem der Job erledigt ist? –

Verwandte Themen