Android — Comment gérer correctement onPause/onResume méthodes?
J'ai une application qui démarre la lecture des sons et commence/reprend le gameplay dans le onResume() la méthode, mais ce que je constate, c'est que si mon appli a été la dernière exécution de l'application quand je mets le téléphone en veille (écran éteint), et je viens d'appuyer sur le bouton Menu pour vérifier l'heure, puis le téléphone commence à jouer le jeu et les sons en arrière-plan (l'application n'est pas visible, seul l'écran avec la date/heure de l'est, encore onResume doit avoir été appelé dans mon application). Que dois-je faire ici? Est-il un moyen de discerner ce qui est de la réactivation de l'application, puis ajouter une instruction conditionnelle qui commence seulement le jeu lorsque l'application est réellement visible?
Voici un extrait de mon onResume:
@Override
protected void onResume()
{
mySaveGame = Utilities.loadSavegame(this);
//check the savegame
if(mySaveGame!=null)
{
//start game using savegame values
this.startFromSavedGame(mySaveGame.getIsLevelComplete());
}
else
{
//run the 1st-run components
this.startFirstRun();
}
super.onResume();
}
La seule chose que je peux penser à faire pour empêcher le jeu de démarrer à chaque fois que l'écran est allumé (même lorsque l'application n'est pas visible) est de mettre cette.finish() comme la dernière ligne onPause()... mais qui vous oblige à redémarrer l'application chaque fois que vous voulez revenir en arrière parce que la precess lui-même a été tué (ce qui est bien parce que mon onPause enregistre des données persistantes, mais ce n'est pas une solution élégante).
S'il vous plaît aider.
OriginalL'auteur RyanM | 2010-04-22
Vous devez vous connecter pour publier un commentaire.
Avez-vous envisagé de changement de
onStart()
etonStop()
, plutôt que deonResume()
etonPause()
?Hmmmm... ça sonne comme l'écran de verrouillage n'est pas bien d'être considéré comme ayant le premier plan. Quel appareil vous de tester ce sur?
Je suis en utilisant un T-Mobile G1 (Android 1.6 firmware stock).
Je peux confirmer que le T-Mobile G1 (Android 1.6) et le Nexus One (Android 2.1) fera une pause dans les applications en arrière-plan lorsque l'écran est éteint pour ne reprendre que l'application lorsque l'écran de verrouillage s'affiche après l'écran est allumé. Cependant,
onStop()
etonStart()
ne sont pas appelés. Par conséquent, vous devez modifier votre code pour utiliseronStop()
etonStart()
plutôt queonPause()
etonResume()
.Ouais, il n'est pas question de l'écran de verrouillage, tel que mis en œuvre, confond les questions. Une solution de contournement hack vous pouvez essayer est de
registerReceiver()
pourACTION_SCREEN_OFF
. À ce point, de la pop unAlertDialog
, quelque chose à l'effet de "Jouer suspendu" avec "reprendre" et "fermer" boutons. Ils appuyez sur "reprendre", et vous le feu de la logique ordinaire, vous faire maintenant, dansonStart()
. Ils appuyez sur "fermer", et vousfinish()
votre activité. Ou quelque chose comme ça.OriginalL'auteur CommonsWare
J'ai eu le même problème (j'ai eu mon lecteur de musique resume/pause à
onResume()/onPause()
) et la meilleure solution que j'ai trouvé est de mettre en pause et reprendre mon activité quand elle est sur le premier plan de laquelle vous pouvez obtenir avecpublic void onWindowFocusChanged (boolean possèdefocus)
de rappel.Edit: Ce, dans une ancienne et un peu mauvaise réponse - réponse correcte est décrit dans les Développeurs Android Blog: faire de jeux android jouer de nice
Depuis mon post, Google a fourni une meilleure alternative qui s'occupe de cette question correctement sur tous les appareils/firmwares, j'ai édité mon premier post ci-dessus.
OriginalL'auteur MichalisB