Traceview: nó là gì, công cụ truy vết và lập hồ sơ Android

Tác giả: IT Sectr Đã đăng: 2026-03-30 Thời gian đọc: 9 phút

Traceview là công cụ truy vết đồ họa tích hợp trong Android Studio ghi lại và trực quan hóa việc thực thi các phương thức của ứng dụng theo thời gian và tài nguyên CPU. Không giống như Systrace hiển thị các tiến trình hệ thống ở cấp nhân, Traceview tập trung vào các phương thức Java và Kotlin bên trong ứng dụng, được gọi theo chuỗi từ đầu vào của người dùng đến kết xuất giao diện người dùng. Theo Google, 2024, công cụ này giúp tìm ra các điểm nghẽn hiệu suất ở cấp độ từng lời gọi và tối ưu mã trước khi phát hành.

Những điểm chính

  • Traceview là trình lập hồ sơ phương thức Android đồ họa trong Android Studio dựa trên System Tracing
  • Truy vết ghi lại thời lượng của mỗi phương thức, số lượng lời gọi và thời gian CPU
  • Dòng thời gian trong Traceview hiển thị các lời gọi theo thứ tự thời gian với sự lồng ghép luồng
  • Lập hồ sơ giúp tìm các phương thức chậm, cấp phát quá mức và khóa tranh chấp
  • Tích hợp với Android Profiler và API Debug.startMethodTracing để thu thập linh hoạt

Traceview trong Android là gì

Traceview là trình lập hồ sơ đồ họa tích hợp trong Android Studio hiển thị dấu vết thực thi của các phương thức ứng dụng Android dưới dạng dòng thời gian và bảng lời gọi. Nó là một phần của Android SDK và có sẵn thông qua Android Profiler từ Android Studio 3.0, cũng như thông qua tiện ích dòng lệnh dmtracedump.

Mục đích của công cụ

Nhiệm vụ chính của Traceview là giúp nhà phát triển tìm ra các phương thức tiêu tốn nhiều thời gian CPU nhất. Không giống như ghi nhật ký đơn giản, Traceview ghi lại thời gian chính xác khi vào và ra của mỗi phương thức, xây dựng Call Chart và cây Top-Down, cho phép phát hiện trực quan các bất thường về hiệu suất. Công cụ này đặc biệt hữu ích khi lập hồ sơ luồng UI, nơi độ trễ 16 ms gây ra mất khung hình.

Lịch sử và phát triển

Traceview lần đầu tiên xuất hiện trong các phiên bản đầu của Android SDK như một tiện ích độc lập để xem các tệp .trace. Với sự ra mắt của Android Studio 3.0 (2017), nó trở thành một phần của Android Profiler, có được sự tích hợp với dòng thời gian trực tiếp của CPU, bộ nhớ và mạng. Theo Google I/O 2018, nhóm Android Studio tiếp tục phát triển trình lập hồ sơ, thêm hỗ trợ cho mã gốc thông qua systraceperfetto. Trong các phiên bản hiện tại của Android Studio, Traceview hoạt động trên định dạng Perfetto nhưng vẫn duy trì khả năng tương thích ngược với định dạng .trace cổ điển.

Traceview hoạt động như thế nào

Traceview nhận dữ liệu từ cơ chế System Tracing trong Android Runtime (ART). Khi một ứng dụng được khởi chạy với truy vết được bật, ART ghi lại dấu thời gian bắt đầu và kết thúc của mỗi phương thức được thực thi, bao gồm tên lớp, tên phương thức và ID luồng.

kotlin
// Bắt đầu trace trong mã ứng dụng
Debug.startMethodTracing("app_trace")

// Đoạn mã quan trọng để profiling
loadHeavyData()

// Dừng trace — tệp đã được lưu trên thiết bị
Debug.stopMethodTracing()

System Tracing hoạt động ở cấp máy ảo ART và ghi lại mỗi lời gọi phương thức với độ chính xác micro giây. Dữ liệu được ghi vào bộ đệm vòng để giảm thiểu tác động đến hiệu suất ứng dụng. Sau khi dừng truy vết, bộ đệm được xả vào tệp .trace trong bộ nhớ trong của thiết bị.

Định dạng tệp .trace

Tệp .trace chứa phần tiêu đề với phiên bản định dạng và thời gian bắt đầu, tiếp theo là các bản ghi cho mỗi lời gọi: ID luồng, ID phương thức, dấu thời gian vàodấu thời gian ra. Android Studio tự động tải tệp .trace và xây dựng hai chế độ xem chính: Bảng dòng thời gian cho thứ tự thời gian và Bảng hồ sơ cho hệ thống phân cấp lời gọi. Theo mặc định, kích thước bộ đệm tối đa là 8 MB, nhưng có thể tăng lên thông qua Debug.startMethodTracing(filename, maxSize).

Các tính năng chính của Traceview

Traceview cung cấp nhiều chế độ xem dữ liệu bổ sung, mỗi chế độ giải quyết một nhiệm vụ cụ thể trong phân tích hiệu suất.

Call Chart (biểu đồ lời gọi)

Call Chart là dòng thời gian nằm ngang, nơi mỗi luồng được hiển thị dưới dạng một làn riêng biệt. Các phương thức được hiển thị dưới dạng hình chữ nhật màu: chiều rộng của hình chữ nhật tỷ lệ với thời gian thực thi và sự lồng ghép phản ánh hệ thống phân cấp lời gọi. Nếu một phương thức gọi một phương thức khác, hình chữ nhật con được vẽ bên trong hình chữ nhật cha. Trực quan hóa này cho phép xác định ngay lập tức các hoạt động đã chặn luồng.

Cây Top-Down và Bottom-Up

Cây Top-Down hiển thị thời gian thực thi của một phương thức bao gồm tất cả các lời gọi lồng nhau của nó — Inclusive Time. Cây Bottom-Up, ngược lại, hiển thị các phương thức cha nào đã gọi một phương thức nhất định — hữu ích để tìm nguồn gốc của một hoạt động nặng. Sự khác biệt giữa Inclusive và Exclusive Time rất quan trọng: một phương thức có thể tự thực thi nhanh nhưng gọi một phương thức con chậm và điều này chỉ hiển thị trong Inclusive Time.

Tìm kiếm và lọc

Traceview hỗ trợ tìm kiếm theo tên phương thức, gói hoặc lớp. Kết quả được đánh dấu trên dòng thời gian và Bảng hồ sơ chỉ hiển thị thống kê cho các phương thức được tìm thấy. Cũng có sẵn tính năng lọc theo luồng — bạn có thể ẩn các luồng nền và tập trung vào luồng chính (UI), nơi độ trễ là quan trọng nhất.

Số liệuMô tảĐơn vị
Inclusive TimeTổng thời gian của phương thức + tất cả các lời gọi conμs / ms
Exclusive TimeThời gian chỉ của phương thức, không bao gồm lời gọi conμs / ms
Calls + RecurSố lượng lời gọi bao gồm đệ quysố lần
CPU TimeThời gian thực sự dành cho CPU (không tính chờ đợi)μs / ms
Real TimeThời gian thực từ khi vào đến khi ra khỏi phương thứcμs / ms

Xuất dữ liệu

Traceview cho phép xuất dấu vết ở định dạng CSV để phân tích thêm trong bảng tính hoặc biểu đồ. Trong Android Studio, bạn cũng có thể sao chép một đoạn dòng thời gian đã chọn dưới dạng hình ảnh — để chèn vào báo cáo lỗi hoặc tài liệu. Đối với CI/CD, có thể xuất ở định dạng Perfetto thông qua tiện ích cmdline-tools.

Cách sử dụng Traceview trong Android Studio

Lập hồ sơ thông qua Traceview có sẵn theo hai cách: thông qua Android Profiler với tính năng thu thập trực tiếp và thông qua các lời gọi API Debug theo chương trình. Cách đầu tiên thuận tiện cho phân tích tùy biến, cách thứ hai dành cho các bài kiểm tra hiệu suất có thể tái tạo.

Thu thập qua Android Profiler

Trong Android Studio, mở tab Profiler (View → Tool Windows → Profiler), chọn thiết bị và tiến trình ứng dụng của bạn. Nhấp vào phân đoạn CPU, sau đó chọn chế độ “Trace Java Methods” và nhấp vào Record. Sau khi tương tác với ứng dụng, nhấp vào Stop — Traceview sẽ tự động mở dấu vết đã ghi. Thời gian ghi mặc định bị giới hạn ở 30 giây, nhưng giới hạn có thể được thay đổi trong cài đặt của trình lập hồ sơ.

Bắt đầu truy vết theo chương trình

Để lập hồ sơ chính xác một phần mã cụ thể, hãy sử dụng Debug.startMethodTracingDebug.stopMethodTracing. Tệp được lưu vào bộ nhớ ngoài của ứng dụng tại đường dẫn do context.getExternalFilesDir(null) trả về. Sau khi hoàn thành, chuyển tệp .trace sang máy tính của bạn thông qua Android Studio Device Explorer, sau đó mở nó qua File → Open trong Android Studio.

kotlin
Debug.startMethodTracing(
    "heavy_computation",
    Debug.TRACE_COUNT_ALLOCS
)

processLargeDataset()

Debug.stopMethodTracing()

Cấu hình tham số truy vết

Debug.startMethodTracing nhận ba tham số: tên tệp (không có phần mở rộng), kích thước bộ đệm tối đa (mặc định 8 MB) và các cờ. Cờ TRACE_COUNT_ALLOCS thêm tính năng đếm cấp phát đối tượng — hữu ích để tìm rò rỉ bộ nhớ. Traceview không phù hợp để lập hồ sơ mã gốc — hãy sử dụng SimplePerf hoặc Perfetto. Đối với các bài kiểm tra dài (hơn 30 giây), nên tăng bộ đệm lên 64–128 MB thông qua tham số maxSize.

Đọc dòng thời gian Traceview

Dòng thời gian Traceview bao gồm hai bảng: Bảng dòng thời gian phía trên với các hình chữ nhật lời gọi màu sắc và Bảng hồ sơ phía dưới với bảng thống kê. Bảng dòng thời gian hiển thị việc thực thi luồng từ trái sang phải, nơi mỗi hình chữ nhật là một lời gọi phương thức duy nhất. Màu sắc của hình chữ nhật được mã hóa theo loại phương thức: lời gọi hệ thống Android (xanh lá), phương thức ứng dụng (xanh dương), lời gọi thư viện (cam).

Cách đọc Bảng hồ sơ

Trong Bảng hồ sơ, mỗi hàng là một phương thức với các cột Inclusive Time, Exclusive Time, Calls + Recur và CPU Time. Sắp xếp bảng theo Inclusive Time (giảm dần) để xem trước các phương thức chiếm nhiều thời gian nhất. Nếu một phương thức có Inclusive Time cao nhưng Exclusive Time thấp — vấn đề nằm ở các lời gọi con của nó và bạn cần mở rộng cây. Ví dụ: ListView.getView có thể có Inclusive Time cao do các lời gọi tải hình ảnh.

Xác định điểm nghẽn

Tìm các phương thức có Real Time cao bất thường nhưng CPU Time thấp — điều này cho thấy sự chặn (chờ I/O, hoạt động mạng, tranh chấp khóa). Các phương thức có CPU Time cao yêu cầu tối ưu hóa thuật toán. Đối với luồng UI, mỗi phương thức phải hoàn thành trong vòng 16 ms — nếu bất kỳ lời gọi nào vượt quá ngưỡng này, ứng dụng sẽ mất khung hình và người dùng thấy giật hình. Theo khuyến nghị của Google, tổng thời gian của tất cả các lời gọi trong luồng UI trên mỗi khung hình không được vượt quá 8–10 ms, để lại khoảng trống cho các hoạt động hệ thống.

Traceview so với Systrace: so sánh công cụ

Mặc dù cả TraceviewSystrace đều là các công cụ truy vết Android, chúng giải quyết các nhiệm vụ khác nhau và được sử dụng ở các giai đoạn lập hồ sơ khác nhau. Sự khác biệt chính là mức độ chi tiết: Traceview hoạt động ở cấp phương thức Java/Kotlin, Systrace ở cấp tiến trình hệ thống (CPU, GPU, Binder, SurfaceFlinger).

Tiêu chíTraceviewSystrace
Cấp độPhương thức (Java/Kotlin)Tiến trình hệ thống (CPU/GPU/IO)
Giao diệnAndroid Studio ProfilerDòng lệnh + báo cáo HTML
Dữ liệuInclusive/Exclusive TimeTải CPU, tốc độ khung hình
Thời lượngLên đến 30 giây (Profiler), không giới hạn (API)Lên đến 60 giây
Mã gốcKhông hỗ trợHỗ trợ thông qua điểm đánh dấu atrace

Trong thực tế, cả hai công cụ bổ sung cho nhau: đầu tiên Systrace giúp xác định thành phần hệ thống nào đang gây ra sự cố (ví dụ: GC thường xuyên hoặc khóa Binder), sau đó Traceview cho phép đi sâu vào một phương thức cụ thể trong ứng dụng. Trong Android Studio, cả hai công cụ được kết hợp trong Android Profiler — CPU Profiler tự động chọn chế độ ghi tối ưu. Trên các thiết bị chạy Android 12+, Systrace và Traceview hoạt động trên Perfetto, cung cấp định dạng dữ liệu thống nhất cho tất cả các loại lập hồ sơ.

Ví dụ mã với Traceview

Lập hồ sơ hiệu quả đòi hỏi nhiều hơn là chỉ bắt đầu truy vết — bạn cần đặt đúng điểm thu thập và giải thích kết quả. Dưới đây là hai ví dụ thực tế: lập hồ sơ tải RecyclerView và so sánh hai thuật toán trong bài kiểm tra hiệu suất.

Lập hồ sơ tải RecyclerView

Ví dụ đầu tiên là truy vết đường dẫn quan trọng trong quá trình cuộn danh sách. RecyclerView gọi onBindViewHolder cho mỗi mục hiển thị và nếu phương thức này mất hơn 16 ms, cuộn sẽ bị giật. Truy vết xung quanh onBindViewHolder sẽ cho thấy các hoạt động cụ thể nào bên trong nó đang tiêu tốn thời gian.

kotlin
class MyAdapter : RecyclerView.Adapter<ViewHolder>() {
    override fun onBindViewHolder(
        holder: ViewHolder,
        position: Int
    ) {
        Debug.startMethodTracing("bind_card_$position")

        holder.bind(items[position])

        Debug.stopMethodTracing()
    }
}

So sánh hai thuật toán

Ví dụ thứ hai là bài kiểm tra tốc độ A/B của hai cách triển khai: tải hình ảnh qua Glide so với BitmapFactory thủ công. Dấu vết này cho phép so sánh khách quan Inclusive Time của cả hai chiến lược và chọn chiến lược tối ưu. Điều quan trọng là chạy mỗi bài kiểm tra trên thiết bị đã được làm nóng (sau 3–5 chu kỳ) trong điều kiện giống hệt nhau (tải nền, nhiệt độ).

kotlin
fun compareImageLoadingStrategies() {
    // Kiểm tra A: Glide
    Debug.startMethodTracing("glide_test")
    loadWithGlide()
    Debug.stopMethodTracing()

    // Kiểm tra B: BitmapFactory
    Debug.startMethodTracing("bitmap_test")
    loadWithBitmapFactory()
    Debug.stopMethodTracing()
}

Sau khi chạy, hãy mở cả hai tệp .trace trong Android Studio và so sánh Inclusive Time trong Bảng hồ sơ. Nếu Glide hiển thị 3x ít Inclusive Time hơn cho cùng một tác vụ — đây là cơ sở khách quan để chọn thư viện. Theo Tony John (nhà phát triển Glide, 2023), thư viện sử dụng bộ nhớ đệm và nhóm luồng, mang lại lợi ích lên đến 40% cho các lần tải lặp lại.

Câu hỏi thường gặp

Traceview khác gì so với Android Profiler?

Traceview là lõi trực quan hóa dấu vết bên trong Android Profiler. Profiler cung cấp giao diện người dùng bổ sung để bắt đầu và dừng ghi, trong khi Traceview chịu trách nhiệm hiển thị dòng thời gian và thống kê phương thức. Cả hai đều sử dụng cùng một định dạng dữ liệu .trace.

Có thể sử dụng Traceview trên thiết bị vật lý không?

Có, Traceview hoạt động trên cả trình giả lập và thiết bị Android vật lý. Gỡ lỗi USB phải được bật và ứng dụng phải được xây dựng ở chế độ có thể gỡ lỗi. Dữ liệu trên thiết bị vật lý chính xác hơn vì trình giả lập có thể làm sai lệch thời gian do ảo hóa.

Kích thước tối đa của tệp .trace là bao nhiêu?

Kích thước tối đa mặc định là 8 MB, nhưng có thể tăng lên 256 MB thông qua tham số maxSize trong Debug.startMethodTracing. Đối với các phiên lập hồ sơ dài, hãy sử dụng Perfetto, không có giới hạn cứng về kích thước dấu vết.

Tại sao Traceview không hiển thị các phương thức gốc?

Traceview hoạt động ở cấp Android Runtime (ART) và chỉ thấy các phương thức Java và Kotlin được quản lý. Để lập hồ sơ mã gốc (C/C++ qua JNI), hãy sử dụng SimplePerf hoặc Perfetto với FTrace, chúng ghi lại các lời gọi hệ thống ở cấp nhân.

Làm thế nào để mở tệp .trace mà không cần Android Studio?

Sử dụng tiện ích dmtracedump từ SDK Android (thư mục platform-tools). Nó tạo báo cáo HTML với dòng thời gian và bảng thống kê. Trên Windows: dmtracedump -h trace.trace > report.html. Một giải pháp thay thế là giao diện Perfetto (ui.perfetto.dev), hỗ trợ nhập định dạng .trace.

Tóm tắt

  • Traceview là trình lập hồ sơ phương thức Android đồ họa để phân tích hiệu suất trong Android Studio
  • Công cụ hoạt động ở cấp ART và ghi lại Inclusive và Exclusive Time của mỗi phương thức Java/Kotlin
  • Hai chế độ xem chính: Call Chart cho dòng thời gian và Bảng hồ sơ cho thống kê phân cấp
  • Có thể thu thập qua Android Profiler (UI) hoặc theo chương trình thông qua Debug.startMethodTracing
  • Đối với luồng UI, mỗi phương thức phải hoàn thành trong 16 ms, nếu không ứng dụng sẽ mất khung hình
  • Traceview không phù hợp cho mã gốc — sử dụng SimplePerf hoặc Perfetto
  • Nên kết hợp Traceview và Systrace để có bức tranh hiệu suất đầy đủ

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm