J'ai un service exécutant un thread d'arrière-plan. Qu'est-ce que je voudrais faire est de montrer un AlertDialog initié à partir de mon fil de fond. Je sais que ce n'est pas la façon recommandée de notifier l'utilisateur et qu'il interrompt le flux de travail (car ils peuvent apparaître dans n'importe quelle application à tout moment ) mais c'est un moyen approprié pour mon cas d'utilisation.AlertDialog.show est silencieusement ignoré dans un service
Un gestionnaire enregistré avec le fil d'arrière-plan et affichant une notification Toast avec le gestionnaire fonctionne correctement. Mais après avoir basculé vers un AlertDialog rien ne se passe plus. Ma logique showDialog est ignorée silencieusement. Aucune fenêtre de dialogue n'apparaît, aucune entrée de journal. C'est un peu étrange car je m'attendrais à au moins une entrée de journal en disant que je fais quelque chose de mal ou quoi que ce soit.
Y a-t-il des limitations pour afficher un AlertDialog initié à partir d'un thread d'arrière-plan de service ? Certaines personnes semblent recommander une activité sur le thème de Dialog pour obtenir un comportement similaire.
Toute clarification ou aide pour le faire fonctionner est grandement appréciée!
Yves
Cela semble faire l'affaire.Apparemment, il est également possible d'avoir une activité qui affiche un AlertDialog dans la méthode onCreate. Le seul problème est que nous devons commencer une nouvelle tâche ce qui signifie que nous avons une nouvelle pile d'activités et que nous terminons le dialogue avec DialogActivity. This.finish() ne retourne pas à ma dernière tâche. Y a-t-il une solution de contournement connue pour obtenir ce comportement? – Yves
Quel est le problème avec mon approche? Lorsque vous quittez il ne reviendrait pas? – Emmanuel
Votre approche est complètement correcte. Mon application regroupe le service et une activité de contrôleur pour le démarrer/l'arrêter. Par exemple, je démarre le service via l'activité du contrôleur, naviguez vers le navigateur, puis un AlertDialog apparaît. Jusqu'ici tout va bien. Maintenant, lors de la fermeture de la boîte de dialogue (DialogActivity.this.finish();) je m'attendrais à revenir au navigateur, mais l'activité du contrôleur apparaît à la place. La solution ici est de marquer l'activité dans le manifeste avec l'attribut android: taskAffinity = "" pour le rendre complètement indépendant de l'activité du contrôleur et pour obtenir ma propre pile vide. – Yves