สร้างบันทึกการติดตามด้วยเครื่องมือสำหรับแอป
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
หากต้องการสร้างการติดตามเมธอดของการดำเนินการของแอป คุณสามารถใช้เครื่องมือของแอปได้
โดยใช้ 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
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-07-27 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2025-07-27 UTC"],[],[],null,["# Generate Trace Logs by Instrumenting Your App\n\nTo generate a method trace of your app's execution, you can instrument your app\nusing the [Debug](/reference/android/os/Debug)\nclass. Instrumenting your app this way gives you more control over exactly when\nthe device starts and stops recording tracing information. The device also saves\nyour trace logs using the names you specify, so you can easily identify each log\nlater. You can then view each trace log using the Android Studio\n[CPU Profiler](/studio/profile/cpu-profiler).\n\nYou can also\n[start and stop tracing in the CPU Profiler](/studio/profile/cpu-profiler#method_traces)\nwithout instrumenting your app's code.\n\nBefore you start generating trace logs, make sure your app has added logic to\nsave trace logs to its [app-specific\ndirectory](/training/data-storage/app-specific).\n\nInstrument your app\n-------------------\n\nTo create trace logs, call [startMethodTracing()](/reference/android/os/Debug#startMethodTracing())\nwhere you want the system to start logging tracing data.\n\nIn the call, you can specify the name for the\n`.trace` file, and the system saves it to a package-specific\ndirectory that's intended for persistent app data on the target device---this is\nthe same directory that is returned by\n[getExternalFilesDir()](/reference/android/content/Context#getExternalFilesDir(java.lang.String))\nand is located in the `~/sdcard/` directory on most devices.\nThis file contains the binary method trace data and a mapping table with thread\nand method names. To stop tracing, call\n[stopMethodTracing()](/reference/android/os/Debug#stopMethodTracing()).\n\nThe following sample starts and stops recording a trace log with the name\n`sample.trace`: \n\n### Kotlin\n\n```kotlin\n// Starts recording a trace log with the name you provide. For example, the\n// following code tells the system to start recording a .trace file to the\n// device with the name \"sample.trace\".\nDebug.startMethodTracing(\"sample\")\n\n// The system begins buffering the generated trace data, until your\n// application calls \u003ccode\u003e\u003ca href=\"/reference/android/os/Debug.html#stopMethodTracing()\"\u003estopMethodTracing()\u003c/a\u003e\u003c/code\u003e, at which time it writes\n// the buffered data to the output file.\nDebug.stopMethodTracing()\n```\n\n### Java\n\n```java\n// Starts recording a trace log with the name you provide. For example, the\n// following code tells the system to start recording a .trace file to the\n// device with the name \"sample.trace\".\nDebug.startMethodTracing(\"sample\");\n...\n// The system begins buffering the generated trace data, until your\n// application calls \u003ccode\u003e\u003ca href=\"/reference/android/os/Debug.html#stopMethodTracing()\"\u003estopMethodTracing()\u003c/a\u003e\u003c/code\u003e, at which time it writes\n// the buffered data to the output file.\nDebug.stopMethodTracing();\n```\n\nNote that if your app calls the\n[startMethodTracing()](/reference/android/os/Debug#startMethodTracing())\nagain without changing the name of the trace log, it overwrites the existing log\nsaved to the device. To learn how to dynamically change the name of each trace\nlog, go to the section about [saving multiple logs](#save_multiple_logs).\n\nIf the system reaches the maximum buffer size before you call\n[stopMethodTracing()](/reference/android/os/Debug#stopMethodTracing()),\nthe system stops tracing and sends a notification to the console.\nThe methods that start and stop traces work across your entire app process. That\nis, you could call\n[startMethodTracing()](/reference/android/os/Debug#startMethodTracing())\nin your activity's\n[onCreate(Bundle)](/reference/android/app/Activity#onCreate(android.os.Bundle))\nmethod, and call [stopMethodTracing()](/reference/android/os/Debug#stopMethodTracing())\nin that activity's [onDestroy()](/reference/android/app/Activity#onDestroy())\nmethod.\n\nNote that your app runs more slowly when profiling is enabled. That is, you\nshouldn't use the profiling data to determine absolute timings (such as, \"method\n`foo()` takes 2.5 seconds to run\"). The timing information in the trace logs are\nuseful only when comparing it to previous trace logs, so you can see if recent\nchanges make your app faster or slower.\n\nWhen deploying to devices running Android 5.0 (API level 21) and higher, you can\nuse sample-based profiling to profile with less runtime performance impact. To\nenable sample profiling, call\n[startMethodTracingSampling()](/reference/android/os/Debug#startMethodTracingSampling(java.lang.String, int, int))\n(instead of calling `startMethodTracing()`) with a specified sampling\ninterval. The system gathers samples periodically until your app calls\n[stopMethodTracing()](/reference/android/os/Debug#stopMethodTracing()).\n\n### Save multiple logs\n\nIf your app starts and stops a method trace multiple times without specifying a\nnew name for the trace log, the device overwrites the older trace log with the\nnew one---that is, it only keeps the most recent trace log. To save multiple\ntrace logs to your device, dynamically rename the trace log each time your app\ncalls [startMethodTracing()](/reference/android/os/Debug#startMethodTracing()).\nThe sample below uses the [SimpleDateFormat](/reference/java/text/SimpleDateFormat)\nclass to include the current date and time when naming each trace log: \n\n### Kotlin\n\n```kotlin\n// Uses the \u003ccode\u003e\u003ca href=\"/reference/java/text/SimpleDateFormat.html\"\u003eSimpleDateFormat\u003c/a\u003e\u003c/code\u003e class to create a String with\n// the current date and time.\nval dateFormat: DateFormat = SimpleDateFormat(\"dd_MM_yyyy_hh_mm_ss\", Locale.getDefault())\nval logDate: String = dateFormat.format(Date())\n// Applies the date and time to the name of the trace log.\nDebug.startMethodTracing(\"sample-$logDate\")\n```\n\n### Java\n\n```java\n// Uses the \u003ccode\u003e\u003ca href=\"/reference/java/text/SimpleDateFormat.html\"\u003eSimpleDateFormat\u003c/a\u003e\u003c/code\u003e class to create a String with\n// the current date and time.\nSimpleDateFormat dateFormat =\n new SimpleDateFormat(\"dd_MM_yyyy_hh_mm_ss\", Locale.getDefault());\nString logDate = dateFormat.format(new Date());\n// Applies the date and time to the name of the trace log.\nDebug.startMethodTracing(\n \"sample-\" + logDate);\n```\n\nAccess trace logs on the device\n-------------------------------\n\nAfter the system creates the trace log on your device, you can access the file\nin one of the following ways:\n\n- [Use the Device Explorer](/studio/debug/device-file-explorer).\n To open the Device Explorer, click\n **View \\\u003e Tool Windows \\\u003e Device Explorer** (or click the\n **Device Explorer**\n button in the tool window bar). As shown in figure 1\n you can locate the `.trace` files by navigating to your app's\n package-specific directory.\n\n\n **Figure 1.** Locating the trace logs using the Device Explorer.\n\n \u003cbr /\u003e\n\n- Copy the file to your local machine using the `adb pull` command.\n The command below copies a trace log named `sample.trace` from the device to\n the `~/Documents/trace-logs/` directory of your local machine.\n\n ```\n adb pull path-on-device/sample.trace ~/Documents/trace-logs/\n ```\n\n \u003cbr /\u003e\n\nYou can then\n[import the trace file](/studio/profile/import-traces) with the CPU Profiler."]]