ภาพรวมของ AIDL

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

Android Interface Definition Language (AIDL) เป็นเครื่องมือที่ช่วยให้ผู้ใช้สามารถแยก IPC ออกไปได้ ด้วยอินเทอร์เฟซ (ที่ระบุในไฟล์ .aidl ) ระบบบิลด์ต่างๆ ใช้ไบนารีของ aidl เพื่อสร้างการเชื่อมโยง C++ หรือ Java เพื่อให้อินเทอร์เฟซนี้สามารถใช้ข้ามกระบวนการได้ โดยไม่คำนึงถึงรันไทม์หรือบิตเนสที่นั่น

สามารถใช้ AIDL ระหว่างกระบวนการใดๆ ใน Android: ระหว่างส่วนประกอบแพลตฟอร์มหรือระหว่างแอป อย่างไรก็ตาม ไม่เคยใช้เป็น API สำหรับแอป อาจใช้ AIDL เพื่อนำ SDK API ไปใช้ในแพลตฟอร์มได้ ตัวอย่างเช่น แต่พื้นผิว SDK API จะไม่มี AIDL API โดยตรง สำหรับเอกสารเกี่ยวกับวิธีการใช้ AIDL ระหว่างแอปโดยตรง โปรดดู เอกสารสำหรับนักพัฒนา Android ที่ เกี่ยวข้อง เมื่อใช้ AIDL ระหว่างส่วนประกอบแพลตฟอร์มที่อัปเดตแยกต่างหาก เช่น APEX (เริ่มใน Android 10) หรือ HAL (เริ่มใน Android 11) ต้องใช้ระบบการกำหนดเวอร์ชันที่เรียกว่า AIDL ที่เสถียร

ตัวอย่าง

นี่คือตัวอย่างอินเทอร์เฟซ AIDL:

    package my.package;

    import my.package.Baz; // defined elsewhere

    interface IFoo {
        void doFoo(Baz baz);
    }

กระบวนการ ของเซิร์ฟเวอร์ ลงทะเบียนอินเทอร์เฟซและให้บริการการเรียก และกระบวนการ ของไคลเอ็นต์ ทำการเรียกไปยังอินเทอร์เฟซเหล่านั้น ในหลายกรณี กระบวนการทำหน้าที่เป็นทั้งไคลเอนต์และเซิร์ฟเวอร์ เนื่องจากอาจอ้างอิงหลายอินเทอร์เฟซ สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับภาษา AIDL โปรดดู ที่ ภาษา AIDL สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับรันไทม์ต่างๆ ที่พร้อมใช้งานสำหรับอินเทอร์เฟซเหล่านี้ โปรดดูที่ AIDL แบ็กเอนด์ การประกาศประเภทนี้เหมือนกับการประกาศคลาสในภาษาที่กำหนด แต่ทำงานข้ามกระบวนการ

มันทำงานอย่างไร

AIDL ใช้ไดรเวอร์เคอร์เนลของ Binder เพื่อโทรออก เมื่อคุณโทรออก ตัวระบุเมธอดและอ็อบเจ็กต์ทั้งหมดจะถูกบรรจุลงในบัฟเฟอร์และคัดลอกไปยังกระบวนการระยะไกลที่เธรดตัวผูกรออ่านข้อมูล เมื่อเธรด Binder ได้รับข้อมูลสำหรับธุรกรรม เธรดจะค้นหาอ็อบเจ็กต์ stub ดั้งเดิมในกระบวนการโลคัล และคลาสนี้จะคลายแพ็กข้อมูลและทำการเรียกบนอ็อบเจ็กต์อินเทอร์เฟซภายใน ออบเจ็กต์อินเทอร์เฟซภายในเครื่องนี้เป็นกระบวนการที่เซิร์ฟเวอร์สร้างและลงทะเบียน เมื่อมีการโทรในกระบวนการเดียวกันและแบ็กเอนด์เดียวกัน จะไม่มีอ็อบเจ็กต์พร็อกซี่อยู่ ดังนั้นการโทรจึงโดยตรงโดยไม่ต้องแพ็คหรือแตกไฟล์

การโต้ตอบกับบริการบนอุปกรณ์

Android มาพร้อมกับคำสั่งสองสามคำสั่งเพื่อให้สามารถโต้ตอบกับบริการต่างๆ บนอุปกรณ์ได้ ลอง:

    adb shell dumpsys --help # listing and dumping services
    adb shell service --help # sending commands to services for testing