web-dev-qa-db-fra.com

Comment puis-je tuer une activité lorsque le bouton Retour est enfoncé?

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?

31
Shaun

ajoutez ceci à votre activité

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK))
    {
        finish();
    }
    return super.onKeyDown(keyCode, event);
}
39
ingsaurabh

Méthode Override simple onBackPressed:

    @Override
    public void onBackPressed() {
            super.onBackPressed();
            this.finish();
    }
70
Dhiral Pandya
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.

14
PhuongNguyen

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.

7
EboMike

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.

5
Aman Alam