Como você deve saber no ecossistema reativo, temos um Observável que emite dados e um Observador que assina (seja notificado) dessa emissão observável, nada de estranho é como funciona o chamado Padrão de Observador. Um Observável "grita" alguma coisa, o Observador é notificado de que o Observável grita algo em um determinado momento.
Pense LiveData
como um Observável que permite gerenciar os Observadores que estão em um active
estado. Em outros termos, LiveData
é um Observável simples, mas também cuida do ciclo de vida.
Mas vamos ver os dois casos de código que você solicita:
A) Dados ao vivo
B) RXJava
A) Esta é uma implementação básica do LiveData
1) você geralmente instancia o LiveData no ViewModel para manter a mudança de orientação (você pode ter LiveData que é somente leitura ou MutableLiveData que é gravável; portanto, você geralmente expõe fora da classe LiveData)
2) no OnCreate
método da Atividade principal (não no ViewModel), você "assina" um objeto Observer (geralmente um método aChanged)
3) você inicia o método observe para estabelecer o link
Primeiro o ViewModel
(possui a lógica de negócios)
class ViewModel : ViewModel() { //Point 1
var liveData: MutableLiveData<Int> = MutableLiveData()
}
E este é o MainActivity
(o mais burro possível)
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 é a implementação básica do RXJava
1) você declara um Observável
2) você declara um observador
3) você assina o Observável com o 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);
}
});
Em particular, LiveData
é usado com Lifecycle
e freqüentemente com ViewModel
(como vimos) componentes da arquitetura. De fato, quando LiveData
combinado com um ViewModel permite que você mantenha atualizado em tempo real todas as alterações no Observer, para que os eventos sejam gerenciados em tempo real, quando necessário. Para usar LiveData
é altamente recomendável conhecer o conceito de ciclo de vida e os objetos relativos LifeCycleOwner / LifeCycle , também sugiro que você dê uma olhada em Transformações , se desejar implementar LiveData
em cenários da vida real. Aqui você encontra alguns casos de uso do ótimo commonsware .
Concluir basicamenteLiveData
é uma maneira simplificadaRXJava
e elegante de observar alterações em vários componentes sem criar regras de dependência explícitas entre os componentes, para que você possa testar muito mais facilmente o código e torná-lo muito mais legível. RXJava, permite que você faça as coisas do LiveData e muito mais. Devido às funcionalidades estendidas do RXJava, você pode usar o LiveData para casos simples ou explorar todo o poder do RXJava e continuar usando os componentes da Arquitetura Android como o ViewModel , é claro que isso significa queRXJava
pode ser muito mais complexo, basta pensar em centenas de operadores SwitchMap e Mapa de LiveData (no momento).
O RXJava versão 2 é uma biblioteca que revolucionou o paradigma Orientado a Objetos, adicionando a chamada maneira funcional de gerenciar o fluxo do programa.