2012-07-30 9 views
14

Sembra che se un'attività è in primo piano mentre lo schermo del telefono è bloccato, eventi broadcast e/o wakelock causeranno il richiamo di quel dato evento, se sono stati previsti per la tua app o no. Ciò accade anche se non interagisci con il telefono in alcun modo. Non sbloccarlo, non toccarlo, non fare nulla e il tuo onResume verrà chiamato più e più volte senza una corrispondente onPause.onResume che viene chiamato ripetutamente mentre lo schermo del telefono è bloccato

Abbiamo notato questo perché registriamo un evento di monitoraggio su Riduci e abbiamo notato che alcuni dispositivi hanno ottenuto un TON di questi eventi onResume. Siamo stati in grado di riproporsi e abbiamo notato che accadeva ogni volta che un'app sembrava ricevere un intento (come SugarSync, Google Voice o il listener di posizione passivo nella nostra app).

Abbiamo notato questo sul Galaxy Nexus e Galaxy S3 con ICS. È interessante notare che non è stato possibile riprodurre il problema su Jelly Bean.

Qualcuno ha qualche indicazione su cosa potrebbe accadere qui?

+1

Lo stesso qui. Galaxy Tab ICS. –

+2

Yup, Nexus 5 in esecuzione 4.4.4 chiamando 'onResume()' ogni 200 ms quando lo schermo è spento. –

risposta

16

Ho osservato lo stesso comportamento su diversi telefoni che eseguono Gingerbread e ICS. La tua descrizione corrisponde a ciò che ho visto. Per qualche motivo, l'attività ha attivato onResume, anche se lo schermo è ancora bloccato. Forse riprende a fare qualche evento a livello di sistema operativo?

Il miglior regia dalla documentazione Android sembra essere da questo punto nella definizione onResume:

Tenete a mente che onResume non è il migliore indicatore che la vostra attività è visibile per l'utente; una finestra di sistema come il blocco della tastiera potrebbe essere in primo piano. Usa onWindowFocusChanged (booleano) per sapere con certezza che la tua attività è visibile all'utente (ad esempio, per riprendere un gioco).

Durante lo sviluppo dell'attività, tenere presente che onResume può essere chiamato più volte in rapida successione, senza alcuna interazione diretta dell'utente. Quindi, in pratica, non inserire alcun codice in onResume che può essere eseguito una sola volta o progettato per attivare una risposta immediata da un utente. Devi decidere da solo se onResume o onWindowFocusChanged funziona meglio per quello che vuoi fare.

Problemi correlati