Binder هو نظام للتواصل بين العمليات يتيح لعمليتين على جهاز يعمل بنظام التشغيل Android التواصل مع بعضهما. يوفر Binder وسيلة لتنفيذ طلبات استدعاء الدوال في عملية أخرى تكون غير مرئية تمامًا للمستدعي.
في مصطلحات Binder، تُعدّ عملية الاتصال العميل ويُطلق على نقطة النهاية اسم وكيل Binder أو وكيل. في المقابل، يُطلق على العملية التي يتم استدعاؤها اسم الخادم، ويُطلق على نقطة النهاية اسم عقدة الرابط أو العقدة.
يمكن لكل عقدة عرض واجهة خاصة بها وتنفيذها. باستخدام وكيل، يمكن للعميل تنفيذ طرق على واجهة عقدة كما لو كان الاستدعاء عبارة عن استدعاء دالة محلية. يوضّح المثال التالي طريقة استدعاء:
int result = someNodeInterface.foo(a, b); // someNodeInterface is a proxy object
لنفترض أنّ العميل الذي يستدعي foo()
يعمل في العملية (أ) وأنّ الخادم الذي ينفّذ foo()
يعمل في العملية (ب). يوضح الشكل 1 كيفية تنفيذ هذا الاستدعاء:
الشكل 1. تنفيذ طلب Binder
لتنفيذ طريقة في عملية أخرى، كما هو موضّح في الشكل 1، يحدث ما يلي:
- يستدعي رمز العميل في العملية (أ) رمز الوكيل في العملية (أ). ينشئ رمز الوكيل في العملية (أ) معاملة تحتوي على العناصر التالية:
- معرّف العقدة
- معرّف لطريقة
foo()
على العقدة - مخزن مؤقت يحتوي على نسخة من الوسيطتين
a
وb
- يتم إرسال المعاملة إلى برنامج تشغيل نواة Binder.
- يحدّد برنامج تشغيل نواة Binder أنّ العملية B تستضيف العقدة.
- ينسخ النواة العملية بأكملها إلى مساحة عنوان العملية B.
- يبحث النواة عن سلسلة محادثات في العملية B للتعامل مع المعاملة، ثم يمرّر المعاملة إليها.
- يفكّ السلسلة حزمة المعاملة، ويعثر على العقدة، ويرسل المعاملة إلى عنصر العقدة.
- يحصل عنصر العقدة على معرّف الدالة من المعاملة، ويفك حزمة
a
وb
من مخزن المعاملات المؤقت، ويخزّنa
وb
في متغيرات محلية. - يستدعي عنصر العقدة
foo(a, b)
في رمز الخادم في العملية B. - يتم عرض نتيجة المكالمة في معاملة ردّ يتم تمريرها إلى برنامج تشغيل النواة ثم إلى الوكيل الذي أجرى المكالمة في العملية (أ).
- يعرض الخادم الوكيل هذه النتيجة على المتصل في العملية (أ).
حالات استخدام Binder
يمكن استخدام Binder في مجموعة متنوعة من السيناريوهات التي يجب فيها إجراء اتصال بين البرامج في عمليات مختلفة. مثلاً:
يستخدم تطبيق الكاميرا Binder للتواصل مع خادم الكاميرا في عملية أخرى. يستخدم خادم الكاميرا بعد ذلك binder للتواصل مع طبقة HAL الخاصة بالكاميرا في عملية أخرى.
يستخدم التطبيق binder للتواصل مع خادم النظام في عملية أخرى. يستخدم خادم النظام binder للتواصل مع طبقات HAL في عمليات أخرى.
يستخدم تطبيق في إحدى العمليات Binder للتواصل مع تطبيق آخر في عملية أخرى.
يستخدم برنامج النظام الخفي المسؤول عن تثبيت التطبيقات وتحديثها وإزالتها (
installd
) برنامج binder للتواصل مع برنامج Android الخفي (artd) من أجل تجميع التطبيقات.