Come gestire Android l'attività del ciclo di vita sulla sveglia (app allarme)
-
27-09-2019 - |
Domanda
Sto avendo un paio di problemi con un app di allarme sto sviluppando.
La prima cosa che penso è un po 'strana è che quando un allarme va di e si sveglia il telefono in su. Queste cose accadesse.
OnCreate
onResume
OnPause
onResume
Perché corrono in questo ordine? Gli ultimi due non dovrebbe essere chiamato? E questo è ciò che è mi provoca grossi guai, perché quando si preme a casa o tornare al telefono, onPause viene eseguito, che voglio chiamare finitura () da. E che le opere di parte come dovrebbe, ma che non funziona quando il telefono si sveglia UPP da bacause sonno della chiamata onPause ...
Tutte le idee?
Soluzione
vorrei suggerire si guarda a come l'applicazione ufficiale di allarme gestisce gli eventi: https://android.googlesource.com/platform/packages/apps/DeskClock
Altri suggerimenti
Ho anche avuto un problema simile: creo un'attività e di un servizio in background. Quando il servizio riceve alcuni dati dalla rete che porterà-up l'attività. Tutto funziona bene fino a quando l'attività in nella fase onStop e lo schermo diventa nero. Quando ho questa situazione e chiedo l'attività di riavvio, ho:
onRestart onStart onResume onPause onNewIntent onResume
Come potete vedere ho un onResume, onPause e un altro onResume e l'attività è venuto per l'utente.
Sembra che è perché usiamo un singleTop o SingleInstance attività (forse apparire anche sul singleTask). Il problema è che quando si invia l'intento di un già creato singleTop attività, il vostro nuovo metodo attivo intento onNewIntent (). dal API si può vedere che:
Un'attività sarà sempre in pausa prima di ricevere un nuovo intento, in modo da può contare su onResume () essendo chiamato dopo questo metodo.
quindi forse è per questo che si ricevono chiamate onResume-onPause-onResume.
Tuttavia, questo è un comportamento strano!
Vuoi davvero chiamare finitura () in onPause ()? onPause () viene chiamato quando l'attività corrente non è in primo piano più. Forse si vuole chiamare finitura () nel metodo onStop (), invece. Per i dettagli, consultare la Activity lifecycle
.