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