2017-07-12 3 views
1

Ich habe einen Dienst, der Daten sammelt, und jede Stunde muss der Dienst diese Daten an meinen Server senden. Ich weiß, dass es viele Lösungen gibt, um Aufgaben zu planen, aber was ist der effizienteste in Bezug auf Batterieverbrauch und Ressourcennutzung?Wie kann ich eine Aufgabe in meinem Dienst effizient planen?

kann auch mein Dienst angehalten werden, und wenn mein Dienst beendet wird dann es muss mehr keine Daten senden (so Alarmmanager Naht nicht der beste Weg zu sein, weil es so weit meinen Dienst wird neu gestartet ist, wie ich weiß)

+0

Jede Art von „Aufgabe“ Sie gestoppt werden implementieren müssen explizit, wenn Ihr Dienst würde wie Alarmmanager stoppt aber du solltest in JobScheduler schauen – tyczj

Antwort

1

Die Planung über die AlaramManager ist völlig in Ordnung, da Sie die geplante Aufgabe auch abbrechen können.

es so

AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE); 
Intent intent = new Intent(getApplicationContext(), YourService.class); 
alarm.set(
    AlarmManager.RTC_WAKEUP, 
    System.currentTimeMillis() + DateUtils.HOUR_IN_MILLIS, 
    PendingIntent.getService(getApplicationContext(), 11, intent, PendingIntent.FLAG_UPDATE_CURRENT) 
); 

aussehen könnte und abzubrechen es wie dieses

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
Intent myIntent = new Intent(getApplicationContext(), YourService.class); 
PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 11, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
alarmManager.cancel(pendingIntent); 

Die 11 ist die Kennung für den PendingIntent, in dem getan werden könnte, haben Sie Zugriff auf sie bekommen können.

+0

danke murat ich guck mal – loki

+0

Das wird onStartCommand von meinem Service anrufen? – loki

+0

@loki Ja, lesen Sie hier mehr über [Dienste] (https://developer.android.com/reference/android/app/Service.html#ServiceLifecycle) –

1

Die Verwendung des Alarm-Managers alleine reicht nicht aus.

Sie sollten Ihre Daten senden, wenn die Netzwerkverbindung bereits aktiv ist, da das Verschieben der WLAN- oder 3G/4G-Funkgeräte von "nicht verwendet" auf "Daten senden/empfangen" sehr energieaufwändig ist. Wenn das Gerät bereits Daten sendet/empfängt, haben Sie keine zusätzlichen Energiekosten, um das Radio zu aktivieren.

Sie können einen Broadcast-Empfänger registrieren, der Ihre App über den aktuellen Netzwerkstatus informiert.

Weitere Details finden

Ihre Transferstrategie eine Mischung aus

  • Alarmmanager
  • wäre, ist das Gerät curr ist ständig Laden (so ist Batterie in diesem Moment nicht unwichtig)
  • das Radio gerade aktiv
+0

Ich stimme voll und ganz mit Ihnen überein, aber wie all das zu tun? irgendeine Probe? – loki

+0

siehe https://developer.android.com/training/efficient-downloads/efficient-network-access.html – k3b

+0

Ich lese das Dokument, aber nichts erklärt mir was genau zu tun :(es ist nur sagen, was Sie sagen (und was Ich weiß bereits, Zweck dieser Frage), was ich wissen muss ist, wie man es implementiert :(Wie effizient senden Daten über das Netzwerk mit Alarmmanager. Zum Beispiel ist es Evedent, wenn wenn der Alam gefeuert ihre Netzwerkverbindung ist, besser zu Warten Sie eine Netzwerkverbindung, aber wie dies alles zu tun – loki

Verwandte Themen