Si tratta di un comportamento apparentemente semi-documentato, se i commenti di Dianne Hackborn su un post G + costituiscono "documentati": https://plus.google.com/+AndroidDevelopers/posts/94jCkmG4jff ma i servizi in primo piano associati a un'icona di notifica dovrebbe essere permesso di mantenere un blocco di scia durante la modalità doze.Blocco sveglia disattivato in foreground service con modalità Doze - nuove ottimizzazioni della batteria in Android M
Sembra che questo non sia valido quando si dispone di un'attività principale oltre al servizio di primo piano.
devo creare un'implementazione minimale che lo dimostra: https://github.com/petrnalevka/dozetest/blob/master/src/com/urbandroid/doze/DozeService.java
Il problema può essere riprodotto su
Android M, MRA58K Nexus 5 e MRA58N Nexus 6
Il mio servizio in primo piano ha una notifica associato e Tengo un parziale scia di blocco. Sfortunatamente la modalità Doze prende il sopravvento e il mio scia è rotto. Sono stato in grado di prevenirlo solo con un opt-out dall'ottimizzazione della batteria o lasciando l'attività principale.
Credo che questo sia un bug in Android poiché non vi è alcun motivo per cui i servizi in primo piano dovrebbero mantenere il blocco della sveglia ma non se hanno un'attività in alto.
sto mettendo questo problema in modo da anche Ho già segnalato questo su Androdi issue tracker qui https://code.google.com/p/android/issues/detail?id=193802 al fine di trovare soluzioni alternative come questa è una caratteristica crutial al fine di non bisogno dei REQUEST_IGNORE_BATTERY_OPTIMIZATIONS che a quanto pare solo significare REQUEST_REMOVAL_FROM_PLAYSTORE_BY_GOOGLE al momento .
Ecco come sono stato in grado di riprodurre il problema utilizzando ADB grazie ai suggerimenti da + Dianne Hackborn:
Sembra che quando io continuo a un'attività in primo piano, pur avendo anche il servizio di primo piano in esecuzione la mia app è riconosciuto dal gestore potere come:
PARTIAL_WAKE_LOCK 'Doze lock' DISABLED (uid=10112, pid=24649, ws=null)
ProC# 0: fore F/A/TS trm: 0 24649:com.urbandroid.doze/u0a112 (top-activity)
Se premo a casa e lasciare l'attività mi trovo in stato di:
PARTIAL_WAKE_LOCK 'Doze lock' (uid=10112, pid=24649, ws=null)
ProC# 4: prcp F/S/SF trm: 0 24649:com.urbandroid.doze/u0a112 (fg-service)
Poiché è in esecuzione un servizio, potrebbero esserci alcune trasmissioni che è possibile monitorare per determinare quando lo schermo si sta spegnendo, nel qual caso puoi usare 'startActivity()' per far apparire la schermata principale (cioè spostarti sullo sfondo). Non so se 'ACTION_SCREEN_OFF' è la trasmissione corretta da ascoltare o meno. – CommonsWare
Mille grazie stavo pensando una direzione simile. La schermata principale è un buon candidato con l'intento standard di farla apparire. Testerà questo e riferirò –
Ho provato a richiamare un intento per la schermata iniziale suScreenOff e l'intenzione di riportare la mia attività suScreenOn e in base ai test adb sembra funzionare bene. Sorprendentemente non sembra strano su Nexus 5, il programma di avvio lampeggia velocemente quando lo schermo viene messo su ON. Farò dei veri test in modalità doze ora che richiederanno alcune ore ... ho solo paura se questo sarà abbastanza affidabile nella pratica. –