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