2010-02-17 7 views
0

J'ai une application Android. J'ai ajouté un filtre d'intention à l'une de mes activités, de sorte que si une URL est cliquée dans l'application du navigateur, mon activité peut être lancée. Ressemble à ceci:Briser la barre des tâches

<data android:host="www.mysite.com" android:scheme="http"></data> 

cela fonctionne bien. Le problème est que chaque fois que mon activité est lancée à partir du navigateur, une nouvelle instance de l'activité est créée, à l'intérieur de la tâche de l'application du navigateur, au lieu de recycler toute instance existante déjà présente dans le système.

Ceci est un problème pour moi parce que cette activité utilise un singleton. Si j'autorise l'existence de plus d'une instance de cette activité, je peux entrer dans des situations étranges où les deux instances sont en conflit lorsqu'elles tentent de partager le singleton. J'ai vérifié et je peux voir que bien que les instances d'activité puissent être dans des tâches séparées, elles partagent la même instance singleton. Une solution idéale pour moi serait si je pouvais mettre une instance préexistante de mon application au premier plan, et lancer ou reprendre l'activité cible dans l'instance préexistante de mon application qui fonctionne.

J'ai donc essayé ceci:

  1. enregistrer ci-dessus filtre pour pointer vers une activité fictive qui est juste un receveur.
  2. L'activité factice crée une intention de diffusion et tente de diffuser le message «créer moi» au système.
  3. L'activité cible réelle est définie pour écouter ce message de diffusion. Espérons que s'il y a déjà une instance de l'activité dans le système, elle viendra au premier plan. Si aucune instance n'est encore disponible, autorisez la création dans la tâche du navigateur.

Vous ne savez pas si cela a du sens. Mon objectif de base est de limiter l'activité à une instance dans le système. L'application est juste une application de médias sociaux qui a un état de connexion qui doit être préservé. Le singleton mentionné ci-dessus préserve cet état de connexion, donc je veux en avoir seulement un dans le système, au lieu de laisser courir plusieurs instances de connexion ce qui serait un casse-tête pour l'utilisateur.

Merci

Répondre

0

Vous pouvez définir le mode de lancement de l'activité à singleTop pour y parvenir.

android: launchMode Une instruction sur la façon dont l'activité doit être lancée. Quatre modes fonctionnent conjointement avec les indicateurs d'activité (constantes FLAG_ACTIVITY_ *) dans les objets Intent pour déterminer ce qui doit se produire lorsque l'activité est appelée pour gérer une intention. Ils sont: "standard" "singleTop" "singleTask" "singleInstance" Le mode par défaut est "standard".

https://developer.android.com/guide/topics/manifest/activity-element.html#lmode

+0

Salut sadboy, j'ai mis launchMode à singleTop, mais toujours pas d'effet. Je peux imprimer l'adresse mem de l'activité, et voir que chaque fois que le navigateur démarre une nouvelle instance, c'est une adresse mem différente, au lieu de simplement reprendre l'instance déjà en cours d'exécution. – user246114

+0

C'est bizarre. Le mettez-vous dans le manifeste d'application où vous déclarez l'activité? Et je suppose que vous avez essayé les autres modes de lancement comme singleinstance aussi? –

Questions connexes