ProfilingManager menyimpan rekaman aktivitas secara lokal di perangkat. Meskipun Anda dapat mengambil file ini menggunakan ADB untuk proses debug lokal, pengumpulan data kolom memerlukan penguploadan file tersebut 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 diukur (Wi-Fi), sedang diisi daya, dan tidak digunakan.
Menyiapkan tugas upload WorkManager
ProfilingManager tidak bergantung pada cloud; Anda dapat mengupload rekaman aktivitas ke infrastruktur mana pun yang Anda pilih. Contoh berikut menunjukkan cara menggunakan
WorkManager untuk menjadwalkan tugas upload yang tidak mengganggu pengguna.
Contoh kode untuk menyiapkan tugas upload
Berikut contoh cara menyiapkan tugas yang tidak mengganggu pengguna untuk mengupload rekaman aktivitas ke server Anda.
Menambahkan dependensi WorkManager
Selain dependensi ProfilingManager yang ada, tambahkan library Jetpack ini ke file build.gradle.kts Anda. WorkManager membutuhkannya.
Kotlin
dependencies { implementation("androidx.work:work-runtime:2.11.0") }
Groovy
dependencies { implementation 'androidx.work:work-runtime:2.11.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 tidak disertakan dalam bagian ini, tetapi contohnya dapat ditemukan di Merekam aktivitas 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 tersebut 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.Pembuatan profil permintaan: Gunakan
SystemTraceRequestBuilderuntuk mengonfigurasi rekaman aktivitas (durasi, kebijakan buffer) danProfiling.requestProfilinguntuk memulainya.Jadwalkan pekerjaan:
Buat
OneTimeWorkRequestuntuk pekerja Anda.Menetapkan batasan: Gunakan
setRequiredNetworkType(NetworkType.UNMETERED),setRequiresDeviceIdle(true), dansetRequiresCharging(true)untuk memastikan upload hanya terjadi saat pengguna terhubung ke Wi-Fi, mengisi daya, dan tidak menggunakan perangkat secara aktif. Hal ini penting untuk menghindari gangguan pada pengguna dengan tugas upload.Meneruskan data: Gunakan
setInputDatauntuk meneruskan jalur rekaman aktivitas ke pekerja.Antrekan: Kirim permintaan ke WorkManager dengan memanggil
WorkManager#enqueue.
Langkah Berikutnya
Setelah mengupload rekaman aktivitas, Anda dapat menganalisisnya satu per satu atau melakukan analisis rekaman aktivitas massal. Untuk mendapatkan panduan tentang cara menyiapkan pipeline analisis yang skalabel, lihat Men-deploy Bigtrace di Kubernetes.