Práticas recomendadas para a otimização de apps

As práticas recomendadas a seguir ajudam a otimizar seu app sem sacrificar a qualidade.

Usar perfis de referência

Os perfis de referência podem melhorar a velocidade de execução de código em 30% desde a primeira inicialização. Além disso, todas as interações do usuário (como inicialização do app, navegação entre telas ou rolagem de conteúdo) podem ser mais suaves desde a primeira execução. O aumento da velocidade e capacidade de resposta de um app leva a mais usuários ativos por dia e uma taxa média de visitas recorrentes mais alta.

Usar um perfil de inicialização

Um perfil de inicialização é semelhante a um perfil de referência, mas é executado no tempo de compilação para otimizar o layout do DEX e agilizar a inicialização do app.

Usar a biblioteca App Startup

A biblioteca App Startup permite definir inicializadores de componentes que compartilham um único provedor de conteúdo em vez de definir provedores de conteúdo separados para cada componente que você precisa inicializar. Isso melhora significativamente o tempo de inicialização do app.

Carregar bibliotecas lentamente ou desativar a inicialização automática

Os apps consomem muitas bibliotecas, e algumas delas podem ser obrigatórias para a inicialização. No entanto, é possível que haja várias bibliotecas em que a inicialização pode ser adiada até que o primeiro frame seja desenhado. Algumas permitem desativar a inicialização automática ou ter uma inicialização sob demanda. Use essa opção para adiar a inicialização tanto quanto necessário e ajudar a melhorar o desempenho. A inicialização sob demanda poderá ser usada para invocar o WorkManager somente quando o componente for necessário.

Usar ViewStubs

Uma ViewStub é uma View invisível e com tamanho zero que pode ser usada para inflar lentamente os recursos de layout no momento da execução. Isso permite atrasar a inflação de visualizações que não são necessárias no início.

Se você estiver usando o Jetpack Compose, poderá ter um comportamento semelhante ao ViewStub usando o estado para adiar o carregamento de alguns componentes:

var shouldLoad by remember {mutableStateOf(false)}

if (shouldLoad) {
   MyComposable()
}

Carregue os elementos combináveis dentro do bloco condicional modificando shouldLoad:

LaunchedEffect(Unit) {
   shouldLoad = true
}

Isso aciona uma recomposição que inclui o código dentro do bloco condicional no primeiro snippet.

Otimizar a tela de apresentação

As telas de apresentação são uma parte importante da inicialização do app. Usar uma tela bem projetada pode melhorar a experiência geral de inicialização. O Android 12 (nível 31 da API) e versões mais recentes incluem uma tela de apresentação projetada para melhorar o desempenho. Para mais informações, consulte Tela de apresentação.

Usar tipos de imagem escalonáveis

Recomendamos o uso de drawables vetoriais para imagens. Quando isso não for possível, use imagens WebP. WebP é um formato de imagem que oferece compactação superior com e sem perda para imagens na Web. Você pode converter as imagens BMP, JPG, PNG ou GIFs estáticos que estão em uso para o formato WebP usando o Android Studio. Para mais informações, consulte Criar imagens WebP.

Além disso, minimize o número e o tamanho das imagens carregadas durante a inicialização.

Usar as APIs Performance

A API Performance para reprodução de mídia está disponível no Android 12 (nível 31 da API) e versões mais recentes. Use essa API para entender os recursos do dispositivo e realizar operações de forma adequada.

Priorizar rastros de inicialização a frio

Uma inicialização a frio se refere a um app que começa do zero. Ou seja, o processo do sistema ainda não cria o processo do app. Geralmente, o app é inicializado a frio se você o abrir pela primeira vez desde que o dispositivo foi ligado ou depois que o sistema forçar o fechamento dele. As inicializações a frio são muito mais lentas, porque o app e o sistema precisam realizar mais trabalho, o que não é necessário em outros tipos de inicialização, como com estado salvo ou a quente. O rastreamento do sistema de startups a frio oferece uma melhor supervisão do desempenho do app.