Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

434
Visualizações
Ver la inicialización del modelo usando "by viewModels()" vs "ViewModelProvider(this).get(ViewModel::class.java)" en android

Podemos inicializar la clase ViewModel usando

 private val viewModel: CharactersViewModel by viewModels()

o

 viewModel = ViewModelProvider(this).get(CharactersViewModel::class.java)

Herer CharactersViewModel es nuestra clase ViewModel. Mi pregunta es ¿cuándo usar cuál? ¿Ambos contienen el mismo propósito? He leído la documentación oficial de Android de ViewModel. La documentación dice que el delegado de propiedad by viewModels() Kotlin . Pero lamentablemente no logró entenderlo. ¿Alguien puede ayudarme a entender esto?

over 4 years ago · Hanz Gallego
3 Respostas
Responde à pergunta

0

Para agregar a las respuestas ya mencionadas,

El modificador lateinit le dice al verificador de tipos que una propiedad var se inicializará "por arte de magia" antes de que se use, por lo que no es necesario que se le proporcione un tipo anulable. Evita que el verificador de tipos lo ayude a inicializar las propiedades correctamente. En su lugar, los errores de programación en la inicialización se notifican mediante excepciones más adelante en el tiempo de ejecución.

Está diseñado para cuando el código Kotlin interactúa con los marcos Java heredados que usan la reflexión para insertar valores en los campos detrás del verificador de tipos y los modificadores de visibilidad.

Deberíamos tratar de evitar lateinit en nuestro código, si es posible, en este caso deberías usar

 private val viewModel: CharactersViewModel by viewModels()
over 4 years ago · Hanz Gallego Relatório

0

Esas dos afirmaciones son iguales.

La palabra clave by Kotlin simplemente le ahorra un poco de código, le ahorra el dolor de usar la reflexión para acceder a su VM y se ve mucho más limpio, si es como yo.

Cualquiera o debería hacer el trabajo por ti :)

over 4 years ago · Hanz Gallego Relatório

0

Ambos hacen lo mismo, pero hay una ventaja discriminatoria para el primero. La delegación de propiedades de Kotlin usa la idea de Lazy Initialization . En Wikipedia puedes encontrar una breve definición para ello:

En la programación de computadoras, la inicialización perezosa es la táctica de retrasar la creación de un objeto, el cálculo de un valor o algún otro proceso costoso hasta la primera vez que se necesita. Es un tipo de evaluación perezosa que se refiere específicamente a la creación de instancias de objetos u otros recursos.

Por lo tanto, cuando usa el primer enfoque que mencionó, aprovecha las propiedades perezosas. Significa que la instancia de ViewModel se crea solo en el primer acceso.

Dado el siguiente código como ejemplo:

 class YourFragment : Fragment() { private val viewModel: CharactersViewModel by viewModels() // other codes ... override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // doing some view initialization ... viewModel.someLiveData.observe(viewLifecycleOwner) { // ... } } }

Si viewModel.someLiveData.observe(viewLifecycleOwner) es la primera vez que se toca el campo viewModel , la creación de instancias ocurrirá allí. (creación de una instancia de CharactersViewModel )

Por lo tanto, el uso de la inicialización diferida de objetos como el modelo de vista reduce el impacto de inicio de su fragmento, lo que conduce a una carga más rápida y muestra su contenido en lugar de la inicialización directa de los mismos.

over 4 years ago · Hanz Gallego Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda