Como puede saber en el ecosistema reactivo, tenemos un Observable que emite datos y un Observador que se suscribe (recibe una notificación) de esta emisión Observable, nada extraño es cómo funciona el llamado Patrón de Observador. Un Observable "grita" algo, el Observador recibe una notificación de que Observable grita algo en un momento dado.
Piense LiveData
como un Observable que le permite administrar los Observadores que se encuentran en un active
estado. En otros términos, LiveData
es un Observable simple pero también se encarga del ciclo de vida.
Pero veamos los dos casos de código que solicita:
A) Datos en vivo
B) RXJava
A) Esta es una implementación básica de LiveData
1) generalmente crea una instancia de LiveData en ViewModel para mantener el cambio de orientación (puede tener LiveData que es de solo lectura o MutableLiveData que se puede escribir, por lo que generalmente se expone fuera de la clase LiveData)
2) en el OnCreate
método de la Actividad principal (no en ViewModel) "suscribe" un objeto Observador (generalmente un método onChanged)
3) inicia el método observar para establecer el enlace
Primero el ViewModel
(posee la lógica de negocios)
class ViewModel : ViewModel() { //Point 1
var liveData: MutableLiveData<Int> = MutableLiveData()
}
Y este es el MainActivity
(lo más tonto posible)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val ViewModelProvider= ViewModelProviders.of(this).get(ViewModel::class.java)
ViewModelProvider.observe(this, Observer {//Points 2 and 3
//what you want to observe
})
}
}
}
B) Esta es la implementación básica de RXJava
1) declaras un Observable
2) declaras un observador
3) suscribes el Observable con el Observador
Observable.just(1, 2, 3, 4, 5, 6) // Point 1
.subscribe(new Subscriber() { //Points 2 & 3
@Override
public void onCompleted() {
System.out.println("Complete!");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Double value) {
System.out.println("onNext: " + value);
}
});
En particular, LiveData
se utiliza con Lifecycle
y a menudo con ViewModel
(como hemos visto) componentes de arquitectura. De hecho, cuando LiveData
se combina con un ViewModel le permite mantenerse actualizado en tiempo real de cada cambio en el Observador, para que los eventos se gestionen en tiempo real donde sea necesario. Para usarlo, LiveData
se recomienda conocer el concepto de ciclo de vida y los objetos relativos LifeCycleOwner / LifeCycle , también le sugiero que eche un vistazo a las Transformaciones , si desea implementar LiveData
en escenarios de la vida real. Aquí puede encontrar algunos casos de uso del gran software común .
Para terminar , básicamente,LiveData
es una simplificaciónRXJava
, una manera elegante para observar los cambios a través de múltiples componentes sin necesidad de crear las denominadas reglas explícitas de dependencia entre los componentes, por lo que se puede probar mucho más fácil el código y hacer que sea mucho más fácil de leer. RXJava, te permite hacer cosas de LiveData y mucho más. Debido a las funcionalidades extendidas de RXJava, puede usar LiveData para casos simples o explotar todo el poder de RXJava para seguir usando los componentes de Android Architecture como ViewModel , por supuesto, esto significa queRXJava
puede ser mucho más complejo, solo piense que tiene cientos de operadores en su lugar de SwitchMap y Map of LiveData (por el momento).
RXJava versión 2 es una biblioteca que revolucionó el paradigma orientado a objetos, agregando una forma funcional llamada para administrar el flujo del programa.