يحفظ ProfilingManager عمليات التتبُّع محليًا على الجهاز. يمكنك استرداد هذه الملفات باستخدام أداة تصحيح الأخطاء عبر جسر Android (ADB) لتصحيح الأخطاء محليًا، ولكن جمع بيانات الحقول يتطلّب تحميلها إلى خادم.
يمكن أن يكون حجم ملفات التتبُّع كبيرًا (غالبًا ما يصل إلى عدّة ميغابايت). لتجنُّب التأثير سلبًا في تجربة المستخدم أو استهلاك بيانات الجوّال، عليك جدولة عمليات التحميل لتتم في الخلفية، ويُفضّل أن يكون ذلك عندما يكون الجهاز متصلاً بشبكة غير محدودة (Wi-Fi) وأثناء شحنه وعدم استخدامه.
إعداد مهمة تحميل في WorkManager
ProfilingManager غير مرتبط بأي سحابة إلكترونية، ويمكنك تحميل عمليات التتبُّع إلى أي بنية أساسية تختارها. يوضّح المثال التالي كيفية استخدام
WorkManager لجدولة مهمة تحميل تتجنّب إزعاج المستخدم.
مثال على رمز لإعداد مهمة تحميل
في ما يلي مثال على كيفية إعداد مهمة لا تؤدي إلى إزعاج المستخدم لتحميل عمليات التتبُّع إلى خادمك.
إضافة تبعيات WorkManager
بالإضافة إلى تبعيات ProfilingManager الحالية، أضِف مكتبات Jetpack هذه إلى ملف build.gradle.kts. يحتاج WorkManager إليها.
Kotlin
dependencies { implementation("androidx.work:work-runtime:2.11.2") }
أنيق
dependencies { implementation 'androidx.work:work-runtime:2.11.2' }
مقتطف رمز
يوضّح هذا الرمز كيفية إعداد مهمة لتحميل عمليات التتبُّع. يجب إعداد المهمة عند تلقّي تطبيقك ProfilingResult. تم حذف قسم تحديد الملف الشخصي في هذا القسم، ولكن يمكنك الاطّلاع على مثال في مقالة تسجيل عملية تتبُّع للنظام.
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()); }
شرح الرمز
ينفّذ الرمز ما يلي:
تحديد المنفِّذ: أنشِئ فئة
TraceUploadWorkerتوسّعWorker. نفِّذ طريقةdoWork()للتعامل مع منطق تحميل الملف الفعلي باستخدام حزمة تطوير البرامج (SDK) المفضّلة للواجهة الخلفية أو عميل HTTP.طلب تحديد الملف الشخصي: استخدِم
SystemTraceRequestBuilderلضبط عملية التتبُّع (المدة وسياسة المخزن المؤقت) وProfiling.requestProfilingلبدئها.جدولة العمل:
أنشِئ
OneTimeWorkRequestللمنفِّذ.اضبط القيود: استخدِم
setRequiredNetworkType(NetworkType.UNMETERED)وsetRequiresDeviceIdle(true)وsetRequiresCharging(true)لضمان عدم حدوث عملية التحميل إلا عندما يكون المستخدم متصلاً بشبكة Wi-Fi وأثناء شحن الجهاز وعدم استخدامه بنشاط. من المهم تجنُّب إزعاج المستخدم من خلال مهمة التحميل.تمرير البيانات: استخدِم
setInputDataلتمرير مسار عملية التتبُّع إلى العامل.وضع الطلب في قائمة الانتظار: أرسِل الطلب إلى WorkManager من خلال استدعاء
WorkManager#enqueue.
الخطوات التالية
بعد تحميل عمليات التتبُّع، يمكنك تحليلها بشكل فردي أو إجراء تحليل مجمَّع لعمليات التتبُّع تحليل. للحصول على إرشادات حول إعداد مسار تحليل قابل للتوسّع، يُرجى الرجوع إلى مقالة نشر Bigtrace على Kubernetes.