กําหนดเหตุการณ์ที่กําหนดเอง (มุมมอง)

แนวคิดและการใช้งาน Jetpack Compose

การติดตามระบบจะแสดงข้อมูลเกี่ยวกับกระบวนการที่ระดับระบบเท่านั้น ดังนั้นบางครั้งจึงยากที่จะทราบว่าเมธอดใดของแอปหรือเกมที่กำลังทำงานอยู่ ณ เวลาใดเวลาหนึ่งเมื่อเทียบกับเหตุการณ์ของระบบ

Jetpack มี Tracing API ที่คุณใช้ติดป้ายกำกับส่วนหนึ่งของโค้ดได้ จากนั้นระบบจะรายงานข้อมูลนี้ในการติดตามที่บันทึกไว้ในอุปกรณ์ Macrobenchmark จะบันทึกการติดตามด้วยจุดติดตามที่กำหนดเองโดยอัตโนมัติ

เมื่อใช้เครื่องมือบรรทัดคำสั่ง systrace เพื่อบันทึกการติดตาม คุณต้องใช้ตัวเลือก -a หากไม่มีตัวเลือกนี้ เมธอดของแอปจะไม่ปรากฏในรายงานการติดตามระบบ

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

เราขอแนะนำให้ใช้ฟังก์ชันส่วนขยายของ Kotlin แม้ในโค้ด Java เนื่องจากฟังก์ชันนี้จะสิ้นสุดการติดตามโดยอัตโนมัติเมื่อแลมบดาเสร็จสมบูรณ์ ซึ่งจะช่วยลดความเสี่ยงในการลืมสิ้นสุดการติดตาม

นอกจากนี้ คุณยังใช้ NDK API สำหรับเหตุการณ์การติดตามที่กำหนดเองได้ด้วย ดูข้อมูลเกี่ยวกับการใช้ API นี้กับโค้ดแบบเนทีฟได้ที่หัวข้อเหตุการณ์การติดตามที่กำหนดเองในโค้ดแบบเนทีฟ