Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] AppDatabase e produtoDao como lazy?

Bom dia a todos

Eu não sei se ele vai falar isso mais para frete (se foi falado isso mais para frete pode ignorar), mas na aula que ele explica sobre a implementação do banco de dados e do DAO na activity teve instanciamento repetido no código do onCreate e no onResume:

class ListaProdutosActivity : AppCompatActivity(R.layout.activity_lista_produtos) {
  //properties omitidas
    override fun onCreate(savedInstanceState: Bundle?) {
        //outros códigos omitidos
        val db = AppDatabase.instanciaBanco(this)
        val produtoDao = db.produtoDao()
        adapter.atualiza(produtoDao.buscaTodos())
    }

    override fun onResume() {
        //outros códigos omitidos
        val db = AppDatabase.instanciaBanco(this)
        val produtoDao = db.produtoDao()
        adapter.atualiza(produtoDao.buscaTodos())
    }

Ao invés de ter que instanciar mais de 1 vez, eu não poderia fazer a propertie ser uma lazy para ter que chamá-lo apenas 1 vez?

Eu fiz desse jeito e deu certo:

class ListaProdutosActivity : AppCompatActivity(R.layout.activity_lista_produtos) {
    private val db by lazy {
        AppDatabase.instanciaBanco(this)
    }
    private val produtoDao by lazy {
        db.produtoDao()
    }
    //outras properties omitidas
    override fun onCreate(savedInstanceState: Bundle?) {
        //outros códigos omitidos
        adapter.atualiza(produtoDao.buscaTodos())
    }

    override fun onResume() {
        super.onResume()
        adapter.atualiza(produtoDao.buscaTodos())
    }
3 respostas

Obs: assisti a aula seguinte, e o professor falou que não era necessário fazer esse processo no onCreate, apenas no onResume, e tirou o código do onCreate, deixando apenas em um lugar. Mesmo que não seja tão util o lazy neste momento, minha duvída sobre utilizar o lazy ainda continua (mais para saber se tem problema em utilizá-lo neste contexto)

solução!

Olá, Murilo! Tudo bem?

Sim, a sua solução está correta. Utilizando a propriedade lazy, você garante que a instância do banco de dados e do DAO só serão criadas quando forem realmente necessárias, evitando instanciamentos repetidos e melhorando a performance do seu aplicativo.

Além disso, é uma boa prática utilizar o lazy em casos como esse, em que a criação da instância é custosa e não precisa ser feita imediatamente.

Parabéns pela solução encontrada e continue estudando para aprimorar ainda mais suas habilidades em desenvolvimento de aplicativos Android com Kotlin!

Espero ter ajudado e bons estudos!

Eu fui ver depois que o professor aplicou o lazy nestas properties, só que na classe DetalhesProdutosActivity(), na aula 06.02 Buscando produto pelo id