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