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 مراجعه کنید.