Desenvolvendo aplicativos nativos
Exemplos, casos e conceitos
David Tiago Conceição
@davidtiagocon
[email protected]
Android
Crescimento sem precedentesNúmero de dispositivos
Número de ativações
Número de aplicativos
Android
Experiência de uso
Roteiro
ConceitoAndroid SDKCódigo Java
RecursosImageViewAdapters
Informações externasServiços externos
Performance
Elemento da experiência de uso
Aumentar a Performance
Diminuir o tempo que o usuário leva para alcançar seus objetivos
Performance
Impacto direto na experiência de usoAplicativos lentos
Aplicativos pesados
Aplicativos complexos
Android SDK
AtualizaçõesBibliotecas
Build System
Android SDK
AtualizaçõesTarget
Android SDK
AtualizaçõesTarget
Android SDK
WarningsBuild
Lint
Código Java
Código eficiente
Código Java
Getters & Setters
Código Java
IteraçõesEnhanced for
Código Java
IteraçõesLimites
Código Java
IteraçõesLimites
Código Java
IteraçõesLimites
Código Java
IteraçõesLimites
Código Java
Métodos static
Código Java
Métodos staticCom cuidado
Código Java
Mitos
Código Java
Mitos Acesso aos membros
Hierarquia de classes
Enum
Código Java
Mitos Acesso aos membros
Hierarquia de classes
Enum
Compilador JIT
Código Java
Estruturas de dadosTipos apropriados
Código Java
Estruturas de dadosTipos apropriados
Código Java
Estruturas de dadosTipos apropriados
Código Java
Estruturas de dadosInicialização de listas
Código Java
Estruturas de dadosCuidado com o autoboxing
Código Java
BuildersStringBuilder
Código Java
ContextAtenção aos vazamentos de memória
Código Java
Escopo de variáveis
Código Java
Garbage collectorAtenção especial Android 2.3 e anteriores
Código Java
Multitarefa
Código Java
Multitarefa
Código Java
Multitarefa
Código Java
Multitarefa
Código Java
Multitarefa
Código Java
Conheça as bibliotecas
Código Java
Conheça as bibliotecas
Recursos
Layouts<include>
<merge>
Recursos
Layouts<include>
http://developer.android.com/training/improving-layouts/reusing-layouts.html
Recursos
Layouts<include>
http://developer.android.com/training/improving-layouts/reusing-layouts.html
Recursos
LayoutsMaior profundidade = menor performance
Analisando layouts
Perfil renderização
Analisando layouts
Perfil renderização
LinearLayout RelativeLayout
Analisando layouts
Overdraw
Analisando layouts
OverdrawLinearLayout RelativeLayou
t
Recursos
LayoutsMaior profundidade geralmente significa menor performance
ImageView
Bitmaps são pesados!
ImageView
BitmapsOcupam muita memória
ImageView
BitmapsOcupam muita memória
ImageView
BitmapsOcupam muita memória
ImageView
BitmapsOcupam muita memória
ImageView
Exibição dinâmica
ImageView
Cache local
ImageView
Cache em memória
Adapters
Reutilizar layoutsOtimização com ViewHolder
Adapters
Reutilizar layoutsOtimização com ViewHolder
Adapters
Não sobrecarregue o getView!
Informações externas
Protocolos leves
Informações externas
Agilize a exibiçãoSeparando informações básicas das pesadas
Informações externas
Agilize a exibiçãoLazy loading
Informações externas
Agilize a exibiçãoCache
Serviços Externos
LocalizaçãoFused Location Provider
Serviços Externos
Cuidado ao monitorar a localização
Serviços Externos
Cuidado ao monitorar a localizaçãoTempo necessário
Serviços Externos
Cuidado ao monitorar a localizaçãoTempo necessário
Prioridade
Serviços Externos
Cuidado ao monitorar a localizaçãoTempo necessário
Prioridade
Substituição por geofencing
Serviços Externos
Reconhecimento de atividade
Serviços Externos
Reconhecimento de atividadeMudança de temporizadores
Serviços Externos
Reconhecimento de atividadeMudança de temporizadores
Antecipação de ações
Serviços Externos
Push notificationsFuja do pooling!
Leitura Futura
Sending Operations to Multiple Threadshttp://developer.android.com/training/multiple-threads/index.html
Best Practices for Performancehttp://developer.android.com/training/best-performance.html
Android Performance Case Studyhttp://www.curious-creature.org/docs/android-performance-case-study-1.html
Displaying Bitmaps Efficientlyhttp://developer.android.com/training/displaying-bitmaps/index.html
David Tiago Conceição
@davidtiagocon
[email protected]
facebook.com/davidtiagocon
LinkedIn: David Tiago Conceição
Obrigado!