75 votes

Écran d’accueil application et lancement étroite sur Android

J’ai deux activités différentes. Le premier lance l’autre. Dans l’activité, j’ai appeler `` afin de forcer la fermeture de l’application, mais la première activité est automatiquement affichée au lieu de la demande de retour à l’écran d’accueil. Comment puis-je éviter ce problème et téléchargez l’application pour revenir à l’écran d’accueil ?

88voto

Dave Webb Points 90034

Réponse courte: appel moveTaskToBack(true) sur votre Activity au lieu de System.exit(). Cela permet de masquer votre application jusqu'à ce que l'utilisateur souhaite utiliser de nouveau.

La plus longue réponse commence par une autre question: pourquoi voulez-vous tuer votre application?

Le système d'exploitation Android poignées de gestion de la mémoire et des processus, et ainsi de suite donc, mon conseil est de simplement laisser Android vous inquiéter à ce sujet pour vous. Si l'utilisateur veut quitter votre application, ils peuvent appuyer sur le bouton Home et votre demande sera effectivement disparaître. Si le téléphone a besoin de plus de mémoire, plus tard, l'OS va mettre fin à votre application.

Aussi longtemps que vous êtes de répondre aux événements du cycle de vie de manière appropriée, ni vous, ni l'utilisateur a besoin de soins si votre demande est toujours en cours d'exécution ou non.

Donc, si vous voulez cacher votre demande, communiquez moveTaskToBack() et laissez Android décider quand le tuer.

53voto

jordi Points 437

La façon la plus simple pour y parvenir est donnée ci-dessous (sans incidence sur Android native de la gestion de la mémoire. Il n'y a pas de processus de meurtre).

  1. Lancement d'une activité à l'aide de cette Intention:

    Intent intent = new Intent(this, FinActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    finish();
    
  2. Dans l'activité cible FinActivity.class, appel finish() en onCreate.

Étapes Expliquées:

  1. Vous créez une intention qui efface toutes les autres activités (FLAG_ACTIVITY_CLEAR_TOP) et de supprimer l'activité en cours.

  2. L'activité se détruit. Une alternative est que vous pouvez faire un écran de démarrage dans finActivity. Cette option est facultative.

45voto

Romain Guy Points 57114

Vous devriez penser vraiment ne pas quitter l’application. Ce n’est pas comment Android apps travaillent habituellement.

20voto

Android a un mécanisme en place pour fermer une application en toute sécurité par sa documentation. Dans la dernière Activité qui est sorti (généralement la principale Activité est d'abord venu jusqu'au démarrage de l'application) il suffit de placer un couple de lignes dans le onDestroy() la méthode. L'appel Système.runFinalizersOnExit(vrai) s'assure que tous les objets seront finalisés et les ordures collectées lors de l'application se ferme. Par exemple:

public void onDestroy() {
    super.onDestroy();

    /*
     * Notify the system to finalize and collect all objects of the
     * application on exit so that the process running the application can
     * be killed by the system without causing issues. NOTE: If this is set
     * to true then the process will not be killed until all of its threads
     * have closed.
     */
    System.runFinalizersOnExit(true);

    /*
     * Force the system to close the application down completely instead of
     * retaining it in the background. The process that runs the application
     * will be killed. The application will be completely created as a new
     * application in a new process if the user starts the application
     * again.
     */
    System.exit(0);
}

Enfin Android n'avisera pas une demande de la MAISON clé de l'événement, de sorte que vous ne pouvez pas fermer l'application lorsque la MAISON est enfoncée. Android se réserve le HOME clé de l'événement à lui-même, de sorte qu'un développeur ne peut pas empêcher les utilisateurs de quitter leur application.

9voto

Samuh Points 16564

Vous pouvez également spécifier noHistory = "true" dans la balise pour la première activité ou la fin de la première activité dès le début de la seconde(comme le dit David).

Autant que je sache, "force close" tue le processus qui héberge la JVM dans lequel votre application s'exécute et Système.exit() met fin à la JVM de l'exécution de votre instance de l'application. Les deux sont en forme de brusques arrêts et n'est pas souhaitable pour l'application normale de l'écoulement.

Tout comme d'intercepter les exceptions pour couvrir la logique des flux qu'un programme pourrait entreprendre, n'est pas souhaitable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X