O rastreamento do sistema mostra informações sobre processos apenas no nível do sistema. Por isso, às vezes é difícil saber quais métodos do seu app ou jogo estavam sendo executados em determinado momento em relação aos eventos do sistema.
O Jetpack oferece uma API de rastreamento que pode ser usada para rotular determinada seção de código. Essas informações são relatadas nos rastreamentos capturados no dispositivo. O Macrobenchmark captura rastros com pontos personalizados automaticamente.
Ao usar a ferramenta de linha de comando Systrace para capturar traces, a opção -a
é
obrigatória. Sem essa opção, os métodos do app não aparecerão em um relatório de
rastreamento do sistema.
Kotlin
class MyAdapter : RecyclerView.Adapter<MyViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { trace("MyAdapter.onCreateViewHolder") { MyViewHolder.newInstance(parent) } } override fun onBindViewHolder(holder: MyViewHolder, position: Int) { trace("MyAdapter.onBindViewHolder") { trace("MyAdapter.queryDatabase") val rowItem = queryDatabase(position) dataset.add(rowItem) } holder.bind(dataset[position]) } } }
Java
Trace
na biblioteca de rastreamento
do Jetpack, conforme mostrado no snippet de código a seguir.
Observação: quando beginSection()
é chamado várias vezes,
chamar endSection()
encerra apenas o método beginSection()
chamado mais recentemente. Por esse motivo, combine corretamente
cada chamada de beginSection()
com uma chamada de endSection()
para chamadas aninhadas,
como as do snippet a seguir.
Além disso, não é possível chamar beginSection()
em uma linha de execução e
depois encerrá-lo em outra. É preciso chamar os dois métodos na mesma linha de execução.
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { Trace.beginSection("MyAdapter.onCreateViewHolder"); MyViewHolder myViewHolder; try { myViewHolder = MyViewHolder.newInstance(parent); } finally { // In try and catch statements, always call "endSection()" in a // "finally" block. That way, the method is invoked even when an // exception occurs. Trace.endSection(); } return myViewHolder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { Trace.beginSection("MyAdapter.onBindViewHolder"); try { try { Trace.beginSection("MyAdapter.queryDatabase"); RowItem rowItem = queryDatabase(position); dataset.add(rowItem); } finally { Trace.endSection(); } holder.bind(dataset.get(position)); } finally { Trace.endSection(); } } }
Há também uma API NDK para eventos de rastreamento personalizados. Para saber mais sobre como usar essa API no código nativo, consulte a documentação Eventos de rastreamento personalizado em código nativo.
Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado
- Tempo de inicialização do app
- Renderização lenta