0

Alarm Manager überschreiben jetzt mir die folgende Meldung zu geben, wahrscheinlich weil ich 23.Wie Alarmmanager zu stoppen meine Anfrage

03-21 13 unter Verwendung von API gestartet: 00: 03.828 754-2170/system_process W/Alarmmanager : Verdächtig kurze Pause 5000 Millis; Erweiterung auf 60 Sekunden

Ich benötige ein 5000 Millis Intervall pro angeforderten Spezifikationen. Wie sagst du es nicht zu 60 Sekunden zu erweitern, wenn ich es 5000 Millis in meinem BroadcastReceiver erzähle? d.h

private static final long defaultPERIOD = 5000; 
    @Override 
public void onReceive(Context ctxt, Intent i) { 
    context = ctxt; 

    scheduleAlarms(ctxt, (long) defaultPERIOD, true); 

} 

public static void scheduleAlarms(Context ctxt, Long duration, Boolean bactive) { 


    Log.e("FiveSecondReceivr", "scheduleAlarms duraton: "+duration); 
    AlarmManager mgr = (AlarmManager) ctxt 
      .getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(ctxt, FiveSecondSchedule.class); 
    PendingIntent pi = PendingIntent.getService(ctxt, 0, i, 0); 

    mgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, 
      SystemClock.elapsedRealtime() + duration, duration, pi); 


    if (bactive == false) { 
     mgr.cancel(pi); 
    } 

} 
+1

Sie können nicht. Verwenden Sie den Alarmmanager nicht für solch kurze Alarme, verwenden Sie eine verzögerte Nachricht an einen Handler. Natürlich funktioniert das nicht, wenn das Telefon in den Leerlauf geht. Außerdem verwenden Sie setInexact - das kann es bereits um einige Minuten unzuverlässig machen, also warum sollten Sie das verwenden, wenn Sie genau 5s Latenz benötigen? –

+0

Es funktionierte zu einem früheren Zeitpunkt, etwa 5 bis 6 Sekunden, sehr konstant. Der Code hier hat nicht nur den Build-Prozess und die Unterstützung von SDK- und SDK-Tools geändert. Ich habe setInexact benutzt, was vielleicht falsch war, denn wenn es ein paar Sekunden war, war es egal. Es ist mir egal, dass das anders ist, wenn das Telefon in den Leerlauf geht, der Benutzer verwendet die App dann nicht an diesem Punkt. Also bezieht sich Ihr "Sie können nicht" auf das neueste SDK? –

Antwort

1

Alarm Manager jetzt gibt mir die folgende Meldung, wahrscheinlich weil ich 23.

Nein, that has been the behavior since API Level 21 (Android 5.1) mit API gestartet.

Wie sagen Sie es nicht zu 60 Sekunden zu erweitern, wenn ich es 5000 Millis in meinem BroadCastReceiver erzähle?

Verwenden Sie nicht die "sich wiederholende" Familie von Methoden. Benutze setExact() um die Kontrolle zu bekommen, wo du deine Arbeit machst und rufe wieder setExact() an. Dies ermöglicht es Ihnen, bis zu 5000 Millisekunden (obwohl nicht niedriger) zu erreichen, und diese Regel könnte sich in zukünftigen Versionen von Android ändern.

+0

Das erklärt es. Ging von 5.0. Werde versuchen. Danke M. –