অ্যান্ড্রয়েড ১১ এবং উচ্চতর সংস্করণে, সিস্টেম পার্টিশনে চলমান নেটিভ AIDL পরিষেবাগুলি প্রয়োজন অনুসারে গতিশীলভাবে শুরু এবং বন্ধ করা যেতে পারে। গতিশীল পরিষেবাগুলি প্রথম অনুরোধ করা হলে শুরু হয় এবং যখন সেগুলি আর ব্যবহার করা হয় না তখন স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়।
গতিশীলভাবে চলতে পারে এমন পরিষেবা
এই বৈশিষ্ট্যটি শুধুমাত্র সেইসব নেটিভ পরিষেবার জন্য উপলব্ধ যাদের জীবনচক্র init এবং servicemanager দ্বারা নিয়ন্ত্রিত হতে পারে। অ্যাপ প্যাকেজের মধ্যে পরিষেবাগুলি সমর্থিত নয় এবং পরিবর্তে বাউন্ড পরিষেবা ব্যবহার করা উচিত।
ডাইনামিক শাটডাউন পরিষেবাটি যে প্রক্রিয়ায় চলছে সেই প্রক্রিয়াটি বন্ধ করে কাজ করে। যদি একই প্রক্রিয়ায় একাধিক পরিষেবা বিদ্যমান থাকে, তবে এই বৈশিষ্ট্যের সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য তাদের সকলকে ডায়নামিক হিসাবে নিবন্ধিত করতে হবে। সমস্ত পরিষেবা অব্যবহৃত হলে সেই প্রক্রিয়াটি বন্ধ হয়ে যাবে।
একটি পরিষেবার init .rc ফাইল কনফিগার করুন
একটি পরিষেবা গতিশীলভাবে চালানোর জন্য, পরিষেবার init .rc ফাইলে service <name> <cmd> লাইনের পরে নিম্নলিখিত বিকল্পগুলি যোগ করুন।
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