نمای کلی کلاسور

Binder سیستمی برای ارتباطات بین فرآیندی است که به دو فرآیند در یک دستگاه مجهز به اندروید اجازه می دهد با هم ارتباط برقرار کنند. Binder وسیله ای برای اجرای فراخوانی تابع در فرآیند دیگری فراهم می کند که برای تماس گیرنده کاملاً شفاف است.

در اصطلاح بایندر، فرآیند فراخوانی مشتری در نظر گرفته می شود و نقطه پایانی آن را پراکسی بایندر یا پروکسی می نامند. برعکس، فرآیندی که فراخوانی می شود سرور است و نقطه پایانی آن گره یا گره بایندر نامیده می شود.

هر گره می تواند رابط کاربری خود را آشکار و پیاده سازی کند. و با استفاده از یک پروکسی، کلاینت می‌تواند روش‌هایی را بر روی یک رابط گره اجرا کند که گویی فراخوانی یک فراخوانی تابع محلی است. مثال زیر یک متد در حال فراخوانی را نشان می دهد:

int result = someNodeInterface.foo(a, b); // someNodeInterface is a proxy object

فرض کنید کلاینت فراخوانی foo() در فرآیند A و سرور پیاده سازی کننده foo() در فرآیند B اجرا می شود. شکل 1 نحوه اجرای این فراخوانی را نشان می دهد:

اجرای فراخوانی بایندر

شکل 1. اجرای فراخوانی Binder.

برای اجرای یک متد در یک فرآیند دیگر، همانطور که در شکل 1 نشان داده شده است، موارد زیر رخ می دهد:

  1. کد مشتری در فرآیند A کد پروکسی را در فرآیند A فرا می‌خواند. کد پراکسی در فرآیند A تراکنشی حاوی موارد زیر ایجاد می‌کند:
    • شناسه گره
    • یک شناسه برای متد foo() در گره
    • یک بافر حاوی یک کپی از آرگومان های a و b
  2. تراکنش به درایور هسته بایندر ارسال می شود.
  3. درایور هسته binder تعیین می کند که فرآیند B میزبان گره باشد.
  4. هسته کل تراکنش را در فضای آدرس فرآیند B کپی می کند.
  5. هسته یک رشته را در فرآیند B برای مدیریت تراکنش پیدا می کند و تراکنش را به آن ارسال می کند.
  6. Thread تراکنش را باز می کند، گره را پیدا می کند و تراکنش را به شی گره می فرستد.
  7. شی گره شناسه تابع را از تراکنش دریافت می کند، a و b از بافر تراکنش باز می کند و a و b در متغیرهای محلی ذخیره می کند.
  8. شی گره foo(a, b) روی کد سرور در فرآیند B فراخوانی می کند.
  9. نتیجه تماس در یک تراکنش پاسخ بازگردانده می شود که به درایور هسته ارسال می شود و سپس به پروکسی فراخوان در فرآیند A باز می گردد.
  10. پروکسی نتیجه را به تماس گیرنده در فرآیند A برمی گرداند.

موارد استفاده از کلاسور

Binder را می توان در سناریوهای مختلفی استفاده کرد که در آن ارتباط بین نرم افزار در فرآیندهای مختلف باید رخ دهد. به عنوان مثال:

  • یک برنامه دوربین از کلاسور برای برقراری ارتباط با سرور دوربین در فرآیند دیگری استفاده می کند. سپس سرور دوربین از Binder برای برقراری ارتباط با دوربین HAL در فرآیند دیگری استفاده می کند.

  • یک برنامه از Binder برای برقراری ارتباط با سرور سیستم در فرآیند دیگری استفاده می کند. سرور سیستم از Binder برای صحبت با HAL ها در فرآیندهای دیگر استفاده می کند.

  • یک برنامه در یک فرآیند از Binder برای برقراری ارتباط با یک برنامه دیگر در فرآیند دیگر استفاده می کند.

  • دیمون سیستم که مسئول نصب، به‌روزرسانی و حذف برنامه‌ها ( installd ) است، از بایندر برای برقراری ارتباط با شبح زمان اجرا اندروید («artd») برای کامپایل برنامه‌ها استفاده می‌کند.