Comment utiliser l'intention de mettre à jour une activité?
-
19-09-2019 - |
Question
J'ai un service qui télécharge un fichier. Une fois le téléchargement terminé, je voudrais mettre à jour ma liste « fichiers téléchargés » dans mon Activity
, mais seulement si le Activity
est en cours d'exécution. Je ne veux pas le Activity
pour commencer si elle est pas déjà en cours d'exécution.
J'espérais que je pouvais le faire en faisant une nouvelle Intent
avec un certain drapeau spécial.
Quelqu'un a une idée comment je peux y parvenir? Un petit exemple de code peut-être?
La solution
Vous pouvez créer nouvelle instance de BroadcastReceiver et faire quelque chose le long de ces lignes sur votre méthode onResume () de l'activité:
registerReceiver(myReceiver, new IntentFilter(DownloadService.ACTION_FILE_DOWNLOADED));
Après cela, remplacer la méthode OnReceive () de myReceiver pour appeler une fonction qui met à jour le composant que vous voulez:
@Override
public void onReceive(Context context, Intent intent) {
...
updateViewWithData(service.getNewFileData());
...
}
Sur votre méthode OnPause () de l'activité, tout désenregistrer le récepteur:
unregisterReceiver(myReceiver);
J'espère que cela vous aidera, ne hésitez pas à demander s'il y a quelque chose pas clair.
Autres conseils
La bonne façon de le faire est de lier votre activité « Les fichiers téléchargés » au service. Lorsque vous liez le service, dans la fonction onServiceConnected, enregistrer un rappel Binder. Ensuite, chaque fois que vous avez de nouvelles données disponibles, les appels de service juste que le rappel. Si l'activité ne fonctionne pas, la liste de rappel sur le côté service sera vide, donc il ne sera pas informer votre activité.
Pour un exemple de cette approche, jetez un oeil à RemoteService.java dans Android SDK:
samples \ ApiDemos \ src \ com \ exemple \ android \ api \ app \