Come forse saprai nell'ecosistema reattivo, abbiamo un osservabile che emette dati e un osservatore che sottoscrive (ricevi una notifica) di questa emissione osservabile, nulla di strano è il modo in cui funziona il cosiddetto modello di osservatore. Un osservabile "grida" qualcosa, l'Osservatore viene avvisato che un osservabile grida qualcosa in un dato momento.
Pensa a LiveData
un osservabile che ti consente di gestire gli osservatori che si trovano in uno active
stato. In altri termini LiveData
è un semplice osservabile ma si occupa anche del ciclo di vita.
Ma vediamo i due casi di codice richiesti:
A) Dati in tempo reale
B) RXJava
A) Questa è un'implementazione di base di LiveData
1) di solito crea un'istanza di LiveData in ViewModel per mantenere il cambiamento di orientamento (puoi avere LiveData di sola lettura o MutableLiveData che è scrivibile, quindi di solito esponi al di fuori della classe LiveData)
2) nel OnCreate
metodo dell'attività principale (non ViewModel) "abbonati" un oggetto Observer (di solito un metodo onChanged)
3) si avvia il metodo osservare per stabilire il collegamento
Prima il ViewModel
(possiede la logica aziendale)
class ViewModel : ViewModel() { //Point 1
var liveData: MutableLiveData<Int> = MutableLiveData()
}
E questo è il MainActivity
(più stupido possibile)
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) Questa è l'implementazione di base di RXJava
1) dichiari un osservabile
2) dichiari un osservatore
3) sottoscrivi l'Osservabile con l'Osservatore
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);
}
});
In particolare LiveData
viene utilizzato con Lifecycle
e spesso con ViewModel
(come abbiamo visto) componenti di architettura. Infatti quando LiveData
combinato con un ViewModel ti permette di essere aggiornato in tempo reale ogni cambiamento in Observer, in modo che gli eventi siano gestiti in tempo reale dove è necessario. Ad uso LiveData
è fortemente consigliato di conoscere il concetto di ciclo di vita e la relativa oggetti LifeCycleOwner / LifeCycle , anche io vi consiglio di dare un'occhiata al Trasformazioni , se si desidera implementare LiveData
in scenari di vita reale. Qui puoi trovare alcuni casi d'uso dal grande commonsware .
Riassumendo sostanzialmenteLiveData
è un modo semplificatoRXJava
ed elegante per osservare le modifiche tra più componenti senza creare esplicite regole di dipendenza esplicite tra i componenti, in modo da poter testare molto più facilmente il codice e renderlo molto più leggibile. RXJava, ti permette di fare le cose di LiveData e molto altro. A causa delle funzionalità estese di RXJava, puoi utilizzare LiveData per casi semplici o sfruttare tutta la potenza di RXJava usando i componenti di Android Architecture come ViewModel , ovviamente questo significa cheRXJava
può essere molto più complesso, basti pensare che ha invece centinaia di operatori di SwitchMap e Mappa di LiveData (al momento).
RXJava versione 2 è una libreria che ha rivoluzionato il paradigma Object Oriented, aggiungendo un cosiddetto modo funzionale per gestire il flusso del programma.