Benutzerdefinierte Ereignisse definieren

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.