LiveData en el desarrollo de Android.Como desarrollador de Android, ¿alguna vez… | por Mingkang Zhou | febrero de 2022
como un desarrollador de Androidte has encontrado con algunos dificultad Cuándo pasar datos desde Clase de procesamiento de lógica empresarial (ViewModel, Presenter) llegar Actividad o Fragmento? Si todavía está luchando con este problema, estoy aquí para traerle un nuevo término llamado «Datos en tiempo real».
LiveData
es una clase de titular de datos observable. A diferencia de los observables normales, LiveData tiene en cuenta el ciclo de vida, lo que significa que respeta el ciclo de vida de otros componentes de la aplicación, como actividades, fragmentos o servicios. Esta conciencia garantiza que LiveData solo actualice los observadores de los componentes de la aplicación que se encuentran en el estado de ciclo de vida activo.
Ahora, hagámoslo un poco más simple para que puedas entenderlo mejor.
Como se mencionó anteriormente, Desarrolladores de Android «anticuados» tiende a escribe todo en la clase Actividad o Fragmento Esto es Difícil de mantener y actualizarAsí empezaron Separación de parte lógica y parte de vista atravesar Aplicar Patrones de arquitectura de software como MVVM (Modelo-Vista-Modelo de vista) o MVP (Modelo-Vista-Presentador) La llegada de LiveData hace que todo sea más fácil para los desarrolladores.
LiveData considera un observador, que consiste en
Observer
la clase, si su ciclo de vida está activoSTARTED
oRESUMED
condición. LiveData solo informa a los observadores de actividad sobre las actualizaciones.Observadores inactivos registrados para mirarLiveData
Los objetos no serán notificados de los cambios.
Entonces, según Google, Datos en tiempo real sí Perímetro llegar Ciclo de vida de actividad o fragmento así será Resuelve eficazmente el problema de pérdida de memoria atravesar no notificar inactivo.
no solo, Datos en tiempo real también beneficiar a otros me gusta:
- Los datos más recientes en la interfaz de usuario.
- No se requiere manejo manual del ciclo de vida.
- Conservar los datos cuando se produzcan cambios de configuración.
- Comparta datos al observar el mismo LiveData.
En este blog, te presentaré a «Datos variables en tiempo real» Esto es Esta Los datos en vivo más simples observar los cambios y utilizar arquitectura MVVM, ver encuadernación para este ejemplo.
- paso 1: añadir ViewModel y LiveData dependencias existe build.gradle (módulo)
def lifecycle_version = "2.5.0-alpha02"// ViewModel
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")// LiveData
implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")
- Paso 2: Ahora, voy a crear un diseño sencillo y un texto de edición Ingrese su nombre de usuario, un botón activar el evento de actualización de nombre de usuario y una vista de texto Recibir cambios de LiveData.
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
android:padding="20dp"> android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_name"/>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Update name"
android:id="@+id/btn_update"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello"
android:textSize="20sp"
android:layout_gravity="center_horizontal"
android:id="@+id/tv_name"/>
- Paso 3: crear Tu ver clase de modelo y Definir una instancia MutableLiveDataEn este ejemplo, usaré una cadena para almacenar el nombre de usuario.llegar observar cambiosVoy Definir un objeto LiveData llegar Recibir cambios de MutableLiveData.
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModelclass YourViewModel: ViewModel() {
private val _name = MutableLiveData()
val name: LiveData get() = _name
}
- Paso 4: Crear getUsername() Actuando tu modelo de vista Ir a clases Publicar nuevo nombre de usuario en MutableLiveData.
fun getUsername(name: String) {
//Notify MutableLiveData that there is new value coming.
_data.postValue(name)
}
- Paso 5: en tu evento, vincula tu diseño y Obtenga la instancia de YourViewModel. finalmente establecer observador para LiveData Actualice el texto de TextView cuando haya un nuevo valor.
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.ViewModelProvider
import com.chow.livedatablog.databinding.ActivityMainBindingclass MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var yourViewModel: YourViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
//get YourViewModel from ViewModelProvider
yourViewModel = ViewModelProvider(this)[YourViewModel::class.java]
binding.apply {
//Set up LiveData observer
yourViewModel.data.observe(this@MainActivity) {
//Update your UI here with new value
tvName.text = it
}
}
}
}
- finalmente: establecer en el oyente de clics para botón Enviar el nuevo nombre de usuario a YourViewModel.
btnUpdate.setOnClickListener {
yourViewModel.getUsername(etName.text.toString())
}
¡Veamos los resultados!
Referirse a: