En train de porter une application iPhone sur Android, je recherche le meilleur moyen de communiquer au sein de l'application. Les intentions semblent être la voie à suivre, est-ce la meilleure (seule) option? NSUserDefaults semble beaucoup plus léger que Intents en termes de performances et de codage.
Je devrais également ajouter que j'ai une sous-classe d'application pour l'état, mais je dois rendre une autre activité consciente d'un événement.
Réponses:
Vous pouvez essayer ceci: http://developer.android.com/reference/java/util/Observer.html
la source
Le meilleur équivalent que j'ai trouvé est LocalBroadcastManager qui fait partie du package de support Android .
À partir de la documentation de LocalBroadcastManager:
Lorsque vous l'utilisez, vous pouvez dire que an
Intent
est un équivalent à unNSNotification
. Voici un exemple:ReceiverActivity.java
Une activité qui surveille les notifications de l'événement nommé
"custom-event-name"
.SenderActivity.java
La deuxième activité qui envoie / diffuse des notifications.
Avec le code ci-dessus, chaque fois que vous
R.id.button_send
cliquez sur le bouton , une intention est diffusée et reçue parmMessageReceiver
inReceiverActivity
.La sortie de débogage devrait ressembler à ceci:
la source
NSNotificationCenter
, devrait être la réponse acceptée!Voici quelque chose de similaire à la réponse @Shiki, mais sous l'angle des développeurs iOS et du centre de notification.
Créez d'abord une sorte de service NotificationCenter:
Ensuite, vous aurez également besoin d'un type enum pour être sûr des erreurs de codage avec des chaînes - (NotificationType):
Voici l'utilisation (ajouter / supprimer des observateurs) par exemple dans les activités:
et voici enfin comment nous postons une notification à NotificationCenter à partir d'un service de rappel ou de repos ou autre:
ça y est, bravo!
la source
Bundle params
au lieu deHashMap
est plus pratique pour passer des paramètres de types différents. Il y a une bonne connexion entreIntent
etBundle
:intent.putExtras(params)
Vous pouvez utiliser ceci: http://developer.android.com/reference/android/content/BroadcastReceiver.html , ce qui donne un comportement similaire.
Vous pouvez enregistrer des destinataires par programme via Context.registerReceiver (BroadcastReceiver, IntentFilter) et il capturera les intentions envoyées via Context.sendBroadcast (Intent).
Notez cependant qu'un récepteur ne recevra pas de notifications si son activité (contexte) a été suspendue.
la source
J'ai trouvé que l'utilisation d'EventBus de Guava lib est le moyen le plus simple pour la communication de type publication-abonnement entre les composants sans exiger que les composants s'enregistrent explicitement les uns avec les autres
voir leur exemple sur https://code.google.com/p/guava-libraries/wiki/EventBusExplained
vous pouvez ajouter cette bibliothèque simplement sur Android Studio en ajoutant une dépendance à votre build.gradle:
la source
Kotlin : Voici une version de @ Shiki dans Kotlin avec un petit refactor dans un fragment.
Fragment.kt
Publiez une notification n'importe où. Seulement vous avez besoin du contexte.
PS :
activity
(parfoisnull
) ouconext
aimer ce que j'ai utilisé.la source
Vous pouvez utiliser des références faibles.
De cette façon, vous pouvez gérer vous-même la mémoire et ajouter et supprimer des observateurs à votre guise.
Lorsque vous addObserver ajoutez ces paramètres - transtypez ce contexte à partir de l'activité dans laquelle vous l'ajoutez dans l'interface vide, ajoutez un nom de notification et appelez la méthode pour exécuter l'interface.
La méthode pour exécuter l'interface aurait une fonction appelée run pour renvoyer les données que vous transmettez quelque chose comme ça
Créez une classe d'observation qui appelle une référence avec une interface vide. Construisez également votre interface Themethodtorun à partir du contexte transmis dans l'addobserver.
Ajoutez l'observation à une structure de données.
L'appeler serait la même méthode, mais tout ce que vous avez à faire est de trouver le nom de notification spécifique dans la structure de données, utilisez le Themethodtorun.run (notification_name, data).
Cela enverra un rappel à l'endroit où vous avez créé un observateur avec un nom de notification spécifique. N'oubliez pas de les supprimer lorsque vous avez terminé!
C'est une bonne référence pour les références faibles.
http://learningviacode.blogspot.co.nz/2014/02/weak-references-in-java.html
Je suis en train de télécharger ce code sur github. Gardez les yeux ouverts!
la source