ProfilingManager จะบันทึกการติดตามไว้ในอุปกรณ์ แม้ว่าคุณจะดึงข้อมูลไฟล์เหล่านี้ได้โดยใช้ ADB สำหรับการแก้ไขข้อบกพร่องในเครื่อง แต่การรวบรวมข้อมูลภาคสนามจำเป็นต้องอัปโหลดไฟล์ไปยังเซิร์ฟเวอร์
ไฟล์การติดตามอาจมีขนาดใหญ่ (มักมีขนาดหลาย MB) คุณควรกำหนดเวลาการอัปโหลดให้เกิดขึ้นในเบื้องหลัง โดยเฉพาะเมื่ออุปกรณ์อยู่ในเครือข่ายที่ไม่มีการวัดปริมาณอินเทอร์เน็ต (Wi-Fi) กำลังชาร์จ และไม่มีการใช้งาน เพื่อหลีกเลี่ยงไม่ให้ส่งผลเสียต่อประสบการณ์ของผู้ใช้หรือใช้อินเทอร์เน็ตมือถือ
ตั้งค่างานอัปโหลด WorkManager
ProfilingManager เป็นระบบที่ไม่ขึ้นอยู่กับระบบคลาวด์ คุณจึงอัปโหลดการติดตามไปยังโครงสร้างพื้นฐานใดก็ได้ที่เลือก ตัวอย่างต่อไปนี้แสดงวิธีใช้ WorkManager เพื่อกำหนดเวลางานการอัปโหลดที่ไม่รบกวนผู้ใช้
ตัวอย่างโค้ดเพื่อตั้งค่างานอัปโหลด
ต่อไปนี้คือตัวอย่างวิธีตั้งค่างานที่ไม่รบกวนผู้ใช้ในการอัปโหลดการติดตามไปยังเซิร์ฟเวอร์
เพิ่มทรัพยากร Dependency ของ WorkManager
นอกเหนือจากทรัพยากร Dependency ProfilingManager ที่มีอยู่แล้ว ให้เพิ่มไลบรารี Jetpack เหล่านี้ลงในไฟล์ build.gradle.kts WorkManager ต้องใช้ข้อมูลเข้าสู่ระบบ
Kotlin
dependencies { implementation("androidx.work:work-runtime:2.12.0") }
ดึงดูด
dependencies { implementation 'androidx.work:work-runtime:2.12.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()); }
คำแนะนำแบบทีละขั้นเกี่ยวกับโค้ด
โค้ดจะดำเนินการดังนี้
กำหนด Worker: สร้างคลาส
TraceUploadWorkerที่ขยายWorkerใช้เมธอดdoWork()เพื่อจัดการตรรกะการอัปโหลดไฟล์จริงโดยใช้ SDK แบ็กเอนด์หรือไคลเอ็นต์ HTTP ที่คุณต้องการRequest profiling: ใช้
SystemTraceRequestBuilderเพื่อกำหนดค่าการติดตาม (ระยะเวลา, นโยบายบัฟเฟอร์) และProfiling.requestProfilingเพื่อเริ่มการติดตามกำหนดเวลางาน
สร้าง
OneTimeWorkRequestสำหรับผู้ปฏิบัติงานตั้งค่าข้อจำกัด: ใช้
setRequiredNetworkType(NetworkType.UNMETERED),setRequiresDeviceIdle(true)และsetRequiresCharging(true)เพื่อให้มั่นใจว่าการอัปโหลดจะเกิดขึ้นเมื่อผู้ใช้เชื่อมต่อ Wi-Fi, ชาร์จอุปกรณ์ และไม่ได้ใช้งานอุปกรณ์อยู่เท่านั้น ซึ่งเป็นสิ่งสำคัญเพื่อหลีกเลี่ยงการรบกวนผู้ใช้ด้วยงานอัปโหลดส่งข้อมูล: ใช้
setInputDataเพื่อส่งเส้นทางการติดตามไปยังผู้ปฏิบัติงานจัดคิว: ส่งคำขอไปยัง WorkManager โดยเรียกใช้
WorkManager#enqueue
ขั้นตอนถัดไป
หลังจากอัปโหลดการติดตามแล้ว คุณจะวิเคราะห์การติดตามทีละรายการหรือทำการวิเคราะห์การติดตามหลายรายการพร้อมกันก็ได้ ดูคำแนะนำในการตั้งค่าไปป์ไลน์การวิเคราะห์ที่ปรับขนาดได้ที่หัวข้อการติดตั้งใช้งาน Bigtrace ใน Kubernetes