ProfilingManager, izleri cihazda yerel olarak kaydeder. Bu dosyaları yerel hata ayıklama için ADB'yi kullanarak alabilirsiniz ancak alan verilerini toplamak için dosyaların bir sunucuya yüklenmesi gerekir.
İzleme dosyaları büyük olabilir (genellikle birkaç MB). Kullanıcı deneyimini olumsuz etkilememek veya mobil veri tüketmemek için yüklemeleri arka planda gerçekleşecek şekilde planlamanız gerekir. Tercihen cihaz sınırsız bir ağa (kablosuz) bağlıyken, şarj olurken ve boşta kaldığında yükleme yapın.
WorkManager yükleme işi ayarlama
ProfilingManager, bulut platformundan bağımsızdır. İzleri istediğiniz altyapıya yükleyebilirsiniz. Aşağıdaki örnekte, kullanıcıların işlerini aksatmayacak bir yükleme işi planlamak için WorkManager nasıl kullanılacağı gösterilmektedir.
Yükleme işi oluşturma kodu örneği
Aşağıda, kullanıcının işini aksatmayacak şekilde sunucunuza iz yükleme işi ayarlama ile ilgili bir örnek verilmiştir.
WorkManager bağımlılıklarını ekleme
Mevcut ProfilingManager bağımlılıklarınıza ek olarak bu Jetpack kitaplıklarını build.gradle.kts dosyanıza ekleyin. WorkManager bunları gerektirir.
Kotlin
dependencies { implementation("androidx.work:work-runtime:2.11.0") }
Groovy
dependencies { implementation 'androidx.work:work-runtime:2.11.0' }
Kod snippet'i
Bu kodda, iz yükleme işinin nasıl ayarlanacağı gösterilmektedir. İş, uygulamanız tarafından ProfilingResult alındığında ayarlanmalıdır. Bu bölümde profil oluşturma bölümü atlanmıştır ancak Sistem izi kaydetme bölümünde bir örnek bulabilirsiniz.
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()); }
Kod incelemesi
Kod şu işlemleri yapar:
Çalışanı tanımlayın:
TraceUploadWorkersınıfını genişleten birWorkersınıfı oluşturun. Tercih ettiğiniz arka uç SDK'sını veya HTTP istemcisini kullanarak gerçek dosya yükleme mantığını işlemek içindoWork()yöntemini uygulayın.İstek profil oluşturma: İzlemeyi (süre, arabellek politikası) yapılandırmak için
SystemTraceRequestBuilder, izlemeyi başlatmak içinProfiling.requestProfilingkullanın.Çalışmayı planlama:
Çalışanınız için bir
OneTimeWorkRequestoluşturun.Kısıtlamalar ayarlayın: Yüklemenin yalnızca kullanıcı kablosuz ağa bağlıyken, cihazı şarj ederken ve aktif olarak kullanmadığı zamanlarda gerçekleşmesini sağlamak için
setRequiredNetworkType(NetworkType.UNMETERED),setRequiresDeviceIdle(true)vesetRequiresCharging(true)simgelerini kullanın. Bu, yükleme işiyle ilgili olarak kullanıcının kesintiye uğramasını önlemek için önemlidir.Veri iletme: İzleme yolunu çalışana iletmek için
setInputDataöğesini kullanın.Sıraya alma:
WorkManager#enqueueişlevini çağırarak isteği WorkManager'a gönderin.
Sonraki Adımlar
İzleri yükledikten sonra tek tek analiz edebilir veya toplu iz analizi yapabilirsiniz. Ölçeklenebilir bir analiz ardışık düzeni oluşturma konusunda yardım almak için Bigtrace'i Kubernetes'e dağıtma başlıklı makaleyi inceleyin.