Preciso descobrir onde estão os gargalos em meu aplicativo Android.
Quais ferramentas ou técnicas de criação de perfil posso usar?
Preciso descobrir onde estão os gargalos em meu aplicativo Android.
Quais ferramentas ou técnicas de criação de perfil posso usar?
Respostas:
Você pode usar o Traceview. Está longe do ideal, mas funciona. Este artigo descreve como usá-lo.
DDMS é o melhor para Android. Por padrão, ele é incluído no plug-in ADT.
Este documento com exemplo detalhado deve ajudá-lo a lidar com o DDMS.
Para análise de memória, experimente Eclipse MAT
Depende do que você vai testar.
Caso você desenvolva aplicativos para Android, experimente a classe TimingLogger. Dê uma olhada em neste artigo que descreve o uso da classe auxiliar TimingLogger.
Uma ferramenta muito boa é o JMeter e há um plugin para Android .
se você não quiser usar ferramentas externas, mas de uma forma bem padronizada, para medir o tempo decorrido, deve usar System.nanoTime (). Não se deve usar o currentTimeMillis, pois mede o tempo do relógio de parede e, como nenhum relógio de computador é perfeito (todos ocasionalmente precisam ser corrigidos) há um processo que roda e emite continuamente pequenas correções no relógio do sistema. Sem mencionar a correção do segundo bissexto.
Embora currentTimeMillis seja freqüentemente usado, ainda é incorreto medir o tempo decorrido e o tempo. De qualquer forma, como a chamada leva algum tempo, você não deve esperar cronometrar corretamente intervalos muito pequenos. Mas isso não deve ser um problema para trabalhar com Android.
Vou te mostrar um exemplo:
long startTime = System.nanoTime();
// run/call the method
long endTime = System.nanoTime();
long diff = endTime - startTime ;
System.out.println("Elapsed milliseconds: " + diff /1000000);
Você também pode dar uma olhada nesta biblioteca gratuita: http://jetm.void.fm/ .
Você também pode encontrar o tutorial do JMeter .
Outra ferramenta recomendada em http://developer.android.com/training/articles/perf-tips.html é o Caliper: https://code.google.com/p/caliper/ . (Eu não usei, então não sei muito sobre isso.)