web-dev-qa-db-fra.com

Quand est-il nécessaire d'utiliser Singletop LaunchMode dans un fichier Android widget ou application?

Je viens d'être brûlé par un widget. Je pouvais voir la cause du problème, mais je ne pouvais pas déterminer pourquoi ou sa solution. Mon widget émettait une recherche (SearchManager) et l'activité a lancé une boîte de dialogue de recherche, mais lorsqu'il est renvoyé à mon widget, il a créé une autre référence au widget (c'est-à-dire que l'identifiant de thread-ID était identique, mais le widget-ID changé de 65 à 0).

Cela m'a amené à croire qu'une nouvelle instance était créée et j'ai recherché la documentation pour les paramètres qui s'appliqueraient au problème. Finalement, je suis tombé sur le Android:launchMode="singleTop" Et dès que je l'ai mis dans l'androidmanifest, alto! Mon widget a fonctionné.

Cela m'a pris la meilleure partie de deux jours pour déboguer.

Y a-t-il d'autres situations ou y a-t-il une réponse plus techniquement correcte à mon problème?

27
mobibob

J'ai fait plus de lecture dans Android Docs - Je pourrais passer une vie à la vie à lire leurs documents et trouver un nouveau détail subtil qui brise mon cerveau :) Cela explique mes multiples instances que je ne m'attendais pas, Cependant, j'ai configuré pour se produire.

Android Doc sur la définition d'activité pour AndroidManifest.xml

Les modes "standard" et "singletop" diffèrent les uns des autres en un seul respect: chaque fois qu'il y a une nouvelle intention d'une activité "standard", une nouvelle instance de la classe est créée pour répondre à cette intention. Chaque instance gère une seule intention. De même, une nouvelle instance d'une activité "SingleTop" peut également être créée pour gérer une nouvelle intention. Toutefois, si la tâche cible a déjà une instance existante de l'activité en haut de sa pile, cette instance recevra la nouvelle intention (dans un appel ONNewIntent ()); Une nouvelle instance n'est pas créée. Dans d'autres circonstances - par exemple, si une instance existante de l'activité "SingleTop" est dans la tâche cible, mais pas en haut de la pile, ou si elle est au sommet d'une pile, mais pas dans la tâche cible - a Une nouvelle instance serait créée et poussée sur la pile.

38
mobibob