ระบุเหตุการณ์ที่กำหนดเอง
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
การติดตามระบบจะแสดงข้อมูลเกี่ยวกับกระบวนการในระดับระบบเท่านั้น
บางครั้งจึงยากที่จะรู้ว่าวิธีการของแอปหรือเกมใด
ขณะดําเนินการในช่วงเวลาหนึ่งๆ ที่เกี่ยวข้องกับเหตุการณ์ของระบบ
Jetpack มี API การติดตามที่คุณสามารถใช้เพื่อติดป้ายกำกับให้กับบางส่วนของ
โค้ด จากนั้นระบบจะรายงานข้อมูลนี้เป็นร่องรอยที่บันทึกไว้ในอุปกรณ์
การเปรียบเทียบมาโคร
จะบันทึกการติดตามด้วยจุดการติดตามที่กำหนดเองโดยอัตโนมัติ
เมื่อใช้เครื่องมือบรรทัดคำสั่ง systrace เพื่อจับภาพการติดตาม ตัวเลือก -a
ต้องระบุ หากไม่มีตัวเลือกนี้ วิธีการของแอปจะไม่ปรากฏในระบบ
รายงานการติดตาม
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
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 สำหรับโค้ดเนทีฟที่หัวข้อเหตุการณ์การติดตามที่กำหนดเองในโฆษณาเนทีฟ
รหัส
แนะนำสำหรับคุณ
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-07-27 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2025-07-27 UTC"],[],[],null,["# Define custom events\n\nSystem tracing shows you information about processes only at the system level,\nso it's sometimes difficult to know which of your app or game's methods are\nexecuting at a given time relative to system events.\n\nJetpack provides a tracing API that you can use to label a particular section of\ncode. This information is then reported in traces captured on the device.\n[Macrobenchmark](/topic/performance/benchmarking/macrobenchmark-overview)\ncaptures traces with custom trace points automatically.\n\nWhen using the systrace command line tool to capture traces, the `-a` option is\nrequired. Without this option, your app's methods don't appear in a system\ntrace report. \n\n### Kotlin\n\n```kotlin\nclass MyAdapter : RecyclerView.Adapter\u003cMyViewHolder\u003e() {\n override fun onCreateViewHolder(parent: ViewGroup,\n viewType: Int): MyViewHolder {\n trace(\"MyAdapter.onCreateViewHolder\") {\n MyViewHolder.newInstance(parent)\n }\n }\n\n override fun onBindViewHolder(holder: MyViewHolder, position: Int) {\n trace(\"MyAdapter.onBindViewHolder\") {\n trace(\"MyAdapter.queryDatabase\")\n val rowItem = queryDatabase(position)\n dataset.add(rowItem)\n }\n holder.bind(dataset[position])\n }\n }\n}\n```\n\n### Java\n\n```java\npublic class MyAdapter extends RecyclerView.Adapter\u003cMyViewHolder\u003e {\n @NonNull\n @Override\n public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {\n return TraceKt.trace(\n \"MyAdapter.onCreateViewHolder\",\n () -\u003e MyViewHolder.newInstance(parent)\n );\n }\n\n @Override\n public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {\n TraceKt.trace(\n \"MyAdapter.onBindViewHolder\",\n () -\u003e {\n TraceKt.trace(\n \"MyAdapter.queryDatabase\",\n () -\u003e {\n Item rowItem = queryDatabase(position);\n dataset.add(rowItem);\n }\n );\n }\n );\n }\n}\n```\n\nWe recommend using the Kotlin extension function, even in Java code, as it\nautomatically ends the trace when the lambda completes. This removes the risk\nof forgetting to end the tracing.\n\nYou can also use an NDK API for custom trace events. To learn about using this\nAPI for your native code, see [Custom trace events in native\ncode](/topic/performance/tracing/custom-events-native).\n\nRecommended for you\n-------------------\n\n- Note: link text is displayed when JavaScript is off\n- [App startup time](/topic/performance/vitals/launch-time)\n- [Slow rendering](/topic/performance/vitals/render)"]]