ProfilingManager menyimpan rekaman aktivitas secara lokal di perangkat. Meskipun Anda dapat mengambil file ini menggunakan ADB untuk proses debug lokal, pengumpulan data lapangan memerlukan penguploadan file ke server.
File rekaman aktivitas dapat berukuran besar (sering kali beberapa MB). Untuk menghindari dampak negatif pada pengalaman pengguna atau penggunaan data seluler, Anda harus menjadwalkan upload agar terjadi di latar belakang, sebaiknya saat perangkat terhubung ke jaringan yang tidak berbayar (Wi-Fi), sedang diisi daya, dan tidak digunakan.
Menyiapkan tugas upload WorkManager
ProfilingManager bersifat cloud-agnostik; Anda dapat mengupload trace ke infrastruktur apa pun yang Anda pilih. Contoh berikut menunjukkan cara menggunakan
WorkManager untuk menjadwalkan tugas upload yang menghindari gangguan pengguna.
Contoh kode untuk menyiapkan tugas upload
Berikut adalah contoh cara menyiapkan tugas yang tidak mengganggu pengguna untuk mengupload trace ke server Anda.
Menambahkan dependensi WorkManager
Selain dependensi ProfilingManager yang sudah ada, tambahkan library Jetpack ini ke file build.gradle.kts Anda. WorkManager membutuhkannya.
Kotlin
dependencies { implementation("androidx.work:work-runtime:2.12.0") }
Groovy
dependencies { implementation 'androidx.work:work-runtime:2.12.0' }
Cuplikan kode
Kode ini menunjukkan cara menyiapkan tugas untuk mengupload rekaman aktivitas. Tugas harus
disiapkan saat ProfilingResult diterima oleh aplikasi Anda. Bagian pembuatan profil
dihilangkan di bagian ini, tetapi contohnya dapat ditemukan di Merekam pelacakan
sistem.
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()); }
Panduan kode
Kode ini melakukan hal berikut:
Tentukan pekerja: Buat class
TraceUploadWorkeryang memperluasWorker. Terapkan metodedoWork()untuk menangani logika upload file yang sebenarnya menggunakan SDK backend atau klien HTTP pilihan Anda.Minta pembuatan profil: Gunakan
SystemTraceRequestBuilderuntuk mengonfigurasi rekaman aktivitas (durasi, kebijakan buffer) danProfiling.requestProfilinguntuk memulainya.Menjadwalkan pekerjaan:
Buat
OneTimeWorkRequestuntuk worker Anda.Tetapkan batasan: Gunakan
setRequiredNetworkType(NetworkType.UNMETERED),setRequiresDeviceIdle(true), dansetRequiresCharging(true)untuk memastikan upload hanya terjadi saat pengguna menggunakan Wi-Fi, mengisi daya, dan tidak aktif menggunakan perangkat. Hal ini penting untuk menghindari gangguan pada pengguna dengan tugas upload.Meneruskan data: Gunakan
setInputDatauntuk meneruskan jalur rekaman aktivitas ke worker.Enqueue: Kirim permintaan ke WorkManager dengan memanggil
WorkManager#enqueue.
Langkah Berikutnya
Setelah mengupload trace, Anda dapat menganalisisnya satu per satu atau melakukan analisis trace massal. Untuk panduan tentang cara menyiapkan pipeline analisis yang skalabel, lihat Men-deploy Bigtrace di Kubernetes.