Buenas prácticas para evitar ANRs - MISW-4203-2023/Vinilos GitHub Wiki

Buenas prácticas para evitar ANRs

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

⚠️ **GitHub.com Fallback** ⚠️