En appuyant sur le bouton de retour, j'aimerais que mon application passe à l'état arrêté, plutôt qu'à l'état détruit.
Dans les documents Android, il indique:
... toutes les activités n'ont pas le comportement qu'elles sont détruites lorsque vous appuyez sur BACK. Lorsque l'utilisateur commence à jouer de la musique dans l'application Musique, puis appuie sur RETOUR, l'application remplace le comportement normal du dos, empêchant l'activité du lecteur d'être détruite et continue à jouer de la musique, même si son activité n'est plus visible
Comment répliquer cette fonctionnalité dans ma propre application?
Je pense qu'il doit y avoir trois possibilités ...
Capturez le bouton de retour, appuyez sur (comme ci-dessous), puis appelez la ou les méthodes appelées par le bouton d'accueil.
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { Log.d(this.getClass().getName(), "back button pressed"); } return super.onKeyDown(keyCode, event); }
Capturez la pression sur le bouton Retour, puis usurpez une pression sur le bouton Accueil.
Capturez la pression sur le bouton de retour, puis démarrez une activité de l'écran d'accueil, mettant effectivement l'activité de mon application à l'état arrêté.
Edit: je connais les services et j'en utilise un dans l'application à laquelle ce problème est lié. Cette question concerne spécifiquement le fait de mettre l'activité en état d'arrêt plutôt que l'état détruit en appuyant sur le bouton de retour.
Réponses:
La plupart du temps, vous devez créer un service pour effectuer quelque chose en arrière-plan, et votre visible
Activity
le contrôle simplementService
. (Je suis sûr que le lecteur de musique fonctionne de la même manière, donc l'exemple dans les documents semble un peu trompeur.) Si c'est le cas, alors vousActivity
pouvezfinish
comme d'habitude et leService
sera toujours en cours d'exécution.Une approche plus simple consiste à capturer la
Back
pression sur le bouton et à appeler moveTaskToBack (true) comme suit:Je pense que l'option préférée devrait être qu'une activité se termine normalement et puisse se recréer, par exemple en lisant l'état actuel d'un service si nécessaire. Mais
moveTaskToBack
peut être utilisé comme une alternative rapide à l'occasion.REMARQUE : comme l'a souligné Dave ci-dessous, Android 2.0 a introduit une nouvelle
onBackPressed
méthode et ces recommandations sur la façon de gérer le bouton Retour.la source
Utilisez le code suivant:
la source
Si vous voulez attraper le bouton Retour, jetez un œil à ce post sur le blog des développeurs Android . Il couvre la manière la plus simple de le faire dans Android 2.0 et la meilleure façon de le faire pour une application qui s'exécute sur 1.x et 2.0.
Cependant, si votre activité est arrêtée, elle peut quand même être supprimée en fonction de la disponibilité de la mémoire sur l'appareil. Si vous souhaitez qu'un processus s'exécute sans interface utilisateur, vous devez créer un fichier
Service
. La documentation dit ce qui suit sur les services:Ceux-ci semblent adaptés à vos besoins.
la source
essayez de remplacer le vide
onBackPressed()
défini dans la classe android.app.Activity.la source
si cela aide quelqu'un d'autre, j'ai eu une activité avec 2 dispositions que j'ai activées et désactivées pour la visibilité, en essayant d'émuler une sorte de structure page1> page2. s'ils étaient à la page 2 et appuyaient sur le bouton de retour, je voulais qu'ils reviennent à la page 1, s'ils appuyaient sur le bouton de retour à la page 1, cela devrait toujours fonctionner normalement. C'est assez basique mais ça marche
j'espère que ça aide quelqu'un, bravo
la source
Exemple de travail ..
Assurez-vous de ne pas appeler super.onBackPressed ();
De cette façon, votre bouton Retour agit comme un bouton Accueil. Cela ne termine pas votre activité, mais prenez-la en arrière-plan
Deuxième façon est d'appeler
moveTaskToBack(true);
dansonBackPressed
et assurez - vous d'enleversuper.onBackPressed
la source
Encore mieux, que diriez-vous de OnPause () :
Appelé dans le cadre du cycle de vie d'une activité lorsqu'une activité passe en arrière-plan, mais n'a pas (encore) été supprimée. L'homologue de onResume ().
Lorsque l'activité B est lancée devant l'activité A, ce rappel sera invoqué sur A. B ne sera pas créé avant le retour de A onPause (), alors assurez-vous de
enter code here
ne rien faire de long ici.Ce rappel est principalement utilisé pour enregistrer tout état persistant que l'activité modifie et pour s'assurer que rien n'est perdu s'il n'y a pas suffisamment de ressources pour démarrer la nouvelle activité sans d'abord tuer celle-ci.
C'est également un bon endroit pour faire des choses comme arrêter des animations et d'autres choses qui consomment une quantité notable de CPU afin de passer le plus rapidement possible à l'activité suivante, ou pour fermer des ressources qui sont un accès exclusif comme la caméra.
la source
Remplacez onBackPressed () après Android 2.0. Tel que
la source
J'ai essayé toutes les solutions ci-dessus, mais aucune n'a fonctionné pour moi. Le code suivant m'a aidé lors de la tentative de retour à MainActivity d'une manière appelée onCreate:
Intent.FLAG_ACTIVITY_CLEAR_TOP est la clé.
la source
J'ai utilisé @Mirko N. répondeur en utilisant le nouveau Custom EditText
Ensuite, définissez les données de votre activité
Je vous remercie.
la source