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);
}
}
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? –
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? –