Comment gérer le cycle de vie de l'activité Android sur réveil (application d'alarme)
-
27-09-2019 - |
Question
Je vais avoir quelques problèmes avec une application d'alarme que je développe.
La première chose que je pense est un peu bizarre est que quand une alarme se réveille et de le téléphone. Ces choses happend.
oncreate
onResume
OnPause
onResume
Pourquoi sont-ils exécutés dans cet ordre? Les deux derniers ne devraient pas être appelés? Et voici ce qui me fait de gros problèmes, parce que quand je presse la maison ou sur le téléphone, OnPause est exécuté, que je veux appeler finish () à partir. Et que les travaux de partie comme il se doit, mais cela ne fonctionne pas lorsque le téléphone se réveille UPP de bacause du sommeil de l'appel OnPause ...
Toutes les idées?
La solution
Je vous suggère de regarder comment gère les événements de l'application d'alarme officielle: https://android.googlesource.com/platform/packages/apps/DeskClock
Autres conseils
J'ai aussi un problème similaire: je crée une activité et un service en arrière-plan. Lorsque le service reçoit des données sur le net, il apportera-la activité. Tout fonctionne bien jusqu'à ce que l'activité dans la phase onStop et l'écran devient noir. Quand j'ai cette situation et je demande l'activité de redémarrer, je:
onRestart onStart pour résumer OnPause onNewIntent onResume
Comme vous pouvez le voir, j'ai un onResume, OnPause et un autre onResume et l'activité est venu à l'utilisateur.
Il semble que est parce que nous utilisons une activité singleTop ou SingleInstance (apparaissent peut-être sur singleTask). Le problème est que lorsque vous envoyez un intention à une activité singleTop déjà créé, votre nouvelle méthode la onNewIntent () actif intention. de l'API, vous pouvez voir que:
L'activité sera toujours une pause avant de recevoir une nouvelle intention, vous peut compter sur onResume () étant appelée après cette méthode.
alors peut-être c'est pourquoi vous recevez des appels onResume-OnPause-onResume.
Toutefois, c'est un comportement étrange!
Voulez-vous vraiment appeler finish () dans OnPause ()? OnPause () est appelée lorsque l'activité en cours est pas au premier plan plus. Peut-être que vous voulez appeler finish () dans votre méthode onStop () à la place. Voir Activity lifecycle
pour plus de détails.