Pre API 19, die Go-to-Methode zum Aktualisieren eines Widgets schneller als die updatePeriodMillis
Mindestzeit von 30 Minuten war eine AlarmManager
und eine BroadcastReceiver
, um die Absicht nach dem angegebenen zu erhalten Intervall, das beim Einrichten des AlarmManagers verwendet wird.Aktualisieren eines Widgets in kurzen Intervallen mit API 19+
Derzeit den Code unten verwenden, wird das Widget aktualisiert, sondern als von Android 5.1, mit .setRepeating() mit einem Wiederholungsintervall von weniger als 60000ms automatisch das Intervall auf mindestens 60000ms gesetzt haben.
Einstellung Alarm in Widgets onEnabled():
AlarmManager am= (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
//After after 3 seconds
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+ 3000, 1000 , pi);
dann in der AlarmManagerBroadcastReceiver des OnReceive():
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TAG");
//Acquire the lock
wl.acquire();
/*
* ......
* Update Widgets RemoteViews
*/
wl.release();
In der Dokumentation für setRepeating() heißt es:
Hinweis: Ab API 19 sind alle Wiederholungsalarme ungenau. Wenn Ihre Anwendung genaue Lieferzeiten benötigt, muss sie einmalige exakte Alarme verwenden, die wie oben beschrieben jedes Mal neu geplant werden. Ältere Anwendungen, deren targetSdkVersion älter als API 19 ist, werden weiterhin alle ihre Alarme, einschließlich der Wiederholung von Alarmen, als genau behandelt behandeln.
heißt es auch jetzt:
vereinbaren, zu wiederkehrenden Alarm. Hinweis: für Operationen Timing (Zecken, Timeouts, etc.) ist es einfacher und viel effizienter
Handler
So zu verwenden, wie würden Sie gehen über die Widgets Remoteviews Aktualisieren eines Handler verwenden? Wie würdest du es stoppen, wenn das Gerät eingeschläfert wird, um die Batterie zu schonen?
Gibt es andere Wege vorgeschlagen, um ein Widget zu aktualisieren?
Gibt es ein Problem mit meiner Antwort? Hast du es versucht ? – csenga