বাইন্ডার হলো আন্তঃপ্রক্রিয়া যোগাযোগের একটি সিস্টেম, যা একটি অ্যান্ড্রয়েড-চালিত ডিভাইসের দুটি প্রক্রিয়াকে একে অপরের সাথে যোগাযোগ করতে দেয়। বাইন্ডার অন্য একটি প্রক্রিয়ায় ফাংশন কল সম্পাদনের একটি উপায় প্রদান করে, যা কলকারীর কাছে সম্পূর্ণ স্বচ্ছ থাকে।
বাইন্ডারের পরিভাষায়, যে প্রসেসটি কল করে তাকে ক্লায়েন্ট এবং তার এন্ডপয়েন্টকে বাইন্ডার প্রক্সি বা প্রক্সি বলা হয়। অপরপক্ষে, যে প্রসেসটিকে কল করা হয় সেটি হলো সার্ভার এবং তার এন্ডপয়েন্টকে বাইন্ডার নোড বা নোড বলা হয়।
প্রতিটি নোড তার নিজস্ব ইন্টারফেস প্রকাশ ও প্রয়োগ করতে পারে। এবং, একটি প্রক্সি ব্যবহার করে, ক্লায়েন্ট একটি নোড ইন্টারফেসের মেথডগুলোকে এমনভাবে কার্যকর করতে পারে যেন আহ্বানটি একটি স্থানীয় ফাংশন কল। নিম্নলিখিত উদাহরণটি একটি মেথড আহ্বান করা দেখাচ্ছে:
int result = someNodeInterface.foo(a, b); // someNodeInterface is a proxy object
ধরে নিন যে, foo() কলকারী ক্লায়েন্টটি A প্রসেসে এবং foo() বাস্তবায়নকারী সার্ভারটি B প্রসেসে চলছে। চিত্র ১-এ দেখানো হয়েছে এই কলটি কীভাবে সম্পাদিত হয়:

চিত্র ১. বাইন্ডার কল সম্পাদন।
চিত্র ১-এ দেখানো অনুযায়ী, অন্য কোনো প্রসেসে একটি মেথড এক্সিকিউট করতে গেলে নিম্নলিখিত ঘটনাটি ঘটে:
- প্রসেস A-তে থাকা ক্লায়েন্ট কোড, প্রসেস A-তে থাকা প্রক্সি কোডকে আহ্বান করে। প্রসেস A-তে থাকা প্রক্সি কোড নিম্নলিখিত আইটেমগুলো সম্বলিত একটি ট্রানজ্যাকশন তৈরি করে:
- নোডের জন্য একটি শনাক্তকারী
- নোডের
foo()মেথডের জন্য একটি শনাক্তকারী - একটি বাফার যাতে
aএবংbআর্গুমেন্টগুলোর একটি অনুলিপি রয়েছে।
- লেনদেনটি বাইন্ডার কার্নেল ড্রাইভারের কাছে জমা দেওয়া হয়।
- বাইন্ডার কার্নেল ড্রাইভার নির্ধারণ করে যে প্রসেস B নোডটিকে হোস্ট করছে।
- কার্নেল সম্পূর্ণ ট্রানজ্যাকশনটি প্রসেস B-এর অ্যাড্রেস স্পেসে কপি করে।
- কার্নেল ট্রানজ্যাকশনটি পরিচালনা করার জন্য প্রসেস B-তে একটি থ্রেড খুঁজে বের করে এবং ট্রানজ্যাকশনটি সেটির কাছে পাঠিয়ে দেয়।
- থ্রেডটি ট্রানজ্যাকশনটি আনপ্যাক করে, নোডটি খুঁজে বের করে এবং ট্রানজ্যাকশনটি নোড অবজেক্টে পাঠিয়ে দেয়।
- নোড অবজেক্টটি ট্রানজ্যাকশন থেকে ফাংশন আইডেন্টিফায়ার সংগ্রহ করে, ট্রানজ্যাকশন বাফার থেকে
aএবংbআনপ্যাক করে, এবংaওbলোকাল ভেরিয়েবলে সংরক্ষণ করে। - নোড অবজেক্টটি প্রসেস B-তে সার্ভার কোডে
foo(a, b)কল করে। - কলটির ফলাফল একটি রিপ্লাই ট্রানজ্যাকশনে ফেরত পাঠানো হয়, যা কার্নেল ড্রাইভারের কাছে এবং তারপর প্রসেস A-তে থাকা কলিং প্রক্সির কাছে পুনরায় পাঠানো হয়।
- প্রক্সিটি প্রসেস A-তে থাকা কলারের কাছে সেই ফলাফলটি ফেরত পাঠায়।
বাইন্ডার ব্যবহারের ক্ষেত্র
বিভিন্ন পরিস্থিতিতে বাইন্ডার ব্যবহার করা যেতে পারে, যেখানে ভিন্ন ভিন্ন প্রসেসের সফটওয়্যারের মধ্যে যোগাযোগ স্থাপন করা আবশ্যক। উদাহরণস্বরূপ:
একটি ক্যামেরা অ্যাপ অন্য একটি প্রসেসে থাকা ক্যামেরা সার্ভারের সাথে যোগাযোগের জন্য বাইন্ডার ব্যবহার করে। এরপর ক্যামেরা সার্ভারটি অন্য একটি প্রসেসে থাকা ক্যামেরা HAL-এর সাথে যোগাযোগের জন্য বাইন্ডার ব্যবহার করে।
একটি অ্যাপ অন্য একটি প্রসেসে থাকা সিস্টেম সার্ভারের সাথে যোগাযোগের জন্য বাইন্ডার ব্যবহার করে। সিস্টেম সার্ভারটি অন্য প্রসেসগুলোতে থাকা HAL-গুলোর সাথে যোগাযোগের জন্য বাইন্ডার ব্যবহার করে।
একটি প্রসেসের একটি অ্যাপ অন্য একটি প্রসেসের ভিন্ন একটি অ্যাপের সাথে যোগাযোগের জন্য বাইন্ডার ব্যবহার করে।
অ্যাপ ইনস্টল, আপডেট এবং অপসারণের জন্য দায়ী সিস্টেম ডেমন (
installd) অ্যাপ কম্পাইল করার জন্য অ্যান্ড্রয়েড রানটাইম ডেমন ('artd')-এর সাথে যোগাযোগ করতে বাইন্ডার ব্যবহার করে।
AIDL এবং বাইন্ডার
আইপিসি-র জন্য বাইন্ডার ব্যবহার করে এমন প্রোগ্রামিং ইন্টারফেস সংজ্ঞায়িত করতে অ্যান্ড্রয়েড ইন্টারফেস ডিজাইন ল্যাঙ্গুয়েজ (এআইডিএল) ব্যবহার করুন। আরও তথ্যের জন্য, এআইডিএল ওভারভিউ দেখুন।