A latência de inicialização é uma métrica importante para reter o número de usuários ativos por dia e garantir uma experiência perfeita desde a primeira interação. Isso vale principalmente para ambientes com pouca memória RAM, em que as compensações de performance podem ser consideradas. No entanto, antes de começar a fazer melhorias no app, é importante entender todos os aspectos que contribuem para a inicialização.
Práticas recomendadas
Enviar com um perfil de referência
Os perfis de referência melhoram a velocidade de execução do código em cerca de 30% desde a primeira inicialização, evitando a interpretação e as etapas de compilação just-in-time (JIT) para caminhos de código incluídos. Ao enviar um perfil de referência em um app, o Android Runtime (ART) pode otimizar os caminhos de código incluídos pela compilação antecipada (AOT, na sigla em inglês), fornecendo melhorias de desempenho a cada novo usuário e a cada atualização do app.
Evitar a inicialização de tudo ao mesmo tempo
Evite realizar tarefas que não são necessárias na sequência de inicialização do app.
O cenário mais provável para o app iniciar um processo é na
própria inicialização. No entanto,
o WorkManager,
o JobScheduler,
o BroadcastReceiver, os serviços
vinculados e a biblioteca de inicialização do AndroidX
também podem iniciar processos em segundo plano. Se possível, evite inicializar de forma
desnecessária tudo que está na classe Application
. Muitas bibliotecas
oferecem inicialização sob demanda, o que permite invocá-las apenas quando necessário.
Mover tarefas da linha de execução de interface para a linha de execução em segundo plano
Se algumas tarefas estiverem demorando muito e bloqueando a linha de execução principal, mova-as para uma linha de execução em segundo plano ou use o WorkManager para garantir maior eficiência. Identifique operações que demoram longos períodos ou consomem mais tempo do que o esperado. A otimização dessas tarefas pode ajudar a melhorar de forma significativa a latência de inicialização.
Analisar e corrigir contenções de leitura de disco graves
O StrictMode é uma ferramenta para desenvolvedores que pode ajudar a detectar o uso acidental de acesso ao disco ou à rede na linha de execução principal do app, onde as operações da interface são recebidas e as animações são reproduzidas. Quando a ferramenta detecta uma possível área de melhoria, você pode encerrar o app de forma automática ou registrar a violação para uma futura inspeção.
Evitar IPCs síncronas
Muitas vezes, pausas longas na execução do app são causadas por chamadas do binder, o mecanismo de comunicação entre processos (IPC) do Android. Em versões recentes do Android, esse é um dos motivos mais comuns para a linha de execução de interface parar de ser executada. Geralmente, a correção visa evitar chamadas de funções que fazem chamadas de binder. Se for inevitável, coloque o valor em cache ou mova o trabalho para linhas de execução em segundo plano. Para mais informações, consulte Atrasos na programação de linhas de execução.