AIDL পরিষেবাগুলি গতিশীলভাবে চালানো

অ্যান্ড্রয়েড 11 থেকে শুরু করে, সিস্টেম পার্টিশনে চলমান নেটিভ AIDL পরিষেবাগুলি প্রয়োজন অনুসারে গতিশীলভাবে শুরু এবং বন্ধ করা যেতে পারে। ডায়নামিক পরিষেবাগুলি যখন প্রথম অনুরোধ করা হয় তখন শুরু হয় এবং যখন সেগুলি আর ব্যবহার করা হয় না তখন স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়।

যে পরিষেবাগুলি গতিশীলভাবে চলতে পারে৷

এই বৈশিষ্ট্যটি শুধুমাত্র স্থানীয় পরিষেবাগুলির জন্য উপলব্ধ যার জীবনচক্র init এবং servicemanager দ্বারা নিয়ন্ত্রিত হতে পারে৷ অ্যাপ প্যাকেজগুলির মধ্যে পরিষেবাগুলি সমর্থিত নয় এবং এর পরিবর্তে আবদ্ধ পরিষেবাগুলি ব্যবহার করা উচিত৷

ডাইনামিক শাটডাউন প্রক্রিয়াটি বন্ধ করে কাজ করে যেটিতে পরিষেবা চলে। যদি একই প্রক্রিয়ায় একাধিক পরিষেবা বিদ্যমান থাকে, তবে এই বৈশিষ্ট্যটির সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য তাদের সকলকে গতিশীল হিসাবে নিবন্ধিত হতে হবে। সমস্ত পরিষেবা অব্যবহৃত হলে সেই প্রক্রিয়াটি বন্ধ হয়ে যাবে।

একটি পরিষেবার init .rc ফাইল কনফিগার করা

গতিশীলভাবে একটি পরিষেবা চালানোর জন্য, অগ্রণী service <name> <cmd> লাইনের পরে পরিষেবার init .rc ফাইলে নিম্নলিখিত বিকল্পগুলি যোগ করুন।

interface aidl serviceName
disabled
oneshot

এই বিকল্পগুলি নিম্নলিখিতগুলি করে:

  • interface aidl serviceName : servicemanager পরিষেবা খুঁজে পেতে অনুমতি দেয়৷ যদি পরিষেবা একাধিক ইন্টারফেস ব্যবহার করে, প্রতিটি ইন্টারফেসকে তার নিজস্ব লাইনে ঘোষণা করুন। এই নামগুলি অবশ্যই servicemanager যা আশা করে এবং প্রক্রিয়ার নামের থেকে আলাদা হতে পারে।
  • disabled : পরিষেবাটিকে স্বয়ংক্রিয়ভাবে বুট থেকে শুরু হওয়া থেকে বাধা দেয়।
  • oneshot : প্রতিবার বন্ধ হয়ে গেলে পরিষেবাটিকে স্বয়ংক্রিয়ভাবে পুনরায় চালু হতে বাধা দেয়।

আরও তথ্যের জন্য, AOSP-এ Android Init Language Readme দেখুন।

উদাহরণ:

একটি পরিষেবা নিবন্ধন

প্রতিটি পরিষেবা তৈরি এবং servicemanager সাথে নিবন্ধিত হয়। নিবন্ধন প্রায়ই main.cpp নামের একটি ফাইলে ঘটে, কিন্তু বাস্তবায়ন ভিন্ন হতে পারে। নিবন্ধন সাধারণত এই মত কিছু দেখায়:

using android::defaultServiceManager;

defaultServiceManager()->addService(serviceName, service);

নিবন্ধন কখনও কখনও BinderService::publish বা BinderService::instantiate দ্বারা বিমূর্ত করা হয়, যা উপরের কোডটিকে কল করে।

একটি পরিষেবাকে গতিশীল হিসাবে নিবন্ধন করতে, নিম্নলিখিতগুলির সাথে এটির নিবন্ধন কোড প্রতিস্থাপন করুন:

#include <binder/LazyServiceRegistrar.h>

using android::binder::LazyServiceRegistrar;

auto lazyRegistrar = LazyServiceRegistrar::getInstance();
lazyRegistrar.registerService(service, serviceName);

servicemanager তাদের রেফারেন্স সংখ্যার উপর ভিত্তি করে পরিষেবাগুলি বন্ধ করতে LazyServiceRegistrar এর সাথে যোগাযোগ করে৷

উদাহরণ:

AIDL পরিষেবা ক্লায়েন্ট কনফিগার করা হচ্ছে

সেবা পাচ্ছেন

একটি অলস পরিষেবা পুনরুদ্ধার করতে, পরিষেবাটি শুরু করতে হবে এবং তারপর পুনরুদ্ধার করতে হবে৷ পরিষেবা পরিচালকে getService কল করলে পরিষেবাটি শুরু হবে, তবে সাধারণত, আপনি পরিষেবাটি উপলব্ধ হওয়ার সাথে সাথে পেতে চান এবং waitForService ভেরিয়েন্টগুলি ব্যবহার করা উচিত৷ এগুলি কীভাবে ব্যবহার করবেন তার ব্যাকএন্ড-নির্দিষ্ট ডকুমেন্টেশন দেখুন।

সেবা ছেড়ে দিচ্ছে

ডায়নামিক শাটডাউন রেফারেন্স গণনার উপর ভিত্তি করে, তাই ক্লায়েন্টদের অবশ্যই পরিষেবাটি ব্যবহার না করার সময় ধরে রাখা উচিত নয়।

উদাহরণ:

সাময়িকভাবে শাটডাউন অক্ষম করা হচ্ছে

আপনি যদি কিছু নির্দিষ্ট কাজ সম্পূর্ণ না হওয়া পর্যন্ত একটি পরিষেবা স্বাধীনভাবে চালাতে চান এবং তারপরে গতিশীল আচরণে স্যুইচ করতে চান, আপনি LazyServiceRegistrar::forcePersist ব্যবহার করতে পারেন ডায়নামিক শাটডাউন চালু এবং বন্ধ করতে। যদি এটি সার্ভারের দিক থেকে কল করা হয়, তাহলে এটিকে registerService আগে কল করা উচিত।

উদাহরণ: apexservice