D'éviter que plusieurs instances de mon application Android composé d'une seule activité
J'ai une application Android qui est composé à partir d'un seul Activity
.
Comment puis-je assurer qu'une seule instance de mon application (== Activity
) existe dans un temps donné?
Je suis arrivé à une situation dans laquelle j'ai réussi à ouvrir plusieurs instances de mon application en cliquant sur l'icône de l'application plusieurs fois (ce qui n'est pas de reproduire tout le temps).
OriginalL'auteur Daniel L. | 2013-05-22
Vous devez vous connecter pour publier un commentaire.
changer votre manifeste comme ceci:
inclure la
android:launchMode="singleTask"
et il ne sera pas possible d'avoir plusieurs instances de votre Activité lancée en même temps. Voir l'activité de documentation pour plus de."singleInstance"
?lire la différence entre les deux dans les docs et de décider ce qui convient à votre cas d'utilisation, mieux... Sans rien savoir de plus au sujet de votre demande, je ne peux pas répondre à ça.
android:launchMode="singleTask" ne travaille pas " android:launchMode="instance unique" fonctionne
OriginalL'auteur
La accepté de répondre sert son but, mais ce n'est pas la meilleure façon de le faire.
Au lieu de cela, je recommande d'utiliser un statique
AtomicInteger
à l'intérieur de chacune de vos activités comme:Alors, quel est le problème avec la accepté de répondre?
Déclarant que votre activité doit être lancé à l'aide de la
singleInstance
mode commence à jouer avec le comportement par défaut pour les activités et les tâches, ce qui peut avoir des effets indésirables.La Android docs recommandons de ne pas perturber le fonctionnement de ce comportement lorsque c'est nécessaire (c'est pas dans ce cas):
Il le devrait. C'est ce que je l'utilise sans problème. D'accord, cela a été une couple d'années... Est-il possible que vous avez des problèmes ailleurs dans votre code? Essayez d'éliminer cette possibilité: Démarrer un nouveau projet avec deux activités de base que seul l'affichage du texte ("Activité 1" & "Activité 2") . Puis de mettre en œuvre cette méthode, & test dans cet environnement de contrôle pour voir si elle donne encore d'étranges questions comme ça.
Mon cas d'utilisation est de commencer mon application à partir de la 3e partie de l'app avec l'Intention.ACTION_VIEW l'action, alors que mon application fonctionne en arrière-plan. Bon, je vais l'essayer sur certains trivial code pour voir si ça peut fonctionner.
Ce doit être la accepté de répondre. Le singleTop launchMode causé beaucoup de problèmes dans mon application lors de la réception de notifications.
Cette réponse a résolu mon problème! Oublié atomique entier à cet effet, cela fonctionne fantastique
OriginalL'auteur
J'ai trouvé les utilisateurs de mon application ont été à court de mémoire et j'avais du mal à savoir pourquoi. Tout en essayant de le faire j'ai trouvé que je pouvais ouvrir plusieurs instances de mon appli mon cliquant plusieurs fois sur l'icône puis la Maison, puis l'icône, puis la Maison.. j'ai pu voir l'utilisation de la mémoire va up et up jusqu'à ce que finalement l'application s'est écrasé. Avant, il s'est écrasé je pourrais cliquez sur le menu option et l'instance précédente est venu à l'avant, ce qui allait se passer autant de fois que je l'avais lancé l'application.
Ma solution était d'ajouter
android:launchMode="singleInstance"
pour le manifeste. Depuis lors, je n'ai pas été en mesure d'ouvrir plus d'une instance ou le plantage de l'application.OriginalL'auteur