Benutzerdefinierte Ereignisse definieren

Beim System-Tracing werden Informationen zu Prozessen nur auf Systemebene angezeigt. Daher ist es manchmal schwierig zu wissen, welche Methoden Ihrer App oder Ihres Spiels zu einem bestimmten Zeitpunkt im Verhältnis zu Systemereignissen ausgeführt werden.

Jetpack bietet eine Tracing API, mit der Sie einen bestimmten Codeabschnitt mit Labels versehen können. Diese Informationen werden dann in Traces aufgezeichnet, die auf dem Gerät erfasst werden. MacroBenchmark erfasst Traces mit benutzerdefinierten Tracepunkten automatisch.

Wenn Sie Traces mit dem Befehlszeilentool systrace erfassen, ist die Option -a erforderlich. Ohne diese Option werden die Methoden Ihrer Anwendung nicht in einem Systemtrace-Bericht angezeigt.

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 Kotlin-Erweiterungsfunktion auch in Java-Code zu verwenden, da sie den Trace automatisch beendet, wenn die Lambda-Funktion abgeschlossen ist. So vermeiden Sie das Risiko, zu vergessen, das Tracing zu beenden.

Sie können auch eine NDK API für benutzerdefinierte Trace-Ereignisse verwenden. Informationen zur Verwendung dieser API für Ihren nativen Code finden Sie unter Benutzerdefinierte Trace-Ereignisse im nativen Code.