Xác định sự kiện tuỳ chỉnh

Tính năng theo dõi hệ thống chỉ hiển thị cho bạn thông tin về các quy trình ở cấp hệ thống, vì vậy, đôi khi khó biết được phương thức nào trong ứng dụng hoặc trò chơi của bạn đang thực thi tại một thời điểm nhất định so với các sự kiện hệ thống.

Jetpack cung cấp API theo dõi mà bạn có thể dùng để gắn nhãn một phần mã cụ thể. Sau đó, thông tin này được báo cáo trong các dấu vết được ghi lại trên thiết bị. Macrobenchmark tự động thu thập dữ liệu dấu vết bằng các điểm theo dõi tuỳ chỉnh.

Khi sử dụng công cụ dòng lệnh systrace để ghi lại dấu vết, bạn phải chọn tuỳ chọn -a. Nếu không có tuỳ chọn này, các phương thức của ứng dụng sẽ không xuất hiện trong báo cáo theo dõi hệ thống.

Kotlin

class MyAdapter : RecyclerView.Adapter<MyViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup,
            viewType: Int): MyViewHolder {
        trace("MyAdapter.onCreateViewHolder") {
            MyViewHolder.newInstance(parent)
        }
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        trace("MyAdapter.onBindViewHolder") {
            trace("MyAdapter.queryDatabase")
                val rowItem = queryDatabase(position)
                dataset.add(rowItem)
            }
            holder.bind(dataset[position])
        }
    }
}

Java

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return TraceKt.trace(
            "MyAdapter.onCreateViewHolder",
            () -> MyViewHolder.newInstance(parent)
        );
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        TraceKt.trace(
            "MyAdapter.onBindViewHolder",
            () -> {
                TraceKt.trace(
                    "MyAdapter.queryDatabase",
                    () -> {
                        Item rowItem = queryDatabase(position);
                        dataset.add(rowItem);
                    }
                );
            }
        );
    }
}

Bạn nên sử dụng hàm mở rộng Kotlin, ngay cả trong mã Java, vì hàm này tự động kết thúc dấu vết khi lambda hoàn tất. Điều này sẽ loại bỏ nguy cơ quên kết thúc quá trình theo dõi.

Bạn cũng có thể sử dụng API NDK cho các sự kiện theo dõi tuỳ chỉnh. Để tìm hiểu cách sử dụng API này cho mã gốc của bạn, hãy xem bài viết Sự kiện theo dõi tuỳ chỉnh trong mã gốc.