Android Profiler คือชุดเครื่องมือที่รวมอยู่ใน Android Studio สำหรับตรวจสอบประสิทธิภาพของแอปพลิเคชันแบบเรียลไทม์ สามารถติดตามโหลด CPU การใช้หน่วยความจำ ปริมาณการใช้งานเครือข่าย และการใช้พลังงานโดยไม่ต้องติดตั้งไลบรารีของบุคคลที่สาม ตามข้อมูลจาก Android Developers โปรไฟเลอร์ถูกรวมเข้ากับ IDE โดยตรงและให้เมตริกที่มีความแม่นยำระดับมิลลิวินาทีสำหรับทุกกระบวนการบนอุปกรณ์ที่เชื่อมต่อ
ประเด็นสำคัญ
Android Profiler เป็นส่วนประกอบของ Android Studio ที่แทนที่ Android Monitor และ DDMS แบบเก่า โดยให้อินเทอร์เฟซแบบรวมสำหรับการโปรไฟล์ทุกด้านของแอปพลิเคชัน: CPU Profiler สำหรับการวิเคราะห์โปรเซสเซอร์, Memory Profiler สำหรับการทำงานกับหน่วยความจำ, Network Profiler สำหรับคำขอเครือข่าย และ Energy Profiler สำหรับการใช้พลังงาน ข้อมูลจะถูกรวบรวมโดยอัตโนมัติเมื่อเริ่มต้นแอปพลิเคชันผ่าน Android Studio
โปรไฟเลอร์ทำงานทั้งบนอีมูเลเตอร์และอุปกรณ์จริงที่เชื่อมต่อผ่าน USB ตามข้อมูลจาก Google I/O 2023 Android Profiler ถูกใช้ในกว่า 70% ของโครงการ Android และถือเป็นเครื่องมือมาตรฐานสำหรับการวินิจฉัยประสิทธิภาพ ข้อได้เปรียบหลักเหนือโซลูชันของบุคคลที่สามคือการรวมแบบศูนย์: ไม่จำเป็นต้องเพิ่ม dependencies ใน build.gradle หรือแก้ไขโค้ดของแอปพลิเคชัน
สถาปัตยกรรมของ Android Profiler สร้างขึ้นบน Perfetto — ตัวติดตามระบบของ Android ที่รวบรวมข้อมูลในระดับเคอร์เนลและแอปพลิเคชัน Perfetto รับประกันโอเวอร์เฮดขั้นต่ำ (น้อยกว่า 1% ของ CPU) และรองรับการบันทึกระยะยาวสูงสุด 30 นาที ซึ่งช่วยให้สามารถโปรไฟล์ได้ไม่เพียงแต่การดำเนินการที่รวดเร็ว แต่ยังรวมถึงสถานการณ์ระยะยาว — การเปลี่ยนระหว่างหน้าจอ การซิงค์พื้นหลัง การใช้หน่วยความจำระหว่างการใช้งานหนึ่งชั่วโมง
โปรไฟเลอร์รวบรวมข้อมูลสี่ประเภท: CPU — โหลดของแต่ละคอร์และเธรด, Memory — Java Heap, Native Heap, Stack, Graphics, Network — คำขอขาเข้าและขาออกทั้งหมด, Energy — หมวดหมู่การใช้พลังงาน (Idle, Light, Medium, Heavy) ข้อมูลถูกซิงค์บนไทม์ไลน์ — คุณสามารถดูพร้อมกันว่าการเปลี่ยนแปลงของ CPU ส่งผลต่อหน่วยความจำและการใช้พลังงานอย่างไร
CPU Profiler แสดงโหลดโปรเซสเซอร์แบบเรียลไทม์บนไทม์ไลน์ โดยแบ่งตามเธรดของแอปพลิเคชัน แต่ละเธรดแสดงด้วยเส้นหรือพื้นที่สี — ยิ่งพื้นที่กว้างเท่าไหร่ เธรดยิ่งใช้เวลาโปรเซสเซอร์มากขึ้นเท่านั้น พื้นที่สีแดงหมายถึงการทำงานของแอปพลิเคชัน สีน้ำเงินหมายถึงการเรียกระบบ สีเทาหมายถึงการรอ
สำหรับการวิเคราะห์โดยละเอียด CPU Profiler รองรับสามโหมดการบันทึก: Trace Java Methods (การติดตามเมธอด Java ทั้งหมด), Trace C/C++ Functions (การติดตามฟังก์ชันเนทีฟ NDK) และ Sample Java Methods (การสุ่มตัวอย่าง โหมดแนะนำ) การสุ่มตัวอย่างให้โอเวอร์เฮดต่ำที่สุดและเหมาะสำหรับการโปรไฟล์ประจำวัน ในขณะที่การติดตามเต็มรูปแบบใช้สำหรับค้นหาปัญหาที่ซับซ้อน
// ตัวอย่าง: การวิเคราะฮ์ CPU Profiler จะแสดงเมธอดนี้เป็นจุดคอปคอ
class DataProcessor {
suspend fun processLargeDataset(items: List<Item>): List<Result> {
// CPU Profiler จะแสดงโหลด CPU สูงใน inBackgroundThread
return withContext(Dispatchers.Default) {
items.map { it.computeHeavyTransformation() }
}
}
}
// คำแนะนำหลังการโปรไฟล์:
// computeHeavyTransformation ใช้เวลา 80% — แคชผลลัพธ์
class DataProcessorOptimized {
private val cache = LruCache<String, Result>(100)
suspend fun processLargeDataset(items: List<Item>): List<Result> {
return withContext(Dispatchers.Default) {
items.mapNotNull { cache.get(it.id) ?: it.computeHeavyTransformation().also { cache.put(it.id, it) } }
}
}
}
หลังจากการบันทึก CPU Profiler จะแสดง Top-Down Tree — แผนผังการเรียกพร้อมเวลาดำเนินการของแต่ละเมธอด ให้ความสนใจกับคอลัมน์ Self Time/Total: หาก Self Time ของเมธอดมากกว่า 16 ms และถูกเรียกจากเธรด UI — นั่นคือการตกเฟรมที่แน่นอน วิธีแก้ไขคือย้ายการคำนวณหนักไปยังเธรดพื้นหลังผ่าน Dispatchers.IO หรือ Default
Sample Java Methods — โหมดแนะนำสำหรับการโปรไฟล์ประจำวันโดยมีโอเวอร์เฮด 3–5% Trace Java Methods — การติดตามทุกการเรียกอย่างสมบูรณ์ โอเวอร์เฮดสูงถึง 15% ใช้สำหรับการบันทึกสั้น (5–10 วินาที) Trace C/C++ Functions — การติดตามโค้ด NDK ผ่าน Linux Perf ขาดไม่ได้สำหรับการวิเคราะห์เกมและไลบรารี C++ เปลี่ยนโหมดตามประเภทของปัญหา
Memory Profiler ติดตามทุกหมวดหมู่หน่วยความจำของแอปพลิเคชัน: Java Heap (วัตถุ JVM), Native Heap (การจัดสรร C/C++ ผ่าน JNI), Stack (สแต็กเธรด) และ Graphics (พื้นผิว, บัฟเฟอร์ GPU) การแสดงผลหลักคือกราฟเวลาของการใช้หน่วยความจำ โดยแต่ละหมวดหมู่แสดงด้วยสีของตัวเอง หากกราฟไม่ลดลงหลังจากการเก็บขยะ — ให้สงสัยว่ารั่วไหล
ในการค้นหารั่วไหล ให้ใช้ฟังก์ชัน Capture Heap Dump ในขณะที่ดัมพ์ Android Profiler จะหยุดแอปพลิเคชันประมาณ 100 ms และสร้างไฟล์ HPROF — ภาพรวมทั้งหมดของวัตถุที่มีชีวิตทั้งหมดใน Java Heap หลังจากเปิดดัมพ์ คุณสามารถเรียงลำดับวัตถุตาม Retained Size (ปริมาณหน่วยความจำที่จะว่างเมื่อลบวัตถุ) และค้นหาอินสแตนซ์ของ Activity, Fragment หรือ Bitmap ที่ควรถูกทำลาย
ตามข้อมูลจาก Google I/O 2022 Memory Profiler ร่วมกับ LeakCanary ครอบคลุม 95% ของสถานการณ์การตรวจจับการรั่วไหลของหน่วยความจำบน Android LeakCanary ทำงานโดยอัตโนมัติ — ตรวจจับการรั่วไหลในพื้นหลัง Memory Profiler จำเป็นสำหรับการวิเคราะห์ด้วยตนเอง: คุณเห็นภาพรวมทั้งหมดของการจัดสรร ไม่ใช่แค่การรั่วไหล
| หมวดหมู่หน่วยความจำ | คำอธิบาย | ขนาดทั่วไป |
|---|---|---|
| Java Heap | ฮีป JVM: วัตถุ Kotlin/Java | 5–200 MB |
| Native Heap | การจัดสรรผ่าน JNI, NDK | 1–100 MB |
| Graphics | พื้นผิว, บัฟเฟอร์ GPU | 10–200 MB |
| Stack | สแต็กของทุกเธรด | 1–10 MB |
หลังจากจับภาพดัมพ์ ให้เรียงลำดับวัตถุตาม Retained Size — นี่คือปริมาณหน่วยความจำที่จะว่างเมื่อลบวัตถุ ค้นหาอินสแตนซ์ของ Activity, Fragment และ Bitmap ที่มี Retained Size ใหญ่ซึ่งไม่ควรอยู่ในหน่วยความจำ ไปที่แท็บ Reference Tree เพื่อดูห่วงโซ่การอ้างอิงที่ยึดวัตถุไว้ — โดยทั่วไปแล้วเป็นฟิลด์สแตติกของซิงเกิลตันหรือ callback ที่ไม่ได้ทำความสะอาด เมตริกที่สำคัญคือ อัตราการจัดสรร (จำนวนการจัดสรรต่อวินาที) หากอัตราการจัดสรรเกิน 10,000 วัตถุ/วินาที แอปพลิเคชันใช้เวลามากเกินไปในการสร้างและลบวัตถุชั่วคราว ซึ่งทำให้ GC ทำงานหนักและเกิดไมโครฟรีซ ในกรณีนี้ ให้ใช้เครื่องมือ View Inspector และค้นหาตำแหน่งที่มีการสร้างวัตถุบ่อยครั้งในลูป
Network Profiler แสดงคำขอเครือข่ายทั้งหมดของแอปพลิเคชันแบบเรียลไทม์บนไทม์ไลน์ แต่ละคำขอแสดงเป็นแถบแนวนอน — ความยาวสอดคล้องกับเวลาดำเนินการ สีสอดคล้องกับประเภทคำขอ (GET, POST, PUT, DELETE) การเลื่อนสเกลช่วยให้เห็นว่าคำขอถูกกระจายตามเวลาอย่างไรและซ้ำซ้อนหรือไม่
ไลบรารียอดนิยมทั้งหมดได้รับการสนับสนุน: OkHttp, Retrofit, Volley, Ktor สำหรับ Ktor และ OkHttp โปรไฟเลอร์จะแสดงสแต็กการเรียกทั้งหมด รวมถึงอินเตอร์เซปเตอร์และตัวแปลง สำหรับแต่ละคำขอ ส่วนหัวของคำขอ และ ส่วนหัวของการตอบสนอง เนื้อหาการตอบสนอง (สูงสุด 1 MB), รหัสสถานะ และระยะเวลาพร้อมให้ใช้งาน
ปัญหาทั่วไปที่ Network Profiler ระบุ: ขาดแคช (URL เดียวกันถูกขอทุกครั้งที่เปิด), คำขอซ้ำซ้อน (สองคอมโพเนนต์โหลดข้อมูลเดียวกันพร้อมกัน), ขนาดการตอบสนองมากเกินไป (เซิร์ฟเวอร์ส่ง 5 MB ในเมื่อต้องการ 50 KB) Network Profiler ช่วยให้เห็นปัญหาเหล่านี้ได้เพียงแค่เหลือบดูไทม์ไลน์
สำหรับการจำลองเครือข่ายช้า ให้ใช้ Network Conditioning ใน Android Studio — สามารถจำกัดแบนด์วิธเป็น 3G/2G และเพิ่มความหน่วงได้ ซึ่งมีความสำคัญอย่างยิ่งสำหรับการทดสอบพฤติกรรมของแอปพลิเคชันในสภาพเครือข่ายที่ไม่ดี โดยเฉพาะสำหรับแอปพลิเคชันที่ทำงานในภูมิภาคที่มีอินเทอร์เน็ตไม่เสถียร
Energy Profiler ประเมินผลกระทบของแอปพลิเคชันต่อแบตเตอรี่ตามข้อมูล Perfetto เครื่องมือนี้ไม่ได้วัดการบริโภคจริงในหน่วยมิลลิแอมป์ แต่จำแนกแต่ละการดำเนินการออกเป็นหนึ่งในห้าหมวดหมู่การใช้พลังงาน: Idle, Light, Medium, High และ Overloaded ไทม์ไลน์ของ Energy Profiler จะถูกเน้นด้วยสี: เขียว (โหลดเบา), เหลือง (ปานกลาง), แดง (สูง)
สาเหตุหลักของโซนสีแดง: WakeLock (แอปพลิเคชันทำให้โปรเซสเซอร์ทำงานต่อ), ตำแหน่ง GPS (การขอพิกัดอย่างต่อเนื่องด้วยความแม่นยำสูง), การเชื่อมต่อ Keep-Alive (การแลกเปลี่ยนข้อมูลกับเซิร์ฟเวอร์บ่อยครั้ง), การถ่ายโอนข้อมูลขนาดใหญ่ (การส่งไฟล์, การสตรีม) Energy Profiler แสดงอย่างแม่นยำว่าการดำเนินการใดในช่วงเวลาใดที่ทำให้เกิดจุดสูงสุดของการใช้พลังงาน
ตามข้อมูลจาก Android Developers แอปพลิเคชันทั่วไปไม่ควรใช้เวลามากกว่า 5% ในหมวดหมู่ High หาก Energy Profiler แสดงโซนสีแดงนานกว่า 10% ของเวลาโปรไฟล์ — แอปพลิเคชันจะไม่ผ่านการตรวจสอบตามเกณฑ์ Battery Drain คำแนะนำ — ใช้ WorkManager สำหรับงานพื้นหลัง จำกัดคำขอตำแหน่งให้มีความแม่นยำขั้นต่ำที่จำเป็น และรวมคำขอเครือข่ายเป็นชุด
การเริ่มต้น Android Profiler ทำได้ด้วยคลิกเดียว: ใน Android Studio เปิด View → Tool Windows → Profiler หรือดับเบิลคลิกที่ไอคอน Profiler ในแผงด้านขวา หลังจากเริ่มต้นแอปพลิเคชันบนอุปกรณ์ที่เชื่อมต่อ Android Studio จะเชื่อมต่อกับกระบวนการโดยอัตโนมัติและเริ่มรวบรวมข้อมูล บนไทม์ไลน์ กราฟ CPU, Memory, Network และ Energy จะปรากฏขึ้นทันที
สำหรับการวิเคราะห์โดยละเอียด เลือกแท็บที่ต้องการ (CPU, Memory, Network หรือ Energy) และเริ่มการบันทึก สำหรับ CPU ฉันแนะนำโหมด Sample Java Methods โดยมีระยะเวลาการบันทึก 30 วินาที — เพียงพอสำหรับสถานการณ์ทั่วไป สำหรับ Memory — ดัมพ์ฮีปหลังจากการดำเนินการสถานการณ์ (Capture Heap Dump) สำหรับ Network การบันทึกจะเริ่มโดยอัตโนมัติ เพียงกดปุ่ม Stop หลังจากเสร็จสิ้นสถานการณ์
หลังจากหยุดการบันทึก ให้ส่งออกข้อมูล: File → Save As บันทึกเซสชันทั้งหมดในไฟล์ .perf สะดวกสำหรับการเปรียบเทียบเมตริกก่อนและหลังการปรับแต่ง สร้างเซสชันพื้นฐานในเวอร์ชันเสถียรแรกและเปรียบเทียบแต่ละเซสชันใหม่กับเซสชันนั้น — นี่เป็นวิธีเดียวในการประเมินการเปลี่ยนแปลงประสิทธิภาพอย่างเป็นกลาง
Android Profiler สามารถเรียกใช้จากบรรทัดคำสั่งผ่าน Android Studio CLI และ Firebase Test Lab Firebase Test Lab รองรับการโปรไฟล์ประสิทธิภาพเป็นส่วนหนึ่งของการทดสอบ UI: คุณจะได้รับเมตริก CPU, Memory และ Network พร้อมกับผลการทดสอบ กำหนดค่าไปป์ไลน์เพื่อให้เมื่อเมตริกลดลง 10% เมื่อเทียบกับพื้นฐาน ไปป์ไลน์ CI จะถูกบล็อกจนกว่าจะตรวจสอบโดยนักพัฒนา
คำถามที่พบบ่อย
ผลกระทบน้อยมาก Android Profiler ใช้ Perfetto สำหรับการรวบรวมข้อมูล ซึ่งเพิ่มโอเวอร์เฮด CPU น้อยกว่า 1% ในโหมด Sample Java Methods โอเวอร์เฮดประมาณ 3–5% ซึ่งไม่สำคัญสำหรับการโปรไฟล์สถานการณ์ การติดตามเมธอดแบบเต็มอาจให้โอเวอร์เฮดสูงถึง 15% จึงใช้สำหรับการบันทึกสั้นเท่านั้น
ได้ การติดตามระบบสามารถบันทึกผ่าน Perfetto CLI ได้โดยตรงจากอุปกรณ์: adb shell perfetto --out /data/local/tmp/trace.perf จากนั้นเปิดไฟล์ในอินเทอร์เฟซ Perfetto UI (ui.perfetto.dev) หรือนำเข้าใน Android Studio เพื่อดูพร้อมมาร์กอัปเต็มของแอปพลิเคชัน
Android Profiler เป็นเครื่องมือระบบที่ไม่ต้องกำหนดค่า proxy แสดงคำขอโดยตรงใน IDE ในบริบทของประสิทธิภาพ Charles Proxy เป็นพร็อกซีเซิร์ฟเวอร์ภายนอกที่ให้การวิเคราะห์โดยละเอียดมากขึ้น (การสกัดกั้นการรับส่งข้อมูล การแก้ไขคำขอ การส่งซ้ำ) สำหรับการโปรไฟล์ประสิทธิภาพ ให้ใช้ Android Profiler สำหรับการวิเคราะห์สัญญา API ให้ใช้ Charles
ทำดัมพ์ฮีปก่อนดำเนินการสถานการณ์ (เช่น ก่อนเปิด Activity) ดำเนินการสถานการณ์ — เปิด Activity และปิด ทำดัมพ์ที่สอง เปรียบเทียบจำนวนอินสแตนซ์ Activity ที่มีชีวิต: ถ้าในดัมพ์ที่สองมีมากกว่า — รั่วไหล เรียงตาม Retained Size ค้นหา Activity ที่เกินมาและดู Reference Tree เพื่อหาสาเหตุ
Energy Profiler ต้องการการสนับสนุน Power Profiles ในระดับอุปกรณ์และ Android 8.0+ บนอีมูเลเตอร์และเฟิร์มแวร์บางตัว (โดยเฉพาะของจีน) ข้อมูลอาจไม่มี วิธีแก้ไข — โปรไฟล์การใช้พลังงานบนอุปกรณ์อ้างอิง Pixel หรือ Samsung ที่มีเฟิร์มแวร์ Android แท้
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม