Buenas prácticas para evitar ANRs - MISW-4203-2023/Vinilos GitHub Wiki
En la aplicación se hace uso de corrutinas y uso de suspend en la firma de los métodos para no bloquear el hilo principal y de esta manera evitar los ANR
viewModelScope.launch {
albumsUiState = AlbumsUiState.Loading
albumsUiState = try {
AlbumsUiState.Success(albumsRepository.getAlbums())
} catch (e: IOException) {
AlbumsUiState.Error
} catch (e: HttpException) {
AlbumsUiState.Error
}
}Ejemplo de uso de un llamado de corrutina
suspend fun getAlbums(): List<Album>Ejemplo de la firma de un método
También hacemos uso de la librería coil que a su vez hace uso de corrutinas para obtener y desplegar las imágenes.
AsyncImage(
model = ImageRequest
.Builder(context = LocalContext.current)
.data(artist.image)
.crossfade(true).build(),
error = painterResource(R.drawable.image_broken),
placeholder = painterResource(R.drawable.icono_img),
contentDescription = artist.name,
contentScale = ContentScale.FillWidth,
modifier = Modifier
.fillMaxWidth()
.aspectRatio(1F)
)Ejemplo de composable AsyncImage para desplegar la foto de un artista