En el proceso de transferir una aplicación de iPhone a Android, estoy buscando la mejor manera de comunicarme dentro de la aplicación. Las intenciones parecen ser el camino a seguir, ¿es esta la mejor (única) opción? NSUserDefaults parece mucho más liviano que los Intents tanto en rendimiento como en codificación.
También debo agregar que tengo una subclase de aplicación para el estado, pero necesito hacer que otra actividad sea consciente de un evento.
Respuestas:
Puedes probar esto: http://developer.android.com/reference/java/util/Observer.html
fuente
El mejor equivalente que encontré es LocalBroadcastManager, que forma parte del paquete de soporte de Android .
De la documentación de LocalBroadcastManager:
Al usar esto, puede decir que an
Intent
es equivalente a anNSNotification
. Aquí hay un ejemplo:ReceiverActivity.java
Una actividad que busca notificaciones del evento nombrado
"custom-event-name"
.SenderActivity.java
La segunda actividad que envía / difunde notificaciones.
Con el código anterior, cada vez que
R.id.button_send
se hace clic en el botón , se emite un Intent y es recibido pormMessageReceiver
inReceiverActivity
.La salida de depuración debería verse así:
fuente
NSNotificationCenter
, debería ser la respuesta aceptada!Aquí hay algo similar a la respuesta de @Shiki, pero desde el ángulo de los desarrolladores de iOS y el centro de notificaciones.
Primero cree algún tipo de servicio NotificationCenter:
Luego, también necesitará algún tipo de enumeración para estar seguro de errores en la codificación con cadenas - (NotificationType):
Aquí está el uso (agregar / eliminar observadores) por ejemplo en actividades:
y aquí está finalmente cómo publicamos la notificación en NotificationCenter desde algún servicio de devolución de llamada o descanso o lo que sea:
eso es todo, salud!
fuente
Bundle params
lugar deHashMap
es más conveniente para pasar parámetros de diferentes tipos. Hay una buena conexión entreIntent
yBundle
:intent.putExtras(params)
Puede usar esto: http://developer.android.com/reference/android/content/BroadcastReceiver.html , que da un comportamiento similar.
Puede registrar receptores mediante programación a través de Context.registerReceiver (BroadcastReceiver, IntentFilter) y capturará las intenciones enviadas a través de Context.sendBroadcast (Intent).
Sin embargo, tenga en cuenta que un receptor no recibirá notificaciones si su actividad (contexto) se ha detenido.
fuente
Descubrí que el uso de EventBus of Guava lib es la forma más sencilla para la comunicación de estilo publicación-suscripción entre componentes sin requerir que los componentes se registren explícitamente entre sí
vea su muestra en https://code.google.com/p/guava-libraries/wiki/EventBusExplained
puede agregar esta biblioteca simplemente en Android Studio agregando una dependencia a su build.gradle:
fuente
Kotlin : Aquí hay una versión de @ Shiki en Kotlin con un poco de refactorización en un fragmento.
Fragment.kt
Publique notificaciones en cualquier lugar. Solo tú necesitas el contexto.
PD :
activity
(a vecesnull
) o meconext
gusta lo que usé.fuente
Podría utilizar referencias débiles.
De esta manera, podría administrar la memoria usted mismo y agregar y eliminar observadores a su gusto.
Cuando agregaObserver, agregue estos parámetros: transmita ese contexto de la actividad en la que lo está agregando a la interfaz vacía, agregue un nombre de notificación y llame al método para ejecutar la interfaz.
El método para ejecutar la interfaz tendría una función que se llama ejecutar para devolver los datos que está pasando algo como esto
Cree una clase de observación que invoque una referencia con una interfaz vacía. También construya su interfaz Themethodtorun a partir del contexto que se pasa en el addobserver.
Agregue la observación a una estructura de datos.
Para llamarlo sería el mismo método, sin embargo, todo lo que necesita hacer es encontrar el nombre de notificación específico en la estructura de datos, use Themethodtorun.run (nombre_notificación, datos).
Esto enviará una devolución de llamada al lugar donde haya creado un observador con un nombre de notificación específico. ¡No olvide quitarlos cuando haya terminado!
Esta es una buena referencia para referencias débiles.
http://learningviacode.blogspot.co.nz/2014/02/weak-references-in-java.html
Estoy en el proceso de cargar este código en github. ¡Mantén los ojos abiertos!
fuente