J'aimerais connaître le meilleur modèle pour le scénario suivant :
1) ActivityA
contient un bouton qui réinitialise les données de l'application lorsqu'il est pressé.
2) IntentServiceA
, IntentServiceB
y ActivityB
veulent être informés de l'événement. IntentServiceA
efface la base de données de l'application, IntentServiceB
supprime certains fichiers du stockage interne et ActivityB
si elle est arrêtée, supprimer tous les messages en attente d'un interne donné Handler
Voici ma conception actuelle de la situation :
1) ActivityA
utilise un sendBroadcast()
avec une action spécifique (disons ACTION_RESET_DATA) pour notifier l'évènement
2) ActivityB
a un privé intérieur BrodcastReceiver
qui est enregistré sur le onCreate()
car elle doit répondre à l'action même lorsque l'activité est arrêtée.
3) IntentServiceA
y IntentServiceB
ont également BroadcastReceivers
mais ils sont déclarés comme public static
et déclarés dans AndroidManifest.xml. De cette façon, ils sont accessibles sans aucun enregistrement sur le service correspondant. Tous les BroadcastReceiver
est de lancer le service externe qui, à son tour, vérifie l'action de l'intention par rapport à ACTION_RESET_DATA dans l'interface utilisateur. onHandleIntent()
méthode
Bien que cela fonctionne, cette approche présente deux problèmes principaux :
- Il existe un filtre d'intention déclaré sur le manifeste qui n'est pas accessible aux autres applications. En fait, les deux
IntentService
et intérieurBroadcastReceiver
sont déclarés avecexported="false"
- Je ne peux pas utiliser
LocalBroadcastManager
car il n'est pas compatible avecBroadcastReceivers
déclaré dans AndroidManifest.xml. Ce serait souhaitable puisque la diffusion en question est interne à mon application.
Je pourrais juste enlever le BroadcastReceiver
des deux IntentServices
et les démarrer manuellement via startService
de ActivityA
et laisser ActivityB
intacte, mais que se passe-t-il si le nombre de services augmente ? Je devrais inclure du code pour les démarrer tous ? En fait, j'ai quelques autres cas comme celui-ci dans mon application et je ne suis pas sûr de la façon de les gérer correctement.
Des conseils ?