系統追蹤只會顯示系統層級程序的相關資訊,因此有時很難知道在系統事件相關的特定時間,執行的是哪個應用程式或遊戲的方法。
Jetpack 提供追蹤 API,可用來為特定程式碼區段加上標籤。這項資訊會記錄在從裝置擷取的追蹤記錄中,而 Macrobenchmark 會自動使用自訂追蹤點擷取追蹤記錄。
使用 Systrace 指令列工具擷取追蹤記錄時,需要使用 -a
選項;沒有這個選項,應用程式的方法就不會顯示在系統追蹤記錄報表中。
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])
}
}
}
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return TraceKt.trace(
"MyAdapter.onCreateViewHolder",
() -> MyViewHolder.newInstance(parent)
);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
TraceKt.trace(
"MyAdapter.onBindViewHolder",
() -> {
TraceKt.trace(
"MyAdapter.queryDatabase",
() -> {
Item rowItem = queryDatabase(position);
dataset.add(rowItem);
}
);
}
);
}
}
建議您使用 Kotlin 擴充功能函式 (即使是在 Java 程式碼中),因為此函式會在 lambda 執行完成時自動結束追蹤記錄。此做法可以排除忘記結束追蹤記錄的風險。
您也可以將 NDK API 用於自訂追蹤記錄事件。如要瞭解如何在原生程式碼中使用這個 API,請參閱「原生程式碼中的自訂追蹤記錄事件」。
目前沒有任何建議。
建議登入 Google 帳戶。