1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Service Sleep...?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von StefMa, 10.05.2012.

  1. StefMa, 10.05.2012 #1
    StefMa

    StefMa Threadstarter Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010
    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: 10.05.2012
  2. swordi, 10.05.2012 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    warum erstellst nicht einen "alarm" mit dem alarmmanager in 18 stunden und startest dann deinen service ?

    denk an den akku - sparsamkeit ist trumpf
     
    StefMa bedankt sich.
  3. StefMa, 10.05.2012 #3
    StefMa

    StefMa Threadstarter Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010
    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
     
  4. swordi, 10.05.2012 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    ja wird wohl die beste lösung sein :)
     
  5. strider, 10.05.2012 #5
    strider

    strider Erfahrener Benutzer

    Beiträge:
    208
    Erhaltene Danke:
    45
    Registriert seit:
    30.09.2011
    Phone:
    Nexus S
    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.
     
  6. StefMa, 10.05.2012 #6
    StefMa

    StefMa Threadstarter Gewerbliches Mitglied

    Beiträge:
    2,054
    Erhaltene Danke:
    413
    Registriert seit:
    16.10.2010
    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: 10.05.2012
  7. strider, 10.05.2012 #7
    strider

    strider Erfahrener Benutzer

    Beiträge:
    208
    Erhaltene Danke:
    45
    Registriert seit:
    30.09.2011
    Phone:
    Nexus S
    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: 10.05.2012

Diese Seite empfehlen