`ProfilingManager` speichert Traces lokal auf dem Gerät. Sie können diese Dateien zwar mit ADB für das lokale Debugging abrufen, für die Erhebung von Felddaten müssen sie jedoch auf einen Server hochgeladen werden.
Trace-Dateien können groß sein (oft mehrere MB). Um die Nutzerfreundlichkeit nicht zu beeinträchtigen oder mobile Daten zu verbrauchen, sollten Sie Uploads im Hintergrund planen, vorzugsweise wenn das Gerät mit einem Netzwerk ohne Datenlimit (WLAN) verbunden ist, geladen wird und sich im Leerlauf befindet.
WorkManager-Uploadjob einrichten
ProfilingManager ist cloudunabhängig. Sie können Traces in eine beliebige Infrastruktur hochladen. Das folgende Beispiel zeigt, wie Sie mit
WorkManager einen Uploadjob planen, der keine Unterbrechungen für den Nutzer verursacht.
Codebeispiel zum Einrichten eines Uploadjobs
Hier ist ein Beispiel dafür, wie Sie einen Job einrichten können, der den Nutzer nicht stört, um Traces auf Ihren Server hochzuladen.
WorkManager-Abhängigkeiten hinzufügen
Fügen Sie zusätzlich zu den vorhandenen ProfilingManager-Abhängigkeiten diese Jetpack-Bibliotheken der Datei build.gradle.kts hinzu. WorkManager benötigt sie.
Kotlin
dependencies { implementation("androidx.work:work-runtime:2.11.2") }
Groovy
dependencies { implementation 'androidx.work:work-runtime:2.11.2' }
Code-Snippet
Dieser Code zeigt, wie Sie einen Job zum Hochladen von Traces einrichten. Der Job sollte
eingerichtet werden, wenn ProfilingResult von Ihrer App empfangen wird. Der Profiling-Abschnitt
wird in diesem Abschnitt ausgelassen, ein Beispiel finden Sie jedoch unter System
trace aufzeichnen.
Kotlin
class TraceUploadWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) { override fun doWork(): Result { // Perform your uploading work here Log.d("ProfileTest", "Uploading trace: " + inputData.getString("PROFILE_PATH")) return Result.success() } } fun setupProfileUploadWorker(profileFilepath: String?) { val workMgr = WorkManager.getInstance(applicationContext) val workRequestBuilder = OneTimeWorkRequest.Builder(TraceUploadWorker::class) val constraints = Constraints.Builder() .setRequiredNetworkType(NetworkType.UNMETERED) .setRequiresDeviceIdle(true) .setRequiresCharging(true) .build() workRequestBuilder.setConstraints(constraints) val inputDataBuilder = Data.Builder() inputDataBuilder.putString("PROFILE_PATH", profileFilepath) workRequestBuilder.setInputData(inputDataBuilder.build()) workMgr.enqueue(workRequestBuilder.build()) }
Java
public static class TraceUploadWorker extends Worker { public TraceUploadWorker( @androidx.annotation.NonNull Context context, @androidx.annotation.NonNull WorkerParameters workerParams) { super(context, workerParams); } @androidx.annotation.NonNull @Override public Result doWork() { // Perform your uploading work here Log.d("ProfileTest", "Uploading trace: " + getInputData().getString("PROFILE_PATH")); return Result.success(); } } public void setupProfileUploadWorker(String profileFilepath) { WorkManager workMgr = WorkManager.getInstance(getApplicationContext()); OneTimeWorkRequest.Builder workRequestBuilder = new OneTimeWorkRequest.Builder( TraceUploadWorker.class); Constraints constraints = new Constraints.Builder() .setRequiredNetworkType(NetworkType.UNMETERED) .setRequiresDeviceIdle(true) .build(); workRequestBuilder.setConstraints(constraints); Data.Builder inputDataBuilder = new Data.Builder(); inputDataBuilder.putString("PROFILE_PATH", profileFilepath); workRequestBuilder.setInputData(inputDataBuilder.build()); workMgr.enqueue(workRequestBuilder.build()); }
Code-Anleitung
Der Code führt Folgendes aus:
Worker definieren: Erstellen Sie eine
TraceUploadWorkerKlasse, die vonWorkerabgeleitet wird. Implementieren Sie die MethodedoWork(), um die eigentliche Datei-Uploadlogik mit dem bevorzugten Backend-SDK oder HTTP-Client zu verarbeiten.Profiling anfordern: Verwenden Sie
SystemTraceRequestBuilder, um den Trace zu konfigurieren (Dauer, Pufferrichtlinie) undProfiling.requestProfiling, um ihn zu starten.Arbeit planen:
Erstellen Sie eine
OneTimeWorkRequestfür Ihren Worker.Beschränkungen festlegen: Verwenden Sie
setRequiredNetworkType(NetworkType.UNMETERED),setRequiresDeviceIdle(true)undsetRequiresCharging(true), um sicherzustellen, dass der Upload nur erfolgt, wenn der Nutzer mit einem WLAN verbunden ist, das Gerät geladen wird und es nicht aktiv verwendet wird. Das ist wichtig, um Unterbrechungen für den Nutzer durch den Uploadjob zu vermeiden.Daten übergeben: Verwenden Sie
setInputData, um den Trace-Pfad an den Worker zu übergeben.In die Warteschlange stellen: Senden Sie die Anfrage an WorkManager, indem Sie
WorkManager#enqueueaufrufen.
Nächste Schritte
Nach dem Hochladen von Traces können Sie sie einzeln analysieren oder eine Bulk-Trace Analyse durchführen. Eine Anleitung zum Einrichten einer skalierbaren Analysepipeline finden Sie unter Bigtrace auf Kubernetes bereitstellen.