Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Comportamento estranho: Lista de contatos não carrega em todas as chamadas

Fala pessoal, reparei um comportamento estranho ao utilizar o aplicativo onde por hora não era carregado a lista de contatos, analisei o banco de dados e vi que as informações estavam sendo inseridas corretamente.

Analisando o metodo buscaContatos() eu reparei que o bloco de codigo abaixo por hora não trazia os contatosBuscados

viewModelScope.launch {
            val contatos = contatoDao.buscaTodosPorUsuario(_uiState.value.usuarioAtual)
            contatos.collect { contatosBuscados ->
                _uiState.value = _uiState.value.copy(
                    contatos = contatosBuscados
                )
            }
        }

Debugando o codigo eu identifiquei uma grande lentidão para carga dos dados, e olhando a documentação do uso de Coroutines dentro do escopo de Launch se não explicitarmos o Dispatcher ele executa por default no Dispatcher.default:

https://developer.android.com/kotlin/coroutines/coroutines-adv?hl=pt-br

https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/launch.html

Logo pode ocasionar algum problema com relação ao uso das threads, então para solucionar é bem simples, basta utilizar explicitamente o Dispatcher.IO que você terá 100% de sucesso.

        viewModelScope.launch(Dispatchers.IO) {
            val contatos = contatoDao.buscaTodosPorUsuario(_uiState.value.usuarioAtual)
            contatos.collect { contatosBuscados ->
                _uiState.value = _uiState.value.copy(
                    contatos = contatosBuscados
                )
            }
        }

Abraço galera!

Imagem com os dados não carregados:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Contatos inseridos:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
solução!

Oi Pablo, tudo bem?

Realmente ao utilizar o Dispatchers.IO, você estará executando a busca dos contatos em uma thread dedicada para operações de I/O, o que melhora o desempenho e evita problemas de lentidão.

Muito obrigada por compartilhar com a gente essa solução!

Um abraço e bons estudos!