Define eventos personalizados
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
El registro del sistema muestra información sobre los procesos solamente a nivel del sistema; por lo tanto, algunas veces resulta difícil saber cuáles de los métodos de tu app o juego estaban en ejecución en un momento determinado respecto de los eventos del sistema.
Jetpack proporciona una API de registro que puedes usar para etiquetar una sección de código específica. Luego, esa información aparece en los registros capturados en el dispositivo.
Las macrocomparativas capturan registros con puntos personalizados automáticamente.
Cuando se usa la herramienta de línea de comandos systrace para capturar registros, se requiere la opción -a
; sin esta, los métodos de la app no aparecerán en un informe de registro del 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
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);
}
);
}
);
}
}
Recomendamos usar la función de extensión de Kotlin, incluso en código Java, ya que finaliza el registro automáticamente cuando se completa la expresión lambda. Esto evita el riesgo de olvidarse de finalizar el registro.
También puedes usar una API de NDK para los eventos de registro personalizados. Si quieres obtener información para usar esta API en tu código nativo, consulta Eventos de seguimiento personalizados en código nativo.
Recomendaciones para ti
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2025-07-27 (UTC)
[null,null,["Última actualización: 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)"]]