J'ai une activité qui, lorsqu'elle démarre, charge une image sur Internet. Dans un effort pour économiser de la mémoire, lorsque l'activité est laissée par le bouton retour enfoncé, je veux que l'activité vide toutes les données, c'est-à-dire se débarrasse de toutes les chaînes et images qui s'y trouvent. J'ai pensé que la meilleure façon de le faire était de simplement tuer l'activité.
Eh bien, je n'arrive pas à comprendre le rappel lorsque vous appuyez sur le bouton Retour. J'ai donc essayé d'utiliser les rappels onPause()
et onStop()
pour la tâche, mais dans les deux cas, forcez la fermeture de mon application. Voici le code:
public void onPause() {
this.finish();
}
public void onStop() {
finish();
}
J'ai essayé plusieurs variantes de cela, mais aucune ne semblait fonctionner. Des idées?
ajoutez ceci à votre activité
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
finish();
}
return super.onKeyDown(keyCode, event);
}
Méthode Override simple onBackPressed:
@Override
public void onBackPressed() {
super.onBackPressed();
this.finish();
}
public boolean onKeyDown(int keycode, KeyEvent event) {
if (keycode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(true);
}
return super.onKeyDown(keycode, event);
}
Mon application s'est fermée avec le code ci-dessus.
Tout d'abord, finish()
ne détruit pas votre processus et ne libère pas de mémoire. Il supprime simplement l'activité de la pile d'activités. Vous auriez besoin de tuer le processus, qui est répondu dans un tas de questions (car cela est posé plusieurs fois).
Mais la bonne réponse est - Ne le faites pas. l'OS Android libérera automatiquement de la mémoire quand il en aura besoin). En ne libérant pas de mémoire, votre application démarrera plus rapidement si l'utilisateur y revient.
Veuillez voir ici pour un excellent article sur le sujet.
Eh bien, si vous étudiez la structure du fonctionnement du cycle de vie de l'application, ici , alors vous saurez que onPause()
est appelée lorsqu'une autre activité gagne le focus, et onStop()
est appelée lorsque l'activité n'est plus visible.
D'après ce que j'ai appris, vous ne pouvez appeler finish()
qu'à partir de l'activité active et/ou focalisée. Si vous appelez finish()
à partir de la méthode onPause()
, cela signifie que vous l'appelez lorsque l'activité n'est plus active. une exception est donc levée.
Lorsque vous appelez finish()
depuis onStop()
alors l'activité est envoyée en arrière-plan, donc ne sera plus visible, alors cette exception.
Lorsque vous appuyez sur la touche back
, onStop()
est appelée.
Très probablement, Android fera automatiquement pour vous ce que vous voulez faire actuellement.