Benutzerdefinierte Ereignisse definieren
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Die Systemverfolgung zeigt Ihnen
Informationen zu Prozessen nur auf Systemebene,
Daher ist es manchmal schwierig zu wissen, welche Methoden
Ihrer App oder Ihres Spiels
die zu einem bestimmten Zeitpunkt
in Bezug auf Systemereignisse ausgeführt werden.
Jetpack bietet eine Tracing API, mit der Sie einen bestimmten Abschnitt von
Code. Diese Informationen werden dann in Traces gemeldet, die auf dem Gerät erfasst werden.
Makro-Benchmark
erfasst Traces mit benutzerdefinierten Trace-Punkten automatisch.
Wenn Sie Traces mit dem systrace-Befehlszeilentool erfassen, lautet die Option -a
erforderlich. Ohne diese Option werden die Methoden Ihrer App nicht in einem System
Trace-Bericht.
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);
}
);
}
);
}
}
Wir empfehlen die Verwendung der Kotlin-Erweiterungsfunktion, auch im Java-Code, da diese
beendet den Trace automatisch, wenn die Lambda-Funktion abgeschlossen ist. Dadurch wird das Risiko
das Vergessen, das Tracing zu beenden.
Sie können auch eine NDK API für benutzerdefinierte Trace-Ereignisse verwenden. Weitere Informationen zur Verwendung
API für Ihren nativen Code siehe Benutzerdefinierte Trace-Ereignisse in nativen Anzeigen
Code hinzu.
Empfehlungen für dich
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-27 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 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)"]]