SlideShare uma empresa Scribd logo
1 de 49
Developers
1terça-feira, 10 de setembro de 13
Levando sua app Android
para o próximo nível
Neto Marin
Developer Advocate
google.com/+NetoMarin
2terça-feira, 10 de setembro de 13
3
Sua
foto
aqui
E o que
você
quer ?
3terça-feira, 10 de setembro de 13
Dinheiro...
4
4terça-feira, 10 de setembro de 13
Fama...
5
5terça-feira, 10 de setembro de 13
6
6terça-feira, 10 de setembro de 13
Nós sabemos o que você quer...
7
Sua
App
Sua App
Destaque !
7terça-feira, 10 de setembro de 13
Coleções Exclusivas e Localizadas
8
8terça-feira, 10 de setembro de 13
9
Pode chegar a
um aumento
de 300% no
revenue do app !
9terça-feira, 10 de setembro de 13
10
Wow...
Como consigo
isso pro meu app ?
10terça-feira, 10 de setembro de 13
Destaque de Apps Android
11
• Seguir os guidelines Android
- http://developer.android.com/distribute/
googleplay/quality
- http://developer.android.com/design/index.html
• Ser relevante
• Funcionar !
11terça-feira, 10 de setembro de 13
Como o Google fica sabendo do meu App?
12
Fale com esse cara...
netomarin@google.com
google.com/+NetoMarin
12terça-feira, 10 de setembro de 13
Mantenha sempre o
visual atualizado
13terça-feira, 10 de setembro de 13
O que tem de errado nessa imagem ?
14
14terça-feira, 10 de setembro de 13
Como retirar o menu sem uso ?
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="18" />
15
AndroidManifest.xml
15terça-feira, 10 de setembro de 13
Sempre mantenha a
propriedade
targetSdkVersion com a
última versão disponível.
16terça-feira, 10 de setembro de 13
Action bar
17terça-feira, 10 de setembro de 13
Actions
Podem estar na parte
inferior da tela (split action
bar)
Navigation
<activity
android:uiOptions="splitActionBarWhenNarrow">
Rough
Sizes
Phone
Phone
landscape
Tablet
Bar height 48dp 40dp 56dp
Item width 56dp 56dp 64dp
Organização Geral
18terça-feira, 10 de setembro de 13
Up caret
Navigation drawer
indicator
Empty (home only)
<item name="android:displayOptions">...homeAsUp...</
item>
// OR
ActionBar.setDisplayHomeAsUpEnabled(true);
// OR
<activity parentActivityName=”...”>
ActionBarDrawerToggle
Organização Geral
19terça-feira, 10 de setembro de 13
Logo
Ícone
Empty (avoid)
e.g. Clock
<application android:logo="@drawable/
actionbar_logo">
<style name="ActionBar" parent="...">
<item
name="android:displayOptions">...useLogo...</item>
<item name="android:logo">@drawable/
actionbar_logo</item>
</style>
Organização Geral
20terça-feira, 10 de setembro de 13
Title
Spinner
TABS TABS TABS
[custom layout]
“Stacked bar” separate
row in portrait
e.g. Breadcrumbs in
Google Drive
actionBar.setNavigationMode(ActionBar.NAVIGATI
ON_MODE_LIST);
actionBar.setListNavigationCallbacks(adapter,
this);
actionBar.setNavigationMode(ActionBar.NAVIGATI
ON_MODE_TABS);
actionBar.addTab(actionBar.newTab()
.setText(R.string.title_my_schedule)
.setTabListener(this));
Organização Geral
21terça-feira, 10 de setembro de 13
COM TEXTO SÓ TEXTO showAsAction="...|withText|..."
Pode ter um
submenu
Long-press
mostra tooltip
Custom layout
actionViewClass="android.widget.SearchView"
-- OR --
actionLayout="@layout/foo"
Action providers
actionProviderClass="android.widget.ShareActionProvider"
Expanded/collapsed
showAsAction="...|collapseActionView|..."
Organização Geral
22terça-feira, 10 de setembro de 13
showAsAction="never"
Organização Geral
23terça-feira, 10 de setembro de 13
Melhore suas abas
24
24terça-feira, 10 de setembro de 13
ViewPager
25terça-feira, 10 de setembro de 13
Deixe as coisas um
pouco mais animadas !
26terça-feira, 10 de setembro de 13
Janelas
Transição entre activities
Views
Alpha, escala, rotação, translação
Fragments
Transição enquanto adiciona, remove,
or substitui fragments
Desenhos animáveis
Animações em quadros ou rotações,
escala, etc. outros desenhos
Layouts
Transição quando filhos são adicionados,
removidos
ou suas posições ou tamanhos mudam
Propriedades + valores
objetos
Modifique propriedades como cor de
fundo com o passar do tempo
Coisas que podem ser animadas
27terça-feira, 10 de setembro de 13
Não imponha ao usuário como ele
deve segurar o próprio telefone !
(salvo em casos específicos)
28terça-feira, 10 de setembro de 13
Configurando sua Activity
29
<activity
android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">
AndroidManifest.xml
29terça-feira, 10 de setembro de 13
Tratando a mudança de configuração
30
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}
Activity
30terça-feira, 10 de setembro de 13
Retendo um objeto na mudança
31
@Override
public Object onRetainNonConfigurationInstance() {
    final MyDataObject data = collectMyLoadedData();
    return data;
}
Activity
31terça-feira, 10 de setembro de 13
Recuperando objeto
32
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    final MyDataObject data = (MyDataObject)
getLastNonConfigurationInstance();
    if (data == null) {
        data = loadMyData();
    }
    ...
}
Activity
32terça-feira, 10 de setembro de 13
Aumente sua interação
com o usuário !
33terça-feira, 10 de setembro de 13
Avise o usuário e o leve para a sua app !
34
http://developer.android.com/guide/topics/ui/
notifiers/notifications.html
34terça-feira, 10 de setembro de 13
E saia do básico !
35
35terça-feira, 10 de setembro de 13
Google Cloud Message
36terça-feira, 10 de setembro de 13
O que é o GCM ?
37
Serviço para enviar
mensagens de um
servidor para
dispositivos Android.
37terça-feira, 10 de setembro de 13
Porque GCM ?
38
GCM cuida do servdor backend, cliente móvel, e
mantém uma conexão persistente entre os dois.
Economia significante de bateria, o oposto de cada
app manter o seu framework de sincronização.
Free Sem
Quota
38terça-feira, 10 de setembro de 13
Dê ao usuário, formas diferentes
de acessar o conteúdo da app.
39terça-feira, 10 de setembro de 13
Faça Widgets !
40
http://developer.android.com/guide/topics/
appwidgets/index.html
40terça-feira, 10 de setembro de 13
E também os Lockscreen Widgets
41
41terça-feira, 10 de setembro de 13
E é bem simples....
42
<app-widget-provider ..."
....
android:widgetCategory="keyguard|home_screen"
</app-widget-provider>
AndroidManifest.xml
42terça-feira, 10 de setembro de 13
Customizando o layout
43
Bundle opt = appWidgetManager.getAppWidgetOptions(widgetId);
int cat = opt.getInt(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY, -1);
boolean keyguard = cat = AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD;
int baseLayout = isKeyguard ? R.layout.keyguard_widget_layout :
R.layout.widget_layout;
MyAppProvider
43terça-feira, 10 de setembro de 13
Google+ Sign-In
Porque preencher cadastros é muito chato...
44terça-feira, 10 de setembro de 13
Quais as vantagens ?
45
Facilita o login do usuário,
poupando digitação e
memorização de novas
senhas.
Permita que os usuários
compartilhem conteúdo do
seu app e assim seja
descoberto por mais usuários.
O botão +1 ajuda os
usuários darem sua
aprovação pública ao seu
app, tornando seu conteúdo
mais relevante e confiável.
45terça-feira, 10 de setembro de 13
Over-the-air installs
46
46terça-feira, 10 de setembro de 13
Perguntas e bate-papo
Sua app está pronta para o próximo passo ?
47terça-feira, 10 de setembro de 13
Obrigado !
google.com/+NetoMarin
codigo-google.blogspot.com.br
48terça-feira, 10 de setembro de 13
Developers
49terça-feira, 10 de setembro de 13

Mais conteúdo relacionado

Destaque

ISTS36: Sea Turtles Semi-Automatic Mapping Technics
ISTS36: Sea Turtles Semi-Automatic Mapping TechnicsISTS36: Sea Turtles Semi-Automatic Mapping Technics
ISTS36: Sea Turtles Semi-Automatic Mapping TechnicsGwénaël DUCLOS
 
Catálogo Black Jeans Verão 2016
Catálogo Black Jeans Verão 2016Catálogo Black Jeans Verão 2016
Catálogo Black Jeans Verão 2016Allclick
 
Debian Day – Raspbian
Debian Day – RaspbianDebian Day – Raspbian
Debian Day – RaspbianVitor Garcia
 
Portafolio de dibujos normalizados
Portafolio de dibujos normalizadosPortafolio de dibujos normalizados
Portafolio de dibujos normalizadoskiarangom
 
Strider CD - Deploy Contínuo com JavaScript
Strider CD -  Deploy Contínuo com JavaScriptStrider CD -  Deploy Contínuo com JavaScript
Strider CD - Deploy Contínuo com JavaScriptTaller Negócio Digitais
 
TDC 2011 - Trilha Android - Integrando suas aplicações com as redes sociais.
TDC 2011 - Trilha Android - Integrando suas aplicações com as redes sociais.TDC 2011 - Trilha Android - Integrando suas aplicações com as redes sociais.
TDC 2011 - Trilha Android - Integrando suas aplicações com as redes sociais.Antonio Marin Neto
 
Java Me Touchscreen Just Java2009
Java Me Touchscreen Just Java2009Java Me Touchscreen Just Java2009
Java Me Touchscreen Just Java2009Antonio Marin Neto
 
Comunicação Digital- Aula 3 turma X
Comunicação Digital- Aula 3 turma X Comunicação Digital- Aula 3 turma X
Comunicação Digital- Aula 3 turma X Gabriela Agustini
 
Apresentação Corporativa Abbott
Apresentação Corporativa AbbottApresentação Corporativa Abbott
Apresentação Corporativa AbbottCasulo
 
Beneficiários bolsa familia
Beneficiários bolsa familiaBeneficiários bolsa familia
Beneficiários bolsa familiaRosane Domingues
 
Análise do futuro da logística de cargas
Análise do futuro da logística de cargasAnálise do futuro da logística de cargas
Análise do futuro da logística de cargasJorge Linhares
 
O filme "Entre os muros da escola": teatro da incompetência de um professor
O filme "Entre os muros da escola": teatro da incompetência de um professorO filme "Entre os muros da escola": teatro da incompetência de um professor
O filme "Entre os muros da escola": teatro da incompetência de um professorFlavio Farah
 
OS DESAFIOS DA ERA EXPONENCIAL
OS DESAFIOS DA ERA EXPONENCIALOS DESAFIOS DA ERA EXPONENCIAL
OS DESAFIOS DA ERA EXPONENCIALRobinson Oliveira
 
Internet das Coisas com Raspberry PI - Javaneiros 2014
Internet das Coisas com Raspberry PI - Javaneiros 2014Internet das Coisas com Raspberry PI - Javaneiros 2014
Internet das Coisas com Raspberry PI - Javaneiros 2014Jean Kleemann
 
Berrini-GP7-PMO-Grupo2
Berrini-GP7-PMO-Grupo2Berrini-GP7-PMO-Grupo2
Berrini-GP7-PMO-Grupo2Marco Coghi
 

Destaque (20)

ISTS36: Sea Turtles Semi-Automatic Mapping Technics
ISTS36: Sea Turtles Semi-Automatic Mapping TechnicsISTS36: Sea Turtles Semi-Automatic Mapping Technics
ISTS36: Sea Turtles Semi-Automatic Mapping Technics
 
Horarios urban tenis
Horarios urban tenisHorarios urban tenis
Horarios urban tenis
 
Catálogo Black Jeans Verão 2016
Catálogo Black Jeans Verão 2016Catálogo Black Jeans Verão 2016
Catálogo Black Jeans Verão 2016
 
Introducción ao megalitismo de Marín
Introducción ao megalitismo de MarínIntroducción ao megalitismo de Marín
Introducción ao megalitismo de Marín
 
Debian Day – Raspbian
Debian Day – RaspbianDebian Day – Raspbian
Debian Day – Raspbian
 
Portafolio de dibujos normalizados
Portafolio de dibujos normalizadosPortafolio de dibujos normalizados
Portafolio de dibujos normalizados
 
Strider CD - Deploy Contínuo com JavaScript
Strider CD -  Deploy Contínuo com JavaScriptStrider CD -  Deploy Contínuo com JavaScript
Strider CD - Deploy Contínuo com JavaScript
 
O futuro dos drones na Seguranca Pública
O futuro dos drones na Seguranca PúblicaO futuro dos drones na Seguranca Pública
O futuro dos drones na Seguranca Pública
 
TDC 2011 - Trilha Android - Integrando suas aplicações com as redes sociais.
TDC 2011 - Trilha Android - Integrando suas aplicações com as redes sociais.TDC 2011 - Trilha Android - Integrando suas aplicações com as redes sociais.
TDC 2011 - Trilha Android - Integrando suas aplicações com as redes sociais.
 
Java Me Touchscreen Just Java2009
Java Me Touchscreen Just Java2009Java Me Touchscreen Just Java2009
Java Me Touchscreen Just Java2009
 
Egresadas
EgresadasEgresadas
Egresadas
 
Comunicação Digital- Aula 3 turma X
Comunicação Digital- Aula 3 turma X Comunicação Digital- Aula 3 turma X
Comunicação Digital- Aula 3 turma X
 
Apresentação Corporativa Abbott
Apresentação Corporativa AbbottApresentação Corporativa Abbott
Apresentação Corporativa Abbott
 
Informativo Semanal
Informativo SemanalInformativo Semanal
Informativo Semanal
 
Beneficiários bolsa familia
Beneficiários bolsa familiaBeneficiários bolsa familia
Beneficiários bolsa familia
 
Análise do futuro da logística de cargas
Análise do futuro da logística de cargasAnálise do futuro da logística de cargas
Análise do futuro da logística de cargas
 
O filme "Entre os muros da escola": teatro da incompetência de um professor
O filme "Entre os muros da escola": teatro da incompetência de um professorO filme "Entre os muros da escola": teatro da incompetência de um professor
O filme "Entre os muros da escola": teatro da incompetência de um professor
 
OS DESAFIOS DA ERA EXPONENCIAL
OS DESAFIOS DA ERA EXPONENCIALOS DESAFIOS DA ERA EXPONENCIAL
OS DESAFIOS DA ERA EXPONENCIAL
 
Internet das Coisas com Raspberry PI - Javaneiros 2014
Internet das Coisas com Raspberry PI - Javaneiros 2014Internet das Coisas com Raspberry PI - Javaneiros 2014
Internet das Coisas com Raspberry PI - Javaneiros 2014
 
Berrini-GP7-PMO-Grupo2
Berrini-GP7-PMO-Grupo2Berrini-GP7-PMO-Grupo2
Berrini-GP7-PMO-Grupo2
 

Semelhante a Android App Optimization Guide

AngularJS Abraçando o MVC Client-Side
AngularJS Abraçando o MVC Client-SideAngularJS Abraçando o MVC Client-Side
AngularJS Abraçando o MVC Client-SideSergio Azevedo
 
Android DevConference - Gerenciando a publicação e atualização de 450 apps se...
Android DevConference - Gerenciando a publicação e atualização de 450 apps se...Android DevConference - Gerenciando a publicação e atualização de 450 apps se...
Android DevConference - Gerenciando a publicação e atualização de 450 apps se...iMasters
 
Infraestrutura como código com Puppet e Mcollective
Infraestrutura como código com Puppet e McollectiveInfraestrutura como código com Puppet e Mcollective
Infraestrutura como código com Puppet e McollectiveJose Augusto Carvalho
 
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecerInterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouqueceriMasters
 
Cultura DevOps - Integração entre infra e devel
Cultura DevOps - Integração entre infra e develCultura DevOps - Integração entre infra e devel
Cultura DevOps - Integração entre infra e develJose Augusto Carvalho
 
Wtp floripa web
Wtp floripa webWtp floripa web
Wtp floripa webmeninio
 
Apostila passo a passo como programar em android edição03
Apostila passo a passo como programar em android edição03Apostila passo a passo como programar em android edição03
Apostila passo a passo como programar em android edição03Horacio Diamante Mondlane
 
De idealista à empreendedor - como desenvolver aplicações em android que conq...
De idealista à empreendedor - como desenvolver aplicações em android que conq...De idealista à empreendedor - como desenvolver aplicações em android que conq...
De idealista à empreendedor - como desenvolver aplicações em android que conq...Ramon Ribeiro Rabello
 
SEO para Front-End - BeagaJS
SEO para Front-End - BeagaJSSEO para Front-End - BeagaJS
SEO para Front-End - BeagaJSFabio Ricotta
 

Semelhante a Android App Optimization Guide (20)

AngularJS Abraçando o MVC Client-Side
AngularJS Abraçando o MVC Client-SideAngularJS Abraçando o MVC Client-Side
AngularJS Abraçando o MVC Client-Side
 
Android DevConference - Gerenciando a publicação e atualização de 450 apps se...
Android DevConference - Gerenciando a publicação e atualização de 450 apps se...Android DevConference - Gerenciando a publicação e atualização de 450 apps se...
Android DevConference - Gerenciando a publicação e atualização de 450 apps se...
 
Infraestrutura como código com Puppet e Mcollective
Infraestrutura como código com Puppet e McollectiveInfraestrutura como código com Puppet e Mcollective
Infraestrutura como código com Puppet e Mcollective
 
AGILI
AGILIAGILI
AGILI
 
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecerInterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
InterCon 2016 - Gerenciando deploy e atualização de 450 apps sem enlouquecer
 
Cultura DevOps - Integração entre infra e devel
Cultura DevOps - Integração entre infra e develCultura DevOps - Integração entre infra e devel
Cultura DevOps - Integração entre infra e devel
 
Aplicacoes responsivas
Aplicacoes responsivasAplicacoes responsivas
Aplicacoes responsivas
 
Design Responsivo
Design ResponsivoDesign Responsivo
Design Responsivo
 
Keynote por dentro do bootstrap
Keynote   por dentro do bootstrapKeynote   por dentro do bootstrap
Keynote por dentro do bootstrap
 
Wtp floripa web
Wtp floripa webWtp floripa web
Wtp floripa web
 
Android Libs - AndroidDevConf
Android Libs - AndroidDevConfAndroid Libs - AndroidDevConf
Android Libs - AndroidDevConf
 
Agile Tour 2010
Agile Tour 2010Agile Tour 2010
Agile Tour 2010
 
Relatorio de analise mural tic
Relatorio de analise mural ticRelatorio de analise mural tic
Relatorio de analise mural tic
 
Android - Além do HelloWord
Android - Além do HelloWordAndroid - Além do HelloWord
Android - Além do HelloWord
 
Responsive wordpress
Responsive wordpressResponsive wordpress
Responsive wordpress
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
 
Apostila passo a passo como programar em android edição03
Apostila passo a passo como programar em android edição03Apostila passo a passo como programar em android edição03
Apostila passo a passo como programar em android edição03
 
Agora é Android, Tá Safo?
Agora é Android, Tá Safo? Agora é Android, Tá Safo?
Agora é Android, Tá Safo?
 
De idealista à empreendedor - como desenvolver aplicações em android que conq...
De idealista à empreendedor - como desenvolver aplicações em android que conq...De idealista à empreendedor - como desenvolver aplicações em android que conq...
De idealista à empreendedor - como desenvolver aplicações em android que conq...
 
SEO para Front-End - BeagaJS
SEO para Front-End - BeagaJSSEO para Front-End - BeagaJS
SEO para Front-End - BeagaJS
 

Mais de iMasters

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroiMasters
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesiMasters
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesiMasters
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...iMasters
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesiMasters
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsiMasters
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...iMasters
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudiMasters
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza LeiteiMasters
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesiMasters
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosiMasters
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeiMasters
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle MonteiroiMasters
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujoriMasters
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaiMasters
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiiMasters
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...iMasters
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisiMasters
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoiMasters
 

Mais de iMasters (20)

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio Telles
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen Moraes
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita Bernardes
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato Groffe
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio Maujor
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina Karklis
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe Regalgo
 

Android App Optimization Guide

  • 2. Levando sua app Android para o próximo nível Neto Marin Developer Advocate google.com/+NetoMarin 2terça-feira, 10 de setembro de 13
  • 3. 3 Sua foto aqui E o que você quer ? 3terça-feira, 10 de setembro de 13
  • 6. 6 6terça-feira, 10 de setembro de 13
  • 7. Nós sabemos o que você quer... 7 Sua App Sua App Destaque ! 7terça-feira, 10 de setembro de 13
  • 8. Coleções Exclusivas e Localizadas 8 8terça-feira, 10 de setembro de 13
  • 9. 9 Pode chegar a um aumento de 300% no revenue do app ! 9terça-feira, 10 de setembro de 13
  • 10. 10 Wow... Como consigo isso pro meu app ? 10terça-feira, 10 de setembro de 13
  • 11. Destaque de Apps Android 11 • Seguir os guidelines Android - http://developer.android.com/distribute/ googleplay/quality - http://developer.android.com/design/index.html • Ser relevante • Funcionar ! 11terça-feira, 10 de setembro de 13
  • 12. Como o Google fica sabendo do meu App? 12 Fale com esse cara... netomarin@google.com google.com/+NetoMarin 12terça-feira, 10 de setembro de 13
  • 13. Mantenha sempre o visual atualizado 13terça-feira, 10 de setembro de 13
  • 14. O que tem de errado nessa imagem ? 14 14terça-feira, 10 de setembro de 13
  • 15. Como retirar o menu sem uso ? <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="18" /> 15 AndroidManifest.xml 15terça-feira, 10 de setembro de 13
  • 16. Sempre mantenha a propriedade targetSdkVersion com a última versão disponível. 16terça-feira, 10 de setembro de 13
  • 17. Action bar 17terça-feira, 10 de setembro de 13
  • 18. Actions Podem estar na parte inferior da tela (split action bar) Navigation <activity android:uiOptions="splitActionBarWhenNarrow"> Rough Sizes Phone Phone landscape Tablet Bar height 48dp 40dp 56dp Item width 56dp 56dp 64dp Organização Geral 18terça-feira, 10 de setembro de 13
  • 19. Up caret Navigation drawer indicator Empty (home only) <item name="android:displayOptions">...homeAsUp...</ item> // OR ActionBar.setDisplayHomeAsUpEnabled(true); // OR <activity parentActivityName=”...”> ActionBarDrawerToggle Organização Geral 19terça-feira, 10 de setembro de 13
  • 20. Logo Ícone Empty (avoid) e.g. Clock <application android:logo="@drawable/ actionbar_logo"> <style name="ActionBar" parent="..."> <item name="android:displayOptions">...useLogo...</item> <item name="android:logo">@drawable/ actionbar_logo</item> </style> Organização Geral 20terça-feira, 10 de setembro de 13
  • 21. Title Spinner TABS TABS TABS [custom layout] “Stacked bar” separate row in portrait e.g. Breadcrumbs in Google Drive actionBar.setNavigationMode(ActionBar.NAVIGATI ON_MODE_LIST); actionBar.setListNavigationCallbacks(adapter, this); actionBar.setNavigationMode(ActionBar.NAVIGATI ON_MODE_TABS); actionBar.addTab(actionBar.newTab() .setText(R.string.title_my_schedule) .setTabListener(this)); Organização Geral 21terça-feira, 10 de setembro de 13
  • 22. COM TEXTO SÓ TEXTO showAsAction="...|withText|..." Pode ter um submenu Long-press mostra tooltip Custom layout actionViewClass="android.widget.SearchView" -- OR -- actionLayout="@layout/foo" Action providers actionProviderClass="android.widget.ShareActionProvider" Expanded/collapsed showAsAction="...|collapseActionView|..." Organização Geral 22terça-feira, 10 de setembro de 13
  • 24. Melhore suas abas 24 24terça-feira, 10 de setembro de 13
  • 26. Deixe as coisas um pouco mais animadas ! 26terça-feira, 10 de setembro de 13
  • 27. Janelas Transição entre activities Views Alpha, escala, rotação, translação Fragments Transição enquanto adiciona, remove, or substitui fragments Desenhos animáveis Animações em quadros ou rotações, escala, etc. outros desenhos Layouts Transição quando filhos são adicionados, removidos ou suas posições ou tamanhos mudam Propriedades + valores objetos Modifique propriedades como cor de fundo com o passar do tempo Coisas que podem ser animadas 27terça-feira, 10 de setembro de 13
  • 28. Não imponha ao usuário como ele deve segurar o próprio telefone ! (salvo em casos específicos) 28terça-feira, 10 de setembro de 13
  • 29. Configurando sua Activity 29 <activity android:name=".MyActivity"           android:configChanges="orientation|keyboardHidden"           android:label="@string/app_name"> AndroidManifest.xml 29terça-feira, 10 de setembro de 13
  • 30. Tratando a mudança de configuração 30 @Override public void onConfigurationChanged(Configuration newConfig) {     super.onConfigurationChanged(newConfig);     // Checks the orientation of the screen     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {         Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();     } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){         Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();     } } Activity 30terça-feira, 10 de setembro de 13
  • 31. Retendo um objeto na mudança 31 @Override public Object onRetainNonConfigurationInstance() {     final MyDataObject data = collectMyLoadedData();     return data; } Activity 31terça-feira, 10 de setembro de 13
  • 32. Recuperando objeto 32 @Override public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);     final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();     if (data == null) {         data = loadMyData();     }     ... } Activity 32terça-feira, 10 de setembro de 13
  • 33. Aumente sua interação com o usuário ! 33terça-feira, 10 de setembro de 13
  • 34. Avise o usuário e o leve para a sua app ! 34 http://developer.android.com/guide/topics/ui/ notifiers/notifications.html 34terça-feira, 10 de setembro de 13
  • 35. E saia do básico ! 35 35terça-feira, 10 de setembro de 13
  • 36. Google Cloud Message 36terça-feira, 10 de setembro de 13
  • 37. O que é o GCM ? 37 Serviço para enviar mensagens de um servidor para dispositivos Android. 37terça-feira, 10 de setembro de 13
  • 38. Porque GCM ? 38 GCM cuida do servdor backend, cliente móvel, e mantém uma conexão persistente entre os dois. Economia significante de bateria, o oposto de cada app manter o seu framework de sincronização. Free Sem Quota 38terça-feira, 10 de setembro de 13
  • 39. Dê ao usuário, formas diferentes de acessar o conteúdo da app. 39terça-feira, 10 de setembro de 13
  • 41. E também os Lockscreen Widgets 41 41terça-feira, 10 de setembro de 13
  • 42. E é bem simples.... 42 <app-widget-provider ..." .... android:widgetCategory="keyguard|home_screen" </app-widget-provider> AndroidManifest.xml 42terça-feira, 10 de setembro de 13
  • 43. Customizando o layout 43 Bundle opt = appWidgetManager.getAppWidgetOptions(widgetId); int cat = opt.getInt(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY, -1); boolean keyguard = cat = AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD; int baseLayout = isKeyguard ? R.layout.keyguard_widget_layout : R.layout.widget_layout; MyAppProvider 43terça-feira, 10 de setembro de 13
  • 44. Google+ Sign-In Porque preencher cadastros é muito chato... 44terça-feira, 10 de setembro de 13
  • 45. Quais as vantagens ? 45 Facilita o login do usuário, poupando digitação e memorização de novas senhas. Permita que os usuários compartilhem conteúdo do seu app e assim seja descoberto por mais usuários. O botão +1 ajuda os usuários darem sua aprovação pública ao seu app, tornando seu conteúdo mais relevante e confiável. 45terça-feira, 10 de setembro de 13
  • 47. Perguntas e bate-papo Sua app está pronta para o próximo passo ? 47terça-feira, 10 de setembro de 13