1
resposta

[Dúvida] Uso de licycleScope com Room

Eu sei que não é utilizado no momento, mas eu estava fazendo uns testes e funcionou colocando suspend nas funções de salva e usando o lifecycleScope, só deu erro, porque eu tentei utilizar toda vez que eu tentava fazer uma alteração no banco, a minha dúvida é, não pode usar isso muitas vezes, quando usar? Eu corrigi o erro, mas ainda não sei se fazer desse jeito é uma boa prática.

Eu até estava vendo a série de coroutines, mas mesmo assim, não sei como aplicar nesse caso e porque eu vi que as Coroutines são usadas só no curso de webAPI só que o código tá muito diferente desse exemplo, então queria saber se estou usando da forma correta ou onde posso ver como usar da forma correta:

override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setContentView(binding.root)
   configuraRecyclerView()
   configuraFab()

   val db = Room.databaseBuilder(
       this,
       AppDatabase::class.java,
       "orgs.db"
   ).build()

   lifecycleScope.launch {
       val produtoDao = db.produtoDao()
       adapter.atualiza(produtoDao.buscarTodos())
   }
}

override fun onResume() {
   super.onResume()
   val db = AppDatabase.instancia(this)

   lifecycleScope.launch {
       val produtoDao = db.produtoDao()
       adapter.atualiza(produtoDao.buscarTodos())
   }
}
private fun configuraBotaoSalvar() {
   val botaoSalvar = binding.activityFormularioProdutoBotaoSalvar
   val db = AppDatabase.instancia(this)
   val produtoDao = db.produtoDao()
   lifecycleScope.launch {

       produtoDao.salva(
           Produto(
               nome = "nome 1",
               descricao = "desc",
               valor = BigDecimal("10.0")
           )
       )
   }
   botaoSalvar.setOnClickListener {
       lifecycleScope.launch{
           val produtoNovo = criaProduto()
           produtoDao.salva(produtoNovo)
           finish()
       }
   }
}
1 resposta

Olá Gisele, tudo bem?

O uso de suspensão (suspend) e do lifecycleScope é uma boa prática no Android para evitar bloqueios de thread principal e melhorar a experiência do usuário. A função lifecycleScope.launch inicia uma nova coroutine no escopo do ciclo de vida da atividade ou fragmento, e a suspensão permite que a coroutine seja suspensa em vez de bloquear a thread principal enquanto aguarda o resultado de uma operação assíncrona.

Em relação às Coroutines, elas são usadas para executar operações assíncronas no Android. Elas podem ser usadas para executar operações no banco de dados, operações de rede e outras operações que possam bloquear a thread principal. No seu exemplo, você já está usando as Coroutines para executar operações assíncronas no banco de dados, então você está usando as Coroutines de forma correta.

Se você quiser aprender mais sobre Coroutines, eu recomendo que você verifique a documentação oficial do Android.

Qualquer dúvida, estarei a disposição :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software