Tạo Nhật ký theo dõi bằng cách Đo lường ứng dụng

Để tạo nhật ký theo dõi phương thức cho quá trình thực thi ứng dụng, bạn có thể đo lường ứng dụng bằng cách sử dụng class Debug. Việc đo lường ứng dụng theo cách này sẽ giúp bạn kiểm soát chính xác hơn thời điểm thiết bị bắt đầu và dừng ghi lại thông tin theo dõi. Thiết bị cũng lưu nhật ký theo dõi của bạn theo tên bạn chỉ định để sau này bạn có thể dễ dàng xác định từng nhật ký. Sau đó, bạn có thể xem từng nhật ký theo dõi bằng Trình phân tích tài nguyên CPU (CPU Profiler) của Android Studio.

Bạn cũng có thể bắt đầu và dừng hoạt động theo dõi trong Trình phân tích tài nguyên CPU mà không cần đo lường mã của ứng dụng.

Trước khi bắt đầu tạo nhật ký theo dõi, hãy đảm bảo ứng dụng của bạn đã thêm logic để lưu nhật ký theo dõi vào thư mục riêng của ứng dụng.

Đo lường ứng dụng của bạn

Để tạo nhật ký theo dõi, hãy gọi startMethodTracing() khi bạn muốn hệ thống bắt đầu ghi nhật ký dữ liệu theo dõi.

Trong lệnh gọi, bạn có thể chỉ định tên của tệp .trace và hệ thống sẽ lưu tên đó vào một thư mục dành riêng cho gói dùng để lưu trữ dữ liệu ứng dụng cố định trên thiết bị mục tiêu—đây cũng chính là thư mục được trả về bởi getExternalFilesDir() và nằm trong thư mục ~/sdcard/ trên hầu hết các thiết bị. Tệp này chứa dữ liệu theo dõi phương thức nhị phân và bảng liên kết gồm tên chuỗi và phương thức. Để ngừng theo dõi, hãy gọi stopMethodTracing().

Mẫu lệnh sau đây bắt đầu và dừng ghi nhật ký theo dõi có tên 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();

Xin lưu ý rằng nếu ứng dụng của bạn gọi lại startMethodTracing() mà không thay đổi tên của nhật ký theo dõi, nó sẽ ghi đè nhật ký hiện tại đã được lưu vào thiết bị. Để tìm hiểu cách thay đổi linh hoạt tên của từng nhật ký theo dõi, hãy chuyển đến phần lưu nhiều nhật ký.

Nếu hệ thống đạt dung lượng bộ nhớ đệm tối đa trước khi bạn gọi stopMethodTracing(), thì hệ thống sẽ ngừng theo dõi và gửi thông báo đến bảng điều khiển. Các phương thức bắt đầu và ngừng theo dõi hoạt động trên toàn bộ quy trình ứng dụng của bạn. Tức là bạn có thể gọi startMethodTracing() trong phương thức onCreate(Bundle) của hoạt động và gọi stopMethodTracing() trong phương thức onDestroy() của hoạt động đó.

Lưu ý rằng ứng dụng sẽ chạy chậm hơn khi bật tính năng phân tích tài nguyên. Nghĩa là, bạn không nên sử dụng dữ liệu phân tích tài nguyên để xác định thời gian tuyệt đối (chẳng hạn như "phương thức foo() mất 2,5 giây để chạy"). Thông tin thời gian trong nhật ký theo dõi chỉ hữu ích khi được so sánh với nhật ký theo dõi trước đó, để bạn có thể xem liệu các thay đổi gần đây khiến ứng dụng của mình nhanh hơn hay chậm hơn.

Khi triển khai cho các thiết bị chạy Android 5.0 (API cấp độ 21) trở lên, bạn có thể sử dụng tính năng phân tích dựa trên mẫu để phân tích nhằm giảm tác động đến hiệu suất trong thời gian chạy. Để bật tính năng phân tích mẫu, hãy gọi startMethodTracingSampling() (thay vì gọi startMethodTracing()) kèm khoảng thời gian lấy mẫu chỉ định. Hệ thống sẽ thu thập mẫu theo chu kỳ cho đến khi ứng dụng của bạn gọi stopMethodTracing().

Lưu nhiều nhật ký

Nếu ứng dụng của bạn bắt đầu và dừng thực hiện theo dõi phương thức nhiều lần mà không chỉ định tên mới cho nhật ký theo dõi, thì thiết bị sẽ ghi đè nhật ký theo dõi cũ hơn bằng nhật ký theo dõi mới. Nghĩa là, thiết bị chỉ lưu nhật ký theo dõi gần đây nhất. Để lưu nhiều nhật ký theo dõi vào thiết bị, hãy linh động đổi tên nhật ký theo dõi mỗi khi ứng dụng của bạn gọi startMethodTracing(). Mẫu dưới đây sử dụng class SimpleDateFormat để chèn ngày và giờ hiện tại khi đặt tên cho từng nhật ký theo dõi:

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);

Truy cập nhật ký theo dõi trên thiết bị

Sau khi hệ thống tạo nhật ký theo dõi trên thiết bị của bạn, bạn có thể truy cập vào tệp đó bằng một trong những cách sau đây:

  • Sử dụng Trình khám phá thiết bị. Để mở Trình khám phá thiết bị, hãy nhấp vào View > Tool Windows > Device Explorer (Xem > Cửa sổ công cụ > Trình khám phá thiết bị) (hoặc nhấp vào nút Trình khám phá thiết bị trong thanh cửa sổ công cụ). Như trong hình 1, bạn có thể tìm các tệp .trace bằng cách chuyển đến thư mục dành riêng cho gói của ứng dụng.

    Hình 1. Tìm nhật ký theo dõi bằng Trình khám phá thiết bị.

  • Sao chép tệp vào máy cục bộ bằng lệnh adb pull. Lệnh dưới đây sao chép nhật ký theo dõi có tên sample.trace từ thiết bị vào thư mục ~/Documents/trace-logs/ của máy cục bộ.

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

Sau đó, bạn có thể nhập tệp theo dõi với CPU Profiler.