AlarmManager triggert wiederholt nach wakeup

  • Antworten:5
Gelöschter Account
  • Forum-Beiträge: 2.492

11.12.2014, 07:20:16 via Website

Hallo,

ich hab ein kleines Problem mit dem AlarmManager. Also mein Ziel ist es (immer noch :(), dass sich nach einer gewissen Zeit automatisch das Hintergrundbild ändert. Dafür habe ich

alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), dauerLinks, pintent);

verwendet. Das Problem ist jetzt, dass wenn dauerLinks z.B. 5 Minuten sind und ich das Smartphone eine Stunde lang inaktiv lasse und es dann anmache der Alarm wohl die verpassten Alarme nachholt.
Das seh ich daran, dass sich innerhalb von wenigen Sekunden das Hintergrundbild 3, 4 mal oder so ändert.
Das passiert aber auch nicht immer, meist nur wenn man das Handy wirklich lange im Standby hat wenn es nur wenige Minuten sind passiert es normal nicht.

Hat jemand eine Idee woran das liegt oder wie man das beheben kann?
Danke :)

Antworten
pepperonas
  • Forum-Beiträge: 434

11.12.2014, 09:00:31 via Website

Hallo,
irgendwo werden wohl die "Änderungen" gecacht, also zwischen gespeichert und dann kommts zur Ausführung wenn du das Handy anschaltest.
Also möglich wäre
a) Bildschirm entsperren und Hintergrund ändern
oder
b) nur wenn das Gerät "online" ist, den Hintergrund ändern.

übrigens ist "setInexactRepeating" akkuschonender...

Open Source

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

11.12.2014, 11:29:56 via Website

Die Doku zu der Methode sagt das aber auch, das sollte man halt verstanden haben. Das ist eine Optimierung damit nicht jede app das gerät aufwachen lässt für irgendwelchen "Blödsinn". Was nützt es mir den wenn der wallpaper gewechselt wird wenn das gerät momentan eh am schlafen ist.

Du musst deine Logik verändern.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

12.12.2014, 07:15:48 via App

@pep so wie ich das verstehe behebt das aber nicht das Problem oder? da die gecachten alarme/alarms ja immer noch da sind und auch erst ausgeführt werden wenn das Gerät aktiv ist und der Bildschirm an ist.
eine Möglichkeit wäre vielleicht zu gucken wieviel Zeit seit dem letzten Wechsel vergangen ist. wenn das unter einem bestimmten Limit ist soll er nicht wechseln.

@Mac ich hab doch gar kein wakeup drin es wird ja nicht gewechselt während das Gerät schläft. das Problem ist ja nur das wenn ein Alarm ausgelöst wird das Gerät aber inaktiv ist der Alarm nicht gelöscht wird sondern erst ausgeführt wird wenn es wieder aktiv ist.

— geändert am 12.12.2014, 07:16:00

Antworten
pepperonas
  • Forum-Beiträge: 434

12.12.2014, 09:40:25 via Website

Hmm, mit "online" meine ich nicht, dass es online im Netzwerk sein muss, sondern dass der Bildschirm entsperrt, bzw. das Gerät wach ist. Sprich du gibst nur dann das Signal, wenn das Gerät auch die Umsetzung/Umstellung durchführen kann.
Meiner Meinung nach Löst dein Ansatz das Problem zwar optisch, aber gleichzeitig könnten Speicherlücken entstehen, dann folgen meist unschöne Fehler (schwierig zu finden - da kaum mehr nachvollziehbar). Ob das bei deinem Programm wirklich der Fall ist, lässt sich auf die Ferne nur schwer beurteilen...

Open Source

Antworten
Gelöschter Account
  • Forum-Beiträge: 2.492

12.12.2014, 10:25:44 via Website

Ich hab es jetzt folgendermaßen gemacht:
Im Service

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
    if(VERSION.SDK_INT>=VERSION_CODES.KITKAT_WATCH){
        screenOn = powerManager.isInteractive();
    } else if(VERSION.SDK_INT<VERSION_CODES.KITKAT_WATCH){
        screenOn  = powerManager.isScreenOn();
    }
    if(screenOn = true){...}

jetzt wechselt er es nur wenn der Bildschirm aktiv ist.

Antworten