Pelacakan sistem hanya menunjukkan informasi tentang proses pada tingkat sistem. Jadi, terkadang sulit untuk mengetahui metode game atau aplikasi mana yang dijalankan pada waktu tertentu terkait dengan peristiwa sistem.
Jetpack menyediakan API pelacakan yang dapat Anda gunakan untuk memberi label pada bagian kode tertentu. Selanjutnya informasi ini akan dilaporkan dalam rekaman aktivitas yang diambil di perangkat. Macrobenchmark akan mengambil rekaman aktivitas dengan titik pelacakan kustom secara otomatis.
Saat menggunakan alat command line systrace untuk mengambil rekaman aktivitas, opsi -a
diperlukan; tanpa opsi ini, metode aplikasi Anda tidak akan muncul di laporan
pelacakan sistem.
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
di library pelacakan
Jetpack, seperti yang ditunjukkan dalam cuplikan kode berikut.
Catatan: Saat Anda memanggil beginSection()
beberapa kali,
memanggil endSection()
hanya akan mengakhiri metode
beginSection()
yang terakhir dipanggil. Jadi, untuk panggilan bertingkat, seperti panggilan yang ada di
cuplikan berikut, pastikan Anda mencocokkan dengan tepat setiap panggilan ke
beginSection()
dengan panggilan ke endSection()
.
Selain itu, Anda tidak dapat memanggil beginSection()
di satu thread dan
mengakhirinya di thread lainnya; jadi Anda harus memanggil kedua metode tersebut di thread yang sama.
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(); } } }
Ada juga NDK API untuk peristiwa rekaman aktivitas kustom. Anda dapat mengetahui lebih lanjut cara menggunakan API tersebut untuk kode native dalam dokumentasi Peristiwa rekaman aktivitas kustom dalam kode native.