Otimizações de performance em Android: renderização
Esta apresentação mostra como utilizar as ferramentas de análise de performance de renderização, a fim que o desenvolvedor encontre problemas de performance e possa facilmente corrigí-los.
Computação • Desenhar componentes na tela • Atualização de views na tela • Animações • Tempo para o GC recolher objetos 16ms 16ms 16ms Calculando: 1000ms 60 frames = 16.666ms/frame Draw Draw Draw
um pixel é redesenhado (em cada frame) • Algumas vezes colocamos backgrounds desnecessários Nome Loren ipsun loren loren ipsun loren favoritar compartilhar Nome Loren ipsun loren loren ipsun loren favoritar compartilhar Nome Loren ipsun loren loren ipsun loren favoritar compartilhar Como você vê seu app Como Android vê seu app
Solução Extrair para outra thread Vsync delay/ misc time Tempo entre frames Muito trabalho na mainThread Solução Extrair para outra thread/ diminuir trabalho no método Input Handling Tempo execução de código de Callback de Evento de input Measure/Layout Solução Reduzir hierarquia de views Tempo de retorno no onLayout() e onMeasure() Solução: Verificar animators Animations Tempo gasto para avaliar animators onClick( ) onLongClick( ) onFocusChange( ) onKeyListener( )
Solução Diminuir trabalho no onDraw(). Considerar mover trabalho para outra thread Tempo para Executar o onDraw() Solução Tratar tamanho/ número de imagens Picasso / Glide Sync/Upload Tempo para upload de bitmap na GPU Command Issue Solução diminuir complexidade de lógica de desenho ex: canvas.drawPoints Tempo emissão de comandos de desenho para GPU (displayList) Swap/Buffers Solução Idem ao command issue Tempo que a CPU aguarda a GPU finalizar tarefas (comando final)
Solução Diminuir trabalho em draw() Tempo para criar e atualizar displayLists Solução Tratar tamanho/ número de imagens Picasso / Glide XFer Tempo para upload de bitmap na GPU Execute Solução diminuir complexidade de lógica de desenho ex: canvas.drawPoints Tempo emissão de comandos para GPU Process Solução Idem ao command issue Tempo que a CPU aguarda para GPU finalizar tarefas <4.0
métodos como onDraw(), onLayout(), onMeasure() • Considerar o uso de threads para separar lógica da thread principal • Desenhar somente o que está visível (quando há muitos itens sobrepostos) • Evite chamar o metodo invalidate() com frequência (se não for necessário) Imagem • Considerar uso das bibliotecas: Picasso, Glide, etc. Resources • Bitmaps e drawables (que são fornecidos através do tema) são agrupados em uma textura única e carregados na GPU. Ao usar estes recursos não oneramos performance