Escrito por Facundo Piaggio (Solutions Architect)
Uma estratégia prática para melhorar o desempenho da inicialização a frio.
🎯 Objetivo
Fornecer uma estratégia limpa e realista para melhorar o desempenho da inicialização do aplicativo, adiando a inicialização de SDKs pesados até o momento em que o aplicativo realmente precisa deles – normalmente, depois que o usuário entra na tela inicial ou após a conclusão da integração.
Isso reduz
- picos de CPU ao iniciar o aplicativo
- tempestades de rede na inicialização
- o jank da interface do usuário durante os primeiros segundos de uso
- tempos de inicialização frios em redes ruins ou dispositivos de baixo custo
O resultado: melhor desempenho percebido, sem perda de capacidade analítica ou de mensagens.

⚠️ Por que a inicialização fica mais lenta
E por que os SDKs geralmente são os culpados
Quando o processo do aplicativo é iniciado, o sistema operacional ainda está alocando memória, configurando threads e dando vida à interface do usuário. Durante esse processo, o aplicativo inicia várias solicitações aos seus próprios servidores para lidar com coisas como autenticação. Ao mesmo tempo, muitos SDKs
- executam inicializadores de classe
- tocam no disco/armazenamento local
- geram threads em segundo plano
- realizam handshakes de rede
- buscam experimentos, configurações ou perfis de usuário
Quando 3 a 5 SDKs fazem isso ao mesmo tempo, a inicialização fica congestionada.
Os sintomas típicos incluem:
- ⏳ Longo tempo para interagir (TTI).
- 😵 Jank ou gagueira na primeira tela
- 📉Aumento da probabilidade de falha/ANR durante o lançamento
- 📡 Várias chamadas de rede simultâneas competindo pela largura de banda.]
A pesquisa e a orientação da plataforma (especialmente no Android) confirmam consistentemente o mesmo ponto: adiar o trabalho não crítico é uma das otimizações de inicialização a frio mais impactantes disponíveis.
📉 Impacto na rede e na largura de banda
Vários estudos e relatos de casos mostram isso:
- A redução das chamadas de rede durante a inicialização melhora drasticamente o tempo de carregamento em 3G/4G e Wi-Fi limitado.
- Os aplicativos que adiam SDKs não utilizados apresentam melhorias de 30 a 60% na inicialização a frio em condições reais.
- O armazenamento em cache local e a inicialização atrasada reduzem o número de viagens de ida e volta para a rede durante os primeiros segundos.
A Amplitude, a Braze e outros fornecedores também documentam maneiras de controlar a atividade inicial da rede.
🧩 O que os SDKs fazem na inicialização
Amplitude (comportamento padrão)
Na inicialização, o Amplitude normalmente
- Lê IDs de dispositivo/usuário
- Inicia os threads de processamento de eventos
- Carrega e grava as filas no disco
- Opcionalmente, obtém variantes de configuração e experimentos
- Começa a armazenar e despachar eventos em fila
Braze (comportamento padrão)
A inicialização do Braze pode ser ativada:
- Instalação e configuração do SDK
- Iniciar gerenciamento de sessão
- Trabalhadores em segundo plano
- Atualização de cartões de conteúdo/mensagens no aplicativo
- Registro de tokens push
- Sincronização de perfil de usuário
O Braze é conhecido por fazer um trabalho síncrono significativo antecipadamente, o que é agravado quando outros SDKs fazem o mesmo.
Impacto combinado
A inicialização do Amplitude + Braze + outros no lançamento causa
- Várias solicitações de rede paralelas
- Picos de CPU e E/S
- Lentidão visível da interface do usuário
- Aumento do risco de falhas na inicialização em caso de conectividade ruim.
É exatamente isso que queremos evitar.
🌟 A estratégia proposta
Atrasar a inicialização até que o aplicativo esteja pronto
Em vez de inicializar os SDKs de análise e engajamento em:
Application.onCreate()(Android)aplicativo(_:didFinishLaunchingWithOptions:)(iOS)
…atrasamos a inicialização até um momento previsível e seguro, como, por exemplo:
- Quando a tela inicial se tornar visível.
- Após a conclusão da integração
- Quando a conexão de rede for confirmada
- Após a primeira renderização significativa.
Vantagens:
- Tempo de inicialização a frio mais rápido
- Interface de usuário mais suave nas primeiras telas
- Menos congestionamento de rede na inicialização
- Melhor experiência em cenários de baixa conectividade
🛠 Suporte a SDK para inicialização atrasada
Braze
O Braze fornece APIs oficiais para inicialização atrasada, como:
enableDelayedInitialization / disableDelayedInitialization.
Amplitude
O Amplitude permite que você controle o comportamento da inicialização por meio de:
- Inicializar o cliente em um ponto posterior da sessão. Esse comportamento varia de plataforma para plataforma. Mas você decide quando configurar o SDK.
- Também é possível desativar o rastreamento até que o usuário nos dê permissão, o que pode acontecer mais tarde na sessão. Android, iOS
Recomendação
Sempre use mecanismos de inicialização atrasada fornecidos pelo fornecedor quando disponíveis: eles lidam com casos de borda internos.
🧭 Framework de implementação
A seguir, um guia prático para várias plataformas.
Braze
- Android
1. configure o XML (res/values/braze.xml):
2. Atualizar a classe do aplicativo:
- iOS
1. chame Braze.prepareForDelayedInitialization() assim que possível, de preferência no aplicativo ou antes dele(_:didFinishLaunchingWithOptions:)
Braze.prepareForDelayedInitialization(pushAutomation:) aceita um parâmetro opcional pushAutomation. Se for definido como nulo, todas as funções de automação push serão ativadas, exceto a solicitação de autorização push no lançamento.
Como isso funciona
- O Braze permanece inativo durante a inicialização do aplicativo
- As chamadas de rede críticas do aplicativo são concluídas sem contenção
- Após 2 segundos, o Braze é ativado e envia eventos armazenados em cache (no exemplo, você pode controlá-lo)
- Zero perda de dados – os eventos são automaticamente armazenados em cache com o modo CACHE_EVENTS (no Android)
Amplitude
1. simplesmente atrase o processo de configuração do SDK para um ponto específico do seu aplicativo e, opcionalmente, exclua o usuário do rastreamento (altere a chave optOut para false quando achar que esse é o ponto ideal).
- Android
- iOS
⚖️ Vantagens e desvantagens
Você pode encontrar:
🟡 Eventos iniciais atrasados/perdidos.
Solução alternativa: enfileirar na memória ou manter no disco até que o SDK esteja pronto.
🟡 As notificações push exigem consideração especial.
A automação push do Braze pode exigir configuração antecipada: teste cuidadosamente.
Opção: inicialize apenas os componentes relacionados a push antecipadamente.
🟡 Lançamentos em segundo plano (push open, deep links).
Certifique-se de que sua lógica de fallback possa inicializar SDKs mesmo quando a interface do usuário não for exibida.
📊 O que medir
Para validar as melhorias, meça o antes e o depois:
- Tempo para a inicialização a frio (início do processo → primeiro quadro).
- Tempo de inatividade (primeiro quadro → IU estável).
- Número e tamanho das solicitações de rede de inicialização.
- Confiabilidade da fila para eventos de pré-inicialização.
- Desempenho em redes com limitação
🧪 Estrutura de teste
Teste em:
- Redes 3G/Edge com limitações
- Hardware de baixo custo
- Cenários de primeira execução e de nova execução
- Lançamentos em segundo plano e deep links
- Fluxos de notificação por push
- Comportamento de reversão do sinalizador de experimento/característica
🏗 Arquitetura proposta
Diagrama de sequência (alto nível)

💬 Pronto para melhorar o desempenho de inicialização do seu app?
📚Referências
- Braze Android e iOS – Documentos de inicialização atrasada
- Amplitude Android e iOS – Documentos de inicialização
- Estudos de caso de desempenho do Android (Guia de inicialização atrasada)
- Pesquisa de otimização de rede móvel





