راه‌اندازی کارگر برای بارگذاری نمایه

‫ProfilingManager ردگیری‌ها را به‌صورت محلی در دستگاه ذخیره می‌کند. درحالی‌که می‌توانید این فایل‌ها را بااستفاده از ADB برای اشکال‌زدایی محلی بازیابی کنید، جمع‌آوری داده‌های میدانی مستلزم بارگذاری آن‌ها در سرور است.

فایل‌های ردیابی می‌توانند بزرگ باشند (اغلب چند مگابایت). برای جلوگیری از تأثیر منفی بر تجربه کاربر یا مصرف داده تلفن همراه، باید بارگذاری‌ها را برای انجام در پس‌زمینه زمان‌بندی کنید، ترجیحاً زمانی که دستگاه در شبکه نامحدود (Wi-Fi) است، درحال شارژ است، و از آن استفاده نمی‌شود.

راه‌اندازی کردن کار بارگذاری WorkManager

ProfilingManager مستقل از ابر است؛ می‌توانید ردگیری‌ها را در هر زیرساختی که انتخاب می‌کنید بارگذاری کنید. نمونه زیر نشان می‌دهد که چگونه از WorkManager برای زمان‌بندی کار بارگذاری استفاده کنید تا از ایجاد اختلال برای کاربر جلوگیری شود.

نمونه کد برای راه‌اندازی کار بارگذاری

در اینجا مثالی از نحوه راه‌اندازی کاری که برای کاربر مزاحمت ایجاد نمی‌کند برای بارگذاری ردگیری‌ها در سرور شما آورده شده است.

افزودن وابستگی‌های WorkManager

علاوه‌بر وابستگی‌های ProfilingManager موجود، این کتابخانه‌های Jetpack را به فایل build.gradle.kts خود اضافه کنید. ‫WorkManager به آن‌ها نیاز دارد.

کاتلین

   dependencies {
       implementation("androidx.work:work-runtime:2.12.0")
   }
   

شیک

   dependencies {
       implementation 'androidx.work:work-runtime:2.12.0'
   }
   

تکه‌کد

این کد نشان می‌دهد که چگونه می‌توان کاری را برای بارگذاری ردگیری‌ها راه‌اندازی کرد. وقتی ProfilingResult توسط برنامه‌تان دریافت می‌شود، کار باید راه‌اندازی شود. بخش نمایه‌سازی در این بخش حذف شده است اما نمونه‌ای را می‌توانید در ضبط ردگیری سیستم پیدا کنید.

کاتلین

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())
}

جاوا

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());
}

گشت مجازی کد

کد کارهای زیر را انجام می‌دهد:

  • تعریف کردن کارگر: کلاس TraceUploadWorker را ایجاد کنید که Worker را گسترش می‌دهد. روش doWork() را برای مدیریت منطق بارگذاری فایل واقعی بااستفاده از کیت توسعه نرم‌افزار باطن یا کارخواه HTTP ترجیحی‌تان پیاده‌سازی کنید.

  • درخواست نمایه‌سازی: از SystemTraceRequestBuilder برای پیکربندی ردگیری (مدت، خط‌مشی میان‌گیر) و از Profiling.requestProfiling برای شروع آن استفاده کنید.

  • زمان‌بندی کار:

    • OneTimeWorkRequest برای کارمندتان ایجاد کنید.

    • تنظیم محدودیت‌ها: از setRequiredNetworkType(NetworkType.UNMETERED)، setRequiresDeviceIdle(true)، و setRequiresCharging(true) استفاده کنید تا مطمئن شوید بارگذاری فقط زمانی انجام می‌شود که کاربر به Wi-Fi متصل است، دستگاه درحال شارژ است، و کاربر به‌طور فعال از دستگاه استفاده نمی‌کند. این کار برای جلوگیری از ایجاد اختلال در کار بارگذاری کاربر مهم است.

    • داده‌های مجوز: از setInputData برای ارسال مسیر ردیابی به کارگر استفاده کنید.

    • Enqueue: Submit the request to WorkManager by calling WorkManager#enqueue.

مراحل بعدی

پس‌از بارگذاری ردگیری‌ها، می‌توانید آن‌ها را به‌صورت جداگانه تجزیه‌وتحلیل کنید یا تجزیه‌وتحلیل ردگیری انبوه انجام دهید. برای راهنمایی درباره راه‌اندازی خط لوله تحلیل مقیاس‌پذیر، به استقرار Bigtrace در Kubernetes مراجعه کنید.