สร้างบันทึกการติดตามด้วยเครื่องมือสำหรับแอป

หากต้องการสร้างการติดตามเมธอดของการดำเนินการของแอป คุณสามารถใช้เครื่องมือของแอปได้ โดยใช้ Debug การวัดคุมแอปด้วยวิธีนี้ทำให้คุณควบคุมได้มากขึ้นว่า อุปกรณ์จะเริ่มต้นและหยุดบันทึกข้อมูลการติดตาม อุปกรณ์ยังบันทึก บันทึกการติดตามโดยใช้ชื่อที่คุณระบุเพื่อให้ระบุบันทึกแต่ละรายการได้โดยง่าย ในภายหลัง จากนั้นคุณจะดูบันทึกการติดตามแต่ละรายการได้โดยใช้ Android Studio เครื่องมือสร้างโปรไฟล์ CPU

นอกจากนี้คุณยัง เริ่มและหยุดการติดตามในเครื่องมือสร้างโปรไฟล์ CPU โดยไม่ต้องติดตั้งเครื่องมือในโค้ดของแอป

ก่อนเริ่มสร้างบันทึกการติดตาม ให้ตรวจสอบว่าแอปได้เพิ่มตรรกะในการบันทึกบันทึกการติดตามลงในไดเรกทอรีเฉพาะแอปแล้ว

เครื่องมือวัดผลแอป

หากต้องการสร้างบันทึกการติดตาม ให้เรียกใช้ startMethodTracing() ที่คุณต้องการให้ระบบเริ่มบันทึกข้อมูลการติดตาม

ในการเรียกใช้ คุณสามารถระบุชื่อไฟล์ .trace และระบบจะบันทึกไฟล์ดังกล่าวลงในไดเรกทอรีเฉพาะแพ็กเกจซึ่งมีไว้สำหรับข้อมูลแอปถาวรในอุปกรณ์เป้าหมาย ซึ่งเป็นไดเรกทอรีเดียวกับที่ getExternalFilesDir() แสดงผลและอยู่ในไดเรกทอรี ~/sdcard/ ในอุปกรณ์ส่วนใหญ่ ไฟล์นี้มีข้อมูลการติดตามเมธอดแบบไบนารีและตารางการแมปที่มีเธรด และชื่อเมธอด หากต้องการหยุดการติดตาม ให้โทรไปที่ stopMethodTracing()

ตัวอย่างต่อไปนี้จะเริ่มต้นและหยุดเก็บบันทึกการติดตามโดยใช้ชื่อ sample.trace:

Kotlin

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample")

// The system begins buffering the generated trace data, until your
// application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing()

Java

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample");
...
// The system begins buffering the generated trace data, until your
// application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing();

โปรดทราบว่าหากแอปเรียกใช้ startMethodTracing() อีกครั้งโดยไม่เปลี่ยนชื่อบันทึกการติดตาม ระบบจะเขียนทับบันทึกที่มีอยู่ซึ่งบันทึกไว้ในอุปกรณ์ หากต้องการดูวิธีเปลี่ยนชื่อบันทึกการติดตามแต่ละรายการแบบไดนามิก ให้ไปที่ส่วนเกี่ยวกับการบันทึกบันทึกหลายรายการ

หากระบบถึงขนาดบัฟเฟอร์สูงสุดก่อนการเรียกใช้ stopMethodTracing() ระบบจะหยุดติดตามและส่งการแจ้งเตือนไปยังคอนโซล วิธีการที่เริ่มและหยุดการติดตามจะทํางานในกระบวนการทั้งหมดของแอป กล่าวคือ คุณสามารถเรียกใช้ startMethodTracing() ในเมธอด onCreate(Bundle) ของกิจกรรม และเรียกใช้ stopMethodTracing() ในเมธอด onDestroy() ของกิจกรรมนั้น

โปรดทราบว่าแอปจะทำงานช้าลงเมื่อเปิดใช้การโปรไฟล์ กล่าวคือ คุณไม่ควรใช้ข้อมูลการโปรไฟล์เพื่อระบุเวลาสัมบูรณ์ (เช่น "เมธอด foo() ใช้เวลา 2.5 วินาทีในการเรียกใช้") ข้อมูลเวลาในบันทึกการติดตามคือ มีประโยชน์เฉพาะเมื่อเปรียบเทียบกับบันทึกการติดตามก่อนหน้า เพื่อให้คุณสามารถดูว่า การเปลี่ยนแปลงจะทำให้แอปของคุณเร็วขึ้นหรือช้าลง

เมื่อติดตั้งใช้งานในอุปกรณ์ที่ใช้ Android 5.0 (API ระดับ 21) ขึ้นไป คุณจะใช้การโปรไฟล์ตามตัวอย่างเพื่อโปรไฟล์โดยที่ส่งผลกระทบต่อประสิทธิภาพรันไทม์น้อยลงได้ หากต้องการเปิดใช้โปรไฟล์ตัวอย่าง ให้เรียกใช้ startMethodTracingSampling() (แทนการเรียกใช้ startMethodTracing()) พร้อมช่วงเวลาการสุ่มตัวอย่างที่ระบุ ระบบจะรวบรวมตัวอย่างเป็นระยะๆ จนกว่าแอปของคุณจะเรียกใช้ stopMethodTracing()

บันทึกหลายบันทึก

หากแอปเริ่มและหยุดการติดตามเมธอดหลายครั้งโดยไม่ระบุชื่อใหม่สําหรับบันทึกการติดตาม อุปกรณ์จะเขียนทับบันทึกการติดตามเก่าด้วยบันทึกการติดตามใหม่ ซึ่งหมายความว่าระบบจะเก็บเฉพาะบันทึกการติดตามล่าสุดไว้ เพื่อบันทึกหลายรายการ บันทึกการติดตามไปยังอุปกรณ์ของคุณ เปลี่ยนชื่อบันทึกการติดตามแบบไดนามิกทุกครั้งที่แอปของคุณ โทรหา startMethodTracing() ตัวอย่างด้านล่างใช้คลาส SimpleDateFormat เพื่อใส่วันที่และเวลาปัจจุบันเมื่อตั้งชื่อบันทึกการติดตามแต่ละรายการ

Kotlin

// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with
// the current date and time.
val dateFormat: DateFormat = SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault())
val logDate: String = dateFormat.format(Date())
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing("sample-$logDate")

Java

// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with
// the current date and time.
SimpleDateFormat dateFormat =
        new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault());
String logDate = dateFormat.format(new Date());
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing(
        "sample-" + logDate);

เข้าถึงบันทึกการติดตามในอุปกรณ์

หลังจากที่ระบบสร้างบันทึกการติดตามในอุปกรณ์แล้ว คุณจะเข้าถึงไฟล์ได้ ด้วยวิธีใดวิธีหนึ่งต่อไปนี้

  • ใช้เครื่องมือสํารวจอุปกรณ์ หากต้องการเปิดเครื่องมือสํารวจอุปกรณ์ ให้คลิกดู > หน้าต่างเครื่องมือ > เครื่องมือสํารวจอุปกรณ์ (หรือคลิกปุ่มเครื่องมือสํารวจอุปกรณ์ ในแถบหน้าต่างเครื่องมือ) ดังที่แสดงในรูปที่ 1 คุณค้นหาไฟล์ .trace ได้โดยไปที่ไดเรกทอรีเฉพาะแพ็กเกจของแอป

    รูปที่ 1 ค้นหาบันทึกการติดตามโดยใช้เครื่องมือสํารวจอุปกรณ์

  • คัดลอกไฟล์ไปยังเครื่องที่ใช้อยู่โดยใช้คําสั่ง adb pull คำสั่งด้านล่างจะคัดลอกบันทึกการติดตามชื่อ sample.trace จากอุปกรณ์ไปยังไดเรกทอรี ~/Documents/trace-logs/ ของเครื่อง

    adb pull path-on-device/sample.trace ~/Documents/trace-logs/

จากนั้นคุณจะสามารถ นำเข้าไฟล์การติดตามด้วยเครื่องมือสร้างโปรไฟล์ CPU