SlideShare uma empresa Scribd logo
1 de 50
androidiana
Alberto Souza


• @alberto_souza
• github.com/asouza
Parsear json

• Implementação padrão do
  Android(org.json)
• GSON
• Outros zilhões
try {

                  JSONObject imoveisComTotal = new


                       JSON-Java
JSONObject(imoveisJSON);

                      JSONArray jsonArrayDeImoveis = imoveisComTotal

                                  .getJSONArray("imoveis");



                      for (int i = 0; i < jsonArrayDeImoveis.length();
i++) {



                            JSONObject jsonObjectDoImovel = new
JSONObject(


jsonArrayDeImoveis.getJSONObject(i).toString());



                            JSONObject jsonImovel = new JSONObject(


jsonObjectDoImovel.getString("imovel"));

                        Imovel imovel =
criaImovelEmFuncaoDo(jsonImovel);
Braçal


• Deu trabalho então me entregue uma
  vantagem
GSON


private final static Gson gson = new Gson();

gson.toJson(serializable);
Justo

• Suporta as situações mais comuns
• Mas ainda achei meio lento
• Tem que ter o modelo compatível
Benchmarks

• Todos mentirosos :)
• https://github.com/eishay/jvm-serializers
• http://martinadamek.com/2011/01/31/comparison-
JACKSON


     ObjectMapper mapper = new ObjectMapper();

      TodosImoveis todosImoveis =
mapper.readValue(imoveisJSON,TodosImoveis.class);
• Suporta as situações mais comuns
• Mais fléxivel em relação ao mapeamento,
  atributo ou getter/setter
• Realmente foi mais rápido.
Fallback esperto
    @JsonAnySetter

    public void handleUnknown(String key, Object value)
{

         if (key.equals("fallback_url")) {

              this.linkOriginal = value.toString();

         }

    }
try{
                     Modo hard
                        JsonFactory f = new JsonFactory();

                      JsonGenerator g = f.createJsonGenerator(new
StringWriter());



                      g.writeStartObject();

                      g.writeObjectFieldStart("imovel");

                      g.writeStringField("titulo","Casa de praia em
salvador");

                      g.writeStringField("descricao", "Joe");


                      g.writeEndObject(); // for field 'name'


                      g.close(); // important: will force flushing
of output, close underlying output stream

              }
• Bem mais rápido
• Tem que ler na ordem dos campos do json
• Tudo braçal
• Como fazer os requests?
• Faz só o básico
• Tentativa de conexão não deu certo
Vai perder fácil?
• Pedir a resposta gzipada?
• Tempo máximo de espera
Deixar esperando
Feedback
                         try {

                              new
BuscaProximos(proximosFragment)


.buscaAPagina(calculaPaginaAtual());

                         } catch
(LocationProvidersOffException e) {

                              new
GPSAlert(proximosFragment).show();

                         }
• Configurações prontas
HttpConnectionParams.setSocketBufferSize(httpParams,
DEFAULT_SOCKET_BUFFER_SIZE);




                       Código
                    HttpProtocolParams.setVersion(httpParams,
HttpVersion.HTTP_1_1);

                    HttpProtocolParams.setUserAgent(httpParams,
String.format("android-async-http/%s (http://loopj.com/android-
async-http)", VERSION));



                    SchemeRegistry schemeRegistry = new
SchemeRegistry();

                    schemeRegistry.register(new Scheme("http",
PlainSocketFactory.getSocketFactory(), 80));

                    schemeRegistry.register(new Scheme("https",
SSLSocketFactory.getSocketFactory(), 443));

                    ThreadSafeClientConnManager cm = new
ThreadSafeClientConnManager(httpParams, schemeRegistry);



                    httpContext = new SyncBasicHttpContext(new
BasicHttpContext());

                    httpClient = new DefaultHttpClient(cm,
• Retry pronto
• Tempo máximo configurado
• GZIP
• Handler para binário
Simples de usar



          AsyncHttpClient client = new
AsyncHttpClient();

          client.get(url,tratadorDoRetorno);
Handler padrão

          DefaultRequestHandler<TodosImoveis>
imoveisEncontradosHandler = new
DefaultRequestHandler<TodosImoveis>() {



               @Override

               public void onSucess(TodosImoveis result)
{


BuscaPeloFiltroTask.this.onPostExecute(result);

               }



         //onError...
do android



public void execute(Integer... params) {

     enganaOCaraEUsaOutraLib(params);

}
Customizando


          AsyncHttpClient client = new
AsyncHttpClient();



          DefaultHttpClient defaultClient =
(DefaultHttpClient) client.getHttpClient();



          HttpRequestRetryHandler retryHandler =
defaultClient.getHttpRequestRetryHandler();



          client.get(url,handler);
Um pouco de
       performance


• Carregar imagens por exemplo
Cache


• Tamanho do cache
Problemas

• Expiração
• Memória
• Tamanho
Baseado no aparelho


• Cache pronto para usar nas apps android
LRUCache


          final int memClass = ((ActivityManager) this


.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryCl
ass();

          int memoryInBytes = 1024 * 1024 * memClass;

          final int cacheSize = memoryInBytes / 8;

          cache = new LruCache<String,Bitmap>(maxSize);
Tamanho das entradas
     do cache


• Como fazemos?
comportamento


             cache = new LruCache<String,Bitmap>(maxSize) {

                 protected int sizeOf(String key, Bitmap
bitmap) {

                      return bitmap.getByteCount();

                 };

            };
Pontos lentos


• Como descobrir?
App que consome
         serviço


• Vai olhar o serviço
Profile


• Vamos chorar
StrictMode

               StrictMode.setThreadPolicy(new
StrictMode.ThreadPolicy.Builder()

                       .detectDiskReads()

                       .detectDiskWrites()

                       .detectNetwork()

                       .penaltyLog()

                       .build());

               StrictMode.setVmPolicy(new
StrictMode.VmPolicy.Builder()

                       .detectLeakedSqlLiteObjects()

                       .detectLeakedClosableObjects()

                       .penaltyLog()

                       .build());
Reclamação
android.database.CursorWrapper.moveToFirst(CursorWrapper.java:65)

      04-05 11:07:54.598: E/StrictMode(6032):   at
android_maps_conflict_avoidance.com.google.common.android.AndroidConfi
g.getSetting(AndroidConfig.java:219)

      04-05 11:07:54.598: E/StrictMode(6032):   at
android_maps_conflict_avoidance.com.google.common.android.AndroidConfi
g.getDistributionChannelInternal(AndroidConfig.java:197)

      04-05 11:07:54.598: E/StrictMode(6032):   at
android_maps_conflict_avoidance.com.google.common.Config.init(Config.j
ava:273)

      04-05 11:07:54.598: E/StrictMode(6032):   at
android_maps_conflict_avoidance.com.google.common.android.AndroidConfi
g.<init>(AndroidConfig.java:100)

      04-05 11:07:54.598: E/StrictMode(6032):   at
android_maps_conflict_avoidance.com.google.common.android.AndroidConfi
g.<init>(AndroidConfig.java:87)

      04-05 11:07:54.598: E/StrictMode(6032):   at
com.google.android.maps.MapActivity.onCreate(MapActivity.java:419)

      04-05 11:07:54.598: E/StrictMode(6032):   at
android.support.v4.app.FragmentActivity.onCreate(Unknown Source)

      04-05 11:07:54.598: E/StrictMode(6032):   at
br.com.homehunter.infra.UseStorageFragmentActivity.onCreate(UseStorage
FragmentActivity.java:14)

      04-05 11:07:54.598: E/StrictMode(6032):   at
Mais profile


• Traceview
Marca os pontos


     public void buscaAPagina(int pagina) throws
LocationProvidersOffException{

           Debug.startMethodTracing("buscaPagina");

       //possivel código ruim aqui

       Debug.stopMethodTracing();

   }
Busca o arquivo



./adb pull /sdcard/buscaPagina.trace /tmp



./traceview /tmp/buscaPagina
Agora vai caçar
Comandos para o
      emulador


• DDMS/Emulator control
Mas...


• Já tentou controlar a bateria?
• E quando subiu o emulador com o tamanho
  errado
Chique


• Conectar no emulador via telnet
Comando
coisas a mais



power capacity 20


window scale 0.5
Valeu!
 @alberto_souza
github.com/asouza

Mais conteúdo relacionado

Mais procurados

Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)
JugVale
 
Ajax O Objeto Xml Http Request Parte 3
Ajax   O Objeto Xml Http Request   Parte 3Ajax   O Objeto Xml Http Request   Parte 3
Ajax O Objeto Xml Http Request Parte 3
infinitopublicidade
 

Mais procurados (20)

Desvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor AndroidDesvendando as ferramentas e serviços para o desenvolvedor Android
Desvendando as ferramentas e serviços para o desenvolvedor Android
 
Threads e Estruturas de dados
Threads e Estruturas de dadosThreads e Estruturas de dados
Threads e Estruturas de dados
 
JavaScript - De verdade
JavaScript - De verdadeJavaScript - De verdade
JavaScript - De verdade
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo Branas
 
Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)Hibernate efetivo (COALTI-2014 / ALJUG)
Hibernate efetivo (COALTI-2014 / ALJUG)
 
OOP ObjC
OOP ObjCOOP ObjC
OOP ObjC
 
Ajax em java
Ajax em javaAjax em java
Ajax em java
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)
 
Jug bizus
Jug   bizusJug   bizus
Jug bizus
 
Node.js: serious business
Node.js: serious businessNode.js: serious business
Node.js: serious business
 
JavaScript Hacks
JavaScript HacksJavaScript Hacks
JavaScript Hacks
 
Ajax O Objeto Xml Http Request Parte 3
Ajax   O Objeto Xml Http Request   Parte 3Ajax   O Objeto Xml Http Request   Parte 3
Ajax O Objeto Xml Http Request Parte 3
 
Floggy-JustJava-2008-09-10
Floggy-JustJava-2008-09-10Floggy-JustJava-2008-09-10
Floggy-JustJava-2008-09-10
 
Programação functional reativa: lidando com código assíncrono
Programação functional reativa: lidando com código assíncronoProgramação functional reativa: lidando com código assíncrono
Programação functional reativa: lidando com código assíncrono
 
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
LaravelSP - MySQL 5.7: introdução ao JSON Data TypeLaravelSP - MySQL 5.7: introdução ao JSON Data Type
LaravelSP - MySQL 5.7: introdução ao JSON Data Type
 
Introdução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slidesIntrodução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slides
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Grails - Destaques (para quem já sabe Java)
Grails - Destaques (para quem já sabe Java)Grails - Destaques (para quem já sabe Java)
Grails - Destaques (para quem já sabe Java)
 

Semelhante a Mobileconf dicas-android

Spring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webSpring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento web
elliando dias
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage api
Suissa
 

Semelhante a Mobileconf dicas-android (20)

TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
 
Fisl 11 - Ecossistema Ruby on Rails
Fisl 11 - Ecossistema Ruby on RailsFisl 11 - Ecossistema Ruby on Rails
Fisl 11 - Ecossistema Ruby on Rails
 
Apresentação sobre MVVMC
Apresentação sobre MVVMCApresentação sobre MVVMC
Apresentação sobre MVVMC
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webapps
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
Data mapping com Groovy - Part 2
Data mapping com Groovy - Part 2Data mapping com Groovy - Part 2
Data mapping com Groovy - Part 2
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojs
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Android na Prática
Android na PráticaAndroid na Prática
Android na Prática
 
JPA - Java Persistence API
JPA - Java Persistence APIJPA - Java Persistence API
JPA - Java Persistence API
 
Testes integrados automatizados
Testes integrados automatizadosTestes integrados automatizados
Testes integrados automatizados
 
Javascript Ilegível
Javascript IlegívelJavascript Ilegível
Javascript Ilegível
 
Oficina Android - Games com AndEngine - Dia 3
Oficina Android - Games com AndEngine - Dia 3Oficina Android - Games com AndEngine - Dia 3
Oficina Android - Games com AndEngine - Dia 3
 
Spring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento webSpring + Tapestry Um novo paradigma de desenvolvimento web
Spring + Tapestry Um novo paradigma de desenvolvimento web
 
Power mock
Power mockPower mock
Power mock
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage api
 
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EEJavaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
RMI em Java
RMI em JavaRMI em Java
RMI em Java
 

Último

Último (9)

Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Mobileconf dicas-android

  • 3. Parsear json • Implementação padrão do Android(org.json) • GSON • Outros zilhões
  • 4. try { JSONObject imoveisComTotal = new JSON-Java JSONObject(imoveisJSON); JSONArray jsonArrayDeImoveis = imoveisComTotal .getJSONArray("imoveis"); for (int i = 0; i < jsonArrayDeImoveis.length(); i++) { JSONObject jsonObjectDoImovel = new JSONObject( jsonArrayDeImoveis.getJSONObject(i).toString()); JSONObject jsonImovel = new JSONObject( jsonObjectDoImovel.getString("imovel")); Imovel imovel = criaImovelEmFuncaoDo(jsonImovel);
  • 5. Braçal • Deu trabalho então me entregue uma vantagem
  • 6. GSON private final static Gson gson = new Gson(); gson.toJson(serializable);
  • 7. Justo • Suporta as situações mais comuns • Mas ainda achei meio lento • Tem que ter o modelo compatível
  • 8. Benchmarks • Todos mentirosos :) • https://github.com/eishay/jvm-serializers • http://martinadamek.com/2011/01/31/comparison-
  • 9. JACKSON ObjectMapper mapper = new ObjectMapper(); TodosImoveis todosImoveis = mapper.readValue(imoveisJSON,TodosImoveis.class);
  • 10. • Suporta as situações mais comuns • Mais fléxivel em relação ao mapeamento, atributo ou getter/setter • Realmente foi mais rápido.
  • 11. Fallback esperto @JsonAnySetter public void handleUnknown(String key, Object value) { if (key.equals("fallback_url")) { this.linkOriginal = value.toString(); } }
  • 12. try{ Modo hard JsonFactory f = new JsonFactory(); JsonGenerator g = f.createJsonGenerator(new StringWriter()); g.writeStartObject(); g.writeObjectFieldStart("imovel"); g.writeStringField("titulo","Casa de praia em salvador"); g.writeStringField("descricao", "Joe"); g.writeEndObject(); // for field 'name' g.close(); // important: will force flushing of output, close underlying output stream }
  • 13. • Bem mais rápido • Tem que ler na ordem dos campos do json • Tudo braçal
  • 14. • Como fazer os requests?
  • 15. • Faz só o básico
  • 16. • Tentativa de conexão não deu certo
  • 18. • Pedir a resposta gzipada?
  • 19. • Tempo máximo de espera
  • 21. Feedback try { new BuscaProximos(proximosFragment) .buscaAPagina(calculaPaginaAtual()); } catch (LocationProvidersOffException e) { new GPSAlert(proximosFragment).show(); }
  • 23. HttpConnectionParams.setSocketBufferSize(httpParams, DEFAULT_SOCKET_BUFFER_SIZE); Código HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1); HttpProtocolParams.setUserAgent(httpParams, String.format("android-async-http/%s (http://loopj.com/android- async-http)", VERSION)); SchemeRegistry schemeRegistry = new SchemeRegistry(); schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443)); ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(httpParams, schemeRegistry); httpContext = new SyncBasicHttpContext(new BasicHttpContext()); httpClient = new DefaultHttpClient(cm,
  • 24. • Retry pronto • Tempo máximo configurado • GZIP • Handler para binário
  • 25. Simples de usar AsyncHttpClient client = new AsyncHttpClient(); client.get(url,tratadorDoRetorno);
  • 26. Handler padrão DefaultRequestHandler<TodosImoveis> imoveisEncontradosHandler = new DefaultRequestHandler<TodosImoveis>() { @Override public void onSucess(TodosImoveis result) { BuscaPeloFiltroTask.this.onPostExecute(result); } //onError...
  • 27. do android public void execute(Integer... params) { enganaOCaraEUsaOutraLib(params); }
  • 28. Customizando AsyncHttpClient client = new AsyncHttpClient(); DefaultHttpClient defaultClient = (DefaultHttpClient) client.getHttpClient(); HttpRequestRetryHandler retryHandler = defaultClient.getHttpRequestRetryHandler(); client.get(url,handler);
  • 29. Um pouco de performance • Carregar imagens por exemplo
  • 32. Baseado no aparelho • Cache pronto para usar nas apps android
  • 33. LRUCache final int memClass = ((ActivityManager) this .getSystemService(Context.ACTIVITY_SERVICE)).getMemoryCl ass(); int memoryInBytes = 1024 * 1024 * memClass; final int cacheSize = memoryInBytes / 8; cache = new LruCache<String,Bitmap>(maxSize);
  • 34. Tamanho das entradas do cache • Como fazemos?
  • 35. comportamento cache = new LruCache<String,Bitmap>(maxSize) { protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getByteCount(); }; };
  • 37. App que consome serviço • Vai olhar o serviço
  • 39. StrictMode StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() .penaltyLog() .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() .detectLeakedClosableObjects() .penaltyLog() .build());
  • 40. Reclamação android.database.CursorWrapper.moveToFirst(CursorWrapper.java:65) 04-05 11:07:54.598: E/StrictMode(6032): at android_maps_conflict_avoidance.com.google.common.android.AndroidConfi g.getSetting(AndroidConfig.java:219) 04-05 11:07:54.598: E/StrictMode(6032): at android_maps_conflict_avoidance.com.google.common.android.AndroidConfi g.getDistributionChannelInternal(AndroidConfig.java:197) 04-05 11:07:54.598: E/StrictMode(6032): at android_maps_conflict_avoidance.com.google.common.Config.init(Config.j ava:273) 04-05 11:07:54.598: E/StrictMode(6032): at android_maps_conflict_avoidance.com.google.common.android.AndroidConfi g.<init>(AndroidConfig.java:100) 04-05 11:07:54.598: E/StrictMode(6032): at android_maps_conflict_avoidance.com.google.common.android.AndroidConfi g.<init>(AndroidConfig.java:87) 04-05 11:07:54.598: E/StrictMode(6032): at com.google.android.maps.MapActivity.onCreate(MapActivity.java:419) 04-05 11:07:54.598: E/StrictMode(6032): at android.support.v4.app.FragmentActivity.onCreate(Unknown Source) 04-05 11:07:54.598: E/StrictMode(6032): at br.com.homehunter.infra.UseStorageFragmentActivity.onCreate(UseStorage FragmentActivity.java:14) 04-05 11:07:54.598: E/StrictMode(6032): at
  • 42. Marca os pontos public void buscaAPagina(int pagina) throws LocationProvidersOffException{ Debug.startMethodTracing("buscaPagina"); //possivel código ruim aqui Debug.stopMethodTracing(); }
  • 43. Busca o arquivo ./adb pull /sdcard/buscaPagina.trace /tmp ./traceview /tmp/buscaPagina
  • 45. Comandos para o emulador • DDMS/Emulator control
  • 46. Mas... • Já tentou controlar a bateria? • E quando subiu o emulador com o tamanho errado
  • 47. Chique • Conectar no emulador via telnet
  • 49. coisas a mais power capacity 20 window scale 0.5