Binder سیستمی برای ارتباط میانپردازشی است که به دو پردازش در دستگاه مجهز به Android اجازه میدهد با یکدیگر ارتباط برقرار کنند. Binder ابزاری برای اجرای فراخوانیهای تابع در فرایند دیگری ارائه میدهد که کاملاً برای تماسگیرنده شفاف است.
در اصطلاحات binder، فرایند تماسگیرنده بهعنوان کارخواه درنظر گرفته میشود و نقطه پایانی آن پروکسی binder یا پروکسی نامیده میشود. برعکس، فرایندی که فراخوانی میشود سرور است و نقطه پایانی آن گره binder یا گره نامیده میشود.
هر گره میتواند میانای خودش را نمایش دهد و پیادهسازی کند. و بااستفاده از پراکسی، کارخواه میتواند روشها را در میانای گره اجرا کند، گویی فراخوانی یک فراخوان تابع محلی است. مثال زیر نشان میدهد که چگونه یک روش فراخوانی میشود:
int result = someNodeInterface.foo(a, b); // someNodeInterface is a proxy object
فرض کنید کلاینتی که foo() را فرا میخواند در فرایند A اجرا میشود و سروری که foo() را پیادهسازی میکند در فرایند B اجرا میشود. شکل ۱ نشان میدهد که این تماس چگونه اجرا میشود:
شکل ۱. اجرای تماس دستگاه صحافی.
برای اجرای روشی در فرایند دیگر، همانطور که در شکل ۱ نشان داده شده است، اتفاقات زیر رخ میدهد:
- کد کارخواه در فرایند «الف» کد پراکسی را در فرایند «الف» فراخوانی میکند. کد پراکسی در فرایند A تراکنشی ایجاد میکند که حاوی موارد زیر است:
- شناسه گره
- شناسهای برای روش
foo()در گره - میانگیری حاوی نسخهای از آرگومانهای
aوb
- تراکنش به درایور هسته binder ارسال میشود.
- درایور هسته چسباننده تعیین میکند که فرایند B میزبان گره است.
- هسته کل تراکنش را در فضای نشانی فرایند B کپی میکند.
- هسته یک رشته در فرایند B را برای مدیریت تراکنش پیدا میکند و تراکنش را به آن منتقل میکند.
- رشته تراکنش را ازهم باز میکند، گره را پیدا میکند، و تراکنش را به شیء گره ارسال میکند.
- شیء گره شناسه تابع را از تراکنش دریافت میکند،
aوbرا از بافر تراکنش ازهم باز میکند، وaوbرا در متغیرهای محلی ذخیره میکند. - شیء گره
foo(a, b)را در کد سرور در فرایند «ب» فراخوانی میکند. - نتیجه تماس در تراکنش پاسخ برگردانده میشود، که به گرداننده هسته و سپس به پراکسی تماس در فرایند A برگردانده میشود.
- پراکسی آن نتیجه را به فراخواننده در فرایند A برمیگرداند.
موارد استفاده از Binder
از Binder میتوان در سناریوهای مختلفی که در آنها باید بین نرمافزار در فرایندهای مختلف ارتباط برقرار شود استفاده کرد. برای مثال:
برنامه دوربین از binder برای ارتباط با سرور دوربین در فرایندی دیگر استفاده میکند. سپس سرور دوربین از binder برای ارتباط با دوربین HAL در فرایندی دیگر استفاده میکند.
برنامه از چسباننده برای برقراری ارتباط با سرور سیستم در فرایندی دیگر استفاده میکند. کارساز سیستم از binder برای صحبت با HAL در فرایندهای دیگر استفاده میکند.
برنامهای در یک فرایند از binder برای برقراری ارتباط با برنامه دیگری در فرایند دیگر استفاده میکند.
کارگزار سیستم مسئول نصب، بهروزرسانی، و برداشتن برنامهها (
installd) از binder برای ارتباط با کارگزار زمان اجرای Android ('artd') برای ترجمه برنامهها استفاده میکند.
AIDL و binder
از «زبان طراحی میانای Android» (AIDL) برای تعریف میاناهای برنامهنویسی که از binder برای IPC استفاده میکنند استفاده کنید. برای اطلاعات بیشتر، به نمای کلی AIDL مراجعه کنید.