Service Sleep...?

StefMa

StefMa

Dauergast
450
Hi,

eins vorne weg: Habe mich noch nie mit Service's auseinandergesetzt!

Folgendes: Ich starte einen Servive, der allerdings erst nach einer gewissen Zeit etwas zun soll. (Sagen wir mal nach 18 Stunden eine Benachrichtigung geben).
Mach ich das easy mit Thread.sleep(18 Stunden)? Oder gibts da iwie ein anderen trick?
Wird die methode mit sleep nicht auch ressourcen fressen, da sie ja trotzdem noch iwie im hintergrund ist?!
Oder ist die Lösung wirklich so einfach?! :D

Gruß

€dit:
Okay, in der Doku steht das:
Code:
  @Override
  protected void onHandleIntent(Intent intent) {
      // Normally we would do some work here, like download a file.
      // For our sample, we just sleep for 5 seconds.
      long endTime = System.currentTimeMillis() + 5*1000;
      while (System.currentTimeMillis() < endTime) {
          synchronized (this) {
              try {
                  wait(endTime - System.currentTimeMillis());
              } catch (Exception e) {
              }
          }
      }
  }
Dann halt wait..?! Aber wirklich für 18 Stunden?!
 
Zuletzt bearbeitet:
warum erstellst nicht einen "alarm" mit dem alarmmanager in 18 stunden und startest dann deinen service ?

denk an den akku - sparsamkeit ist trumpf
 
  • Danke
Reaktionen: StefMa
Genau die Antwort auf meine Frage :thumbsup:

Wenn ich die Doku richtig verstehe, meldet sich meine App bei dem Broadcast Reciever von Android an. Dieser startet dann ERST die App/Service, wenn die Zeit rum ist?! Richtig verstanden?
Daher wird nichts an CPU/Ram blubb verbraucht, weil ja nichts läuft?! ;)

Bitte um kurze bestätigung :>

MfG Ice
 
ja wird wohl die beste lösung sein :)
 
Denk auch an den Wakelock wenn du sicher gehen willst das in 18 Stunden etwas passiert. Der Broadcast receiver wird noch garantiert ausgeführt, aber sobald es in den Service reingeht kann jederzeit das Sandmännchen kommen.
 
Hi,

was meinst du damit?
Was ist Wakelock? Wenn ich das nicht aufrufe(?), dann kann trotz AlarmManager mein Service beendet werden?
Wäre ja doof :biggrin:

Also, was ist Wakelock?

MfG Ice

P.s. Habe mir davon noch nichts angeschaut, bin noch arbeiten ;)
P.p.s: Achja, WakeLock setzte ich dann das Handy auf "on". Geht dann damit auch der Display an? :D Muss ich das wirklich machen, damit der Service startet?
 
Zuletzt bearbeitet:
Wenn du keinen Wakelock hälst während der Service läuft kann das Smartphone jederzeit in den Sleep modus gehen. Ja trotz AlarmManager kann dein Service einschlafen. Es wird nur garantiert, dass während der BroadcastReceiver seine onReceive() abarbeitet das Smartphone wachbleibt. Schau dir mal den WakefullIntentService an da ist das Problem elegant gelöst.
https://github.com/commonsguy/cwac-wakeful

Wichtig ist wie er den Service aus dem BR aufruft über die statische Methode.

public static void sendWakefulWork(Context ctxt, Intent i) {
getLock(ctxt.getApplicationContext()).acquire();
ctxt.startService(i);
}

Damit holt er sich praktisch einen neuen Wakelock während der Wakelock des BroadcastReceivers noch aktiv ist und startet dann erst seinen Service, somit ist immer ein Wakelock aktiv.
 
Zuletzt bearbeitet:

Ähnliche Themen

H
Antworten
2
Aufrufe
817
HelloWorldx8
H
A
Antworten
2
Aufrufe
1.138
AndrejT
A
B
  • Braesident
Antworten
7
Aufrufe
1.585
markus.tullius
markus.tullius
Zurück
Oben Unten