SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Construindo aplicações de alto impacto: dicas de
otimização e performance
Fernando Oliveira | Mobile Applications Developer

NYX Knowledge
Fernando Oliveira
Web e Mobile Developer
Skills:
Desenvolvimento backend com Java, Ruby e Python
Desenvolvimento mobile nativo para Android e iOS
fernandooliveira@nyxk.com.br
nandooliveira.al@gmail.com
+FernandoOliveira3
Mobile Developer
Easy Doctor
www.easydr.com.br
Partner and Developer
Sr. Seguro
www.srseguro.com.br
Por que otimizar?
Usuários são
impacientes
2% dos usuários vão pensar:
Fiz alguma coisa errada!
Os outros 98% dos usuário pensam:
Essa aplicação é ruim!
Dispositivos
• Vários tipos de hardware
• Diferentes versões da
VM
• Diferentes
processadores com
diferentes velocidades.
Algumas Causas
• Operações matemáticas pesadas
• I/O
• Rede
Nunca faça isso na UI
Thread
User Interface
• Informe ao usuário o que está
acontecendo!
• Torne suas operações
canceláveis!
Algumas dicas de UI
• Lazy Load
• Não impeça o usuário de fazer outras coisas
• User Spinners
• Se demorar mais que 200 milissegundos use um spinner
ou ProgressDialog
• Pixel (px) vs. Density-Independent Pixel (dp) vs. Scale-
Independent Pixel (sp)
Mais dicas de interface
• A altura da View deve ser de pelo menos 48dp. Espaço
aproximado ocupado por um dedo masculino;
• O espaçamento recomendado entre duas Views, por
exemplo um TextView e EditText, é de 8dp;
• Os tamanhos de fontes recomendados são 12sp, 14sp,
18sp e 22sp;
• Cores vermelhas e verdes podem ser indistinguíveis para
usuários daltônicos. Leve isto em consideração ao
planejar o design do seu app.
Regras básicas para
um código eficiente
1. Não faça algo que
você não precisa
fazer!



2. Não aloque memória
se você puder evitar
isso!
Evite criar objetos desnecessariamente
• Criação de objetos sempre tem um custo.
• Uma grande alocação de objetos acarreta uma maior
frequência de execução do Garbage Collector.
Evite criar objetos desnecessariamente
• Um Array de "ints" é muito melhor que um array de
“Integers"
• Dois arrays paralelos de “ints" também são bem mais
eficientes que um array (int, int).
• Essas regras valem para todos os tipos primitivos.
Evite getters e setters internamente
• Deve-se seguir os padrões de orientação a
objetos e ter getters e setters na interface
pública mas dentro da classe deve-se sempre
acessar os campos diretamente.
• Sem JIT acesso direto as variáveis é cerca de 3x
mais rápido que usar um método getter.
• Com JIT esse acesso pode ser até 7x mais
rápido.
Use Enhanced
For Loop
Considere Package ao invés de acesso privado
para classes internas
Evite utilizar números de ponto flutuante
• Floating-points são cerca
de 2x mais lentos que
Integers em dispositivos
Android.
Passive location provider
• O Android consegue aproveitar localizações obtidas por
outros aplicativos.
Sempre mensure
• Antes de começar a otimizar
certifique-se de que você tem um
problema.
• Certifique-se de que é possível ter
uma medição eficaz da performance
atual, caso contrário você não
saberá se as medidas que você
tomou surtiram efeito.
Traceview
http://developer.android.com/tools/help/traceview.html
Obrigado!
+FernandoOliveira3
fernandooliveira@nyxk.com.br
nandooliveira.al@gmail.com

Mais conteúdo relacionado

Semelhante a Android: Aplicações de Alto Impacto - GDG Maceió

5º ck o java e o android no iot
5º ck o java e o android no iot5º ck o java e o android no iot
5º ck o java e o android no iotHeider Lopes
 
Utilizando ferramentas de análise, testes e verificação de bugs no desenvolvi...
Utilizando ferramentas de análise, testes e verificação de bugs no desenvolvi...Utilizando ferramentas de análise, testes e verificação de bugs no desenvolvi...
Utilizando ferramentas de análise, testes e verificação de bugs no desenvolvi...Douglas Leandro Kleinkauf
 
Workshop Arduino SETi 2014
Workshop Arduino SETi 2014Workshop Arduino SETi 2014
Workshop Arduino SETi 2014Lucas Cabral
 
Desenvolvimento Mobile
Desenvolvimento MobileDesenvolvimento Mobile
Desenvolvimento MobileElton Minetto
 
Prototipação rápida - Rails e Arduino
Prototipação rápida - Rails e ArduinoPrototipação rápida - Rails e Arduino
Prototipação rápida - Rails e ArduinoDaner dos Reis
 
Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoPaulo Henrique da Silva
 
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ..."Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...Cesar Augusto Nogueira
 
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Marcelo Marques Gonçalves
 
Memorias das trincheiras
Memorias das trincheirasMemorias das trincheiras
Memorias das trincheirasElton Minetto
 
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Douglas Fischer
 
Curso de Android - Módulo 11
Curso de Android - Módulo 11Curso de Android - Módulo 11
Curso de Android - Módulo 11Luiz Duarte
 
Phonegap - self RJ
Phonegap - self RJPhonegap - self RJ
Phonegap - self RJjavamanrj
 
Testes de Software - Módulo 1
Testes de Software - Módulo 1Testes de Software - Módulo 1
Testes de Software - Módulo 1Rodrigo Paes
 
Devops Summit Brasil 2016 - Application Insights
Devops Summit Brasil 2016 - Application InsightsDevops Summit Brasil 2016 - Application Insights
Devops Summit Brasil 2016 - Application InsightsAbner das Dores
 
Voce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infraVoce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infraCDS
 
Introdução a Microservices com Node.JS
Introdução  a Microservices com Node.JSIntrodução  a Microservices com Node.JS
Introdução a Microservices com Node.JSEduardo Nunes Pereira
 

Semelhante a Android: Aplicações de Alto Impacto - GDG Maceió (20)

5º ck o java e o android no iot
5º ck o java e o android no iot5º ck o java e o android no iot
5º ck o java e o android no iot
 
Utilizando ferramentas de análise, testes e verificação de bugs no desenvolvi...
Utilizando ferramentas de análise, testes e verificação de bugs no desenvolvi...Utilizando ferramentas de análise, testes e verificação de bugs no desenvolvi...
Utilizando ferramentas de análise, testes e verificação de bugs no desenvolvi...
 
Workshop Arduino SETi 2014
Workshop Arduino SETi 2014Workshop Arduino SETi 2014
Workshop Arduino SETi 2014
 
Desenvolvimento Mobile
Desenvolvimento MobileDesenvolvimento Mobile
Desenvolvimento Mobile
 
10102015164828
1010201516482810102015164828
10102015164828
 
Prototipação rápida - Rails e Arduino
Prototipação rápida - Rails e ArduinoPrototipação rápida - Rails e Arduino
Prototipação rápida - Rails e Arduino
 
IoT vista como um sistema nervoso
IoT vista como um sistema nervosoIoT vista como um sistema nervoso
IoT vista como um sistema nervoso
 
Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimento
 
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ..."Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
 
O teste atualmente
O teste atualmenteO teste atualmente
O teste atualmente
 
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
 
Memorias das trincheiras
Memorias das trincheirasMemorias das trincheiras
Memorias das trincheiras
 
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
 
Curso de Android - Módulo 11
Curso de Android - Módulo 11Curso de Android - Módulo 11
Curso de Android - Módulo 11
 
Phonegap - self RJ
Phonegap - self RJPhonegap - self RJ
Phonegap - self RJ
 
Testes de Software - Módulo 1
Testes de Software - Módulo 1Testes de Software - Módulo 1
Testes de Software - Módulo 1
 
Devops Summit Brasil 2016 - Application Insights
Devops Summit Brasil 2016 - Application InsightsDevops Summit Brasil 2016 - Application Insights
Devops Summit Brasil 2016 - Application Insights
 
Usabilidade1
Usabilidade1Usabilidade1
Usabilidade1
 
Voce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infraVoce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infra
 
Introdução a Microservices com Node.JS
Introdução  a Microservices com Node.JSIntrodução  a Microservices com Node.JS
Introdução a Microservices com Node.JS
 

Android: Aplicações de Alto Impacto - GDG Maceió

  • 1. Construindo aplicações de alto impacto: dicas de otimização e performance Fernando Oliveira | Mobile Applications Developer NYX Knowledge
  • 2. Fernando Oliveira Web e Mobile Developer Skills: Desenvolvimento backend com Java, Ruby e Python Desenvolvimento mobile nativo para Android e iOS fernandooliveira@nyxk.com.br nandooliveira.al@gmail.com +FernandoOliveira3
  • 4. Partner and Developer Sr. Seguro www.srseguro.com.br
  • 5.
  • 8. 2% dos usuários vão pensar: Fiz alguma coisa errada! Os outros 98% dos usuário pensam: Essa aplicação é ruim!
  • 9. Dispositivos • Vários tipos de hardware • Diferentes versões da VM • Diferentes processadores com diferentes velocidades.
  • 10. Algumas Causas • Operações matemáticas pesadas • I/O • Rede Nunca faça isso na UI Thread
  • 11. User Interface • Informe ao usuário o que está acontecendo! • Torne suas operações canceláveis!
  • 12. Algumas dicas de UI • Lazy Load • Não impeça o usuário de fazer outras coisas • User Spinners • Se demorar mais que 200 milissegundos use um spinner ou ProgressDialog • Pixel (px) vs. Density-Independent Pixel (dp) vs. Scale- Independent Pixel (sp)
  • 13. Mais dicas de interface • A altura da View deve ser de pelo menos 48dp. Espaço aproximado ocupado por um dedo masculino; • O espaçamento recomendado entre duas Views, por exemplo um TextView e EditText, é de 8dp; • Os tamanhos de fontes recomendados são 12sp, 14sp, 18sp e 22sp; • Cores vermelhas e verdes podem ser indistinguíveis para usuários daltônicos. Leve isto em consideração ao planejar o design do seu app.
  • 14. Regras básicas para um código eficiente 1. Não faça algo que você não precisa fazer!
 
 2. Não aloque memória se você puder evitar isso!
  • 15. Evite criar objetos desnecessariamente • Criação de objetos sempre tem um custo. • Uma grande alocação de objetos acarreta uma maior frequência de execução do Garbage Collector.
  • 16. Evite criar objetos desnecessariamente • Um Array de "ints" é muito melhor que um array de “Integers" • Dois arrays paralelos de “ints" também são bem mais eficientes que um array (int, int). • Essas regras valem para todos os tipos primitivos.
  • 17. Evite getters e setters internamente • Deve-se seguir os padrões de orientação a objetos e ter getters e setters na interface pública mas dentro da classe deve-se sempre acessar os campos diretamente. • Sem JIT acesso direto as variáveis é cerca de 3x mais rápido que usar um método getter. • Com JIT esse acesso pode ser até 7x mais rápido.
  • 19. Considere Package ao invés de acesso privado para classes internas
  • 20. Evite utilizar números de ponto flutuante • Floating-points são cerca de 2x mais lentos que Integers em dispositivos Android.
  • 21. Passive location provider • O Android consegue aproveitar localizações obtidas por outros aplicativos.
  • 22. Sempre mensure • Antes de começar a otimizar certifique-se de que você tem um problema. • Certifique-se de que é possível ter uma medição eficaz da performance atual, caso contrário você não saberá se as medidas que você tomou surtiram efeito.