ফোরগ্রাউন্ড সার্ভিস টাইম-আউট

কোনও অ্যাপ Android 15 বা তার পরবর্তী যেকোনও ভার্সনকে টার্গেট করলে, আপনার অ্যাপ ব্যাকগ্রাউন্ডে থাকাকালীন নির্দিষ্ট কিছু ফোরগ্রাউন্ড পরিষেবা কতক্ষণ রান করতে পারবে সেই বিষয়ে সিস্টেম বিধিনিষেধ আরোপ করে। বর্তমানে, এই বিধিনিষেধ শুধুমাত্র dataSync এবং mediaProcessing ফোরগ্রাউন্ড পরিষেবার ধরন ফোরগ্রাউন্ড পরিষেবার ক্ষেত্রে প্রযোজ্য। shortService ফোরগ্রাউন্ড সার্ভিসের ধরন-এর উপর আরও বিধিনিষেধ আরোপ করা হয়েছে যা সেই সার্ভিসের ধরনের ডকুমেন্টেশনে আলোচনা করা হয়েছে।

টাইমআউট সংক্রান্ত আচরণ

সিস্টেম ২৪ ঘণ্টার মধ্যে মোট ৬ ঘণ্টার জন্য dataSync এবং mediaProcessing ফোরগ্রাউন্ড সার্ভিস চালানোর অনুমতি দেয়, যার পরে সিস্টেম চালু থাকা সার্ভিসের Service.onTimeout(int, int) মেথড কল করে (Android ১৫-এ চালু করা হয়েছে)। (mediaProcessing ফোরগ্রাউন্ড পরিষেবার ধরন Android 15-এ যোগ করা হয়েছে।) ছয় ঘণ্টার সময়সীমা dataSync এবং mediaProcessing পরিষেবার জন্য আলাদাভাবে ট্র্যাক করা হয়। যেমন, dataSync পরিষেবা যদি মাত্র এক ঘণ্টা চলে, তাহলে অ্যাপের কাছে dataSync ফোরগ্রাউন্ড পরিষেবার জন্য মাত্র পাঁচ ঘণ্টা উপলভ্য থাকবে, কিন্তু mediaProcessing পরিষেবার জন্য পুরো ছয় ঘণ্টা উপলভ্য থাকবে।

কোনও ফোরগ্রাউন্ড সার্ভিস ছয় ঘণ্টার সীমায় পৌঁছে গেলে, Service.stopSelf()-এ কল করার জন্য সার্ভিসের কাছে কয়েক সেকেন্ড সময় থাকে। সিস্টেম Service.onTimeout() কল করলে, পরিষেবাটিকে আর ফোরগ্রাউন্ড পরিষেবা হিসেবে বিবেচনা করা হয় না। পরিষেবাটি Service.stopSelf() কল না করলে, সিস্টেম একটি ইন্টার্নাল ব্যতিক্রম দেখায়। ব্যতিক্রমটি নিম্নলিখিত মেসেজ সহ Logcat-এ লগ করা হয়:

Fatal Exception: android.app.RemoteServiceException: "A foreground service of
type [service type] did not stop within its timeout: [component name]"

এই আচরণ পরিবর্তনের ফলে হওয়া সমস্যা এড়াতে, আপনি নিম্নলিখিতগুলির মধ্যে এক বা একাধিক কাজ করতে পারেন:

  1. আপনার পরিষেবায় নতুন Service.onTimeout(int, int) পদ্ধতি প্রয়োগ করুন। আপনার অ্যাপ কলব্যাক পেলে, কয়েক সেকেন্ডের মধ্যে stopSelf()-এ কল করতে ভুলবেন না। (আপনি যদি এখনই অ্যাপটি বন্ধ না করেন, তাহলে সিস্টেম একটি ব্যর্থতা তৈরি করে।)
  2. আপনার অ্যাপের dataSync এবং mediaProcessing পরিষেবা যাতে কোনও ২৪ ঘণ্টার সময়সীমার মধ্যে মোট ৬ ঘণ্টার বেশি না চলে তা নিশ্চিত করুন (ব্যবহারকারী অ্যাপের সাথে ইন্টার‍্যাক্ট করলে, টাইমার রিসেট হয়ে যায়)।
  3. ব্যবহারকারীর সরাসরি ইন্টার‍্যাকশনের ফলে শুধুমাত্র dataSync বা mediaProcessing ফোরগ্রাউন্ড পরিষেবা চালু করুন; পরিষেবা চালু হওয়ার সময় আপনার অ্যাপ ফোরগ্রাউন্ডে থাকে বলে, অ্যাপ ব্যাকগ্রাউন্ডে যাওয়ার পরে আপনার পরিষেবা পুরো ছয় ঘণ্টা সময় পায়।
  4. এইসব ফোরগ্রাউন্ড সার্ভিস ব্যবহার করার পরিবর্তে, WorkManager-এর মতো বিকল্প API ব্যবহার করুন। বিশেষ করে, dataSync ফোরগ্রাউন্ড সার্ভিস ব্যবহার করার পরিবর্তে, বিকল্প API ব্যবহার করার কথা বিবেচনা করুন।

আপনার অ্যাপের dataSync ফোরগ্রাউন্ড সার্ভিস গত ২৪ ঘণ্টার মধ্যে ৬ ঘণ্টা ধরে চললে, আপনি অন্য কোনও dataSync ফোরগ্রাউন্ড সার্ভিস শুরু করতে পারবেন না, যদি না ব্যবহারকারী আপনার অ্যাপ ফোরগ্রাউন্ডে নিয়ে আসেন (যা টাইমার রিসেট করে)। আপনি যদি অন্য কোনও dataSync ফোরগ্রাউন্ড সার্ভিস শুরু করার চেষ্টা করেন, তাহলে সিস্টেম ForegroundServiceStartNotAllowedException থ্রো করে এবং "dataSync ধরনের ফোরগ্রাউন্ড সার্ভিসের জন্য সময়সীমা আগেই শেষ হয়ে গেছে" এর মতো একটি সমস্যার মেসেজ দেখায়।

পরীক্ষা করা

আপনার অ্যাপের আচরণ পরীক্ষা করতে, আপনার অ্যাপ Android 15-কে টার্গেট না করলেও (যতক্ষণ অ্যাপটি Android 15 ডিভাইসে চলছে) আপনি ডেটা সিঙ্ক টাইমআউট চালু করতে পারেন। টাইম-আউট চালু করতে, নিম্নলিখিত adb কমান্ড রান করুন:

adb shell am compat enable FGS_INTRODUCE_TIME_LIMITS your-package-name

এছাড়াও, আপনি টাইম-আউট পিরিয়ড অ্যাডজাস্ট করতে পারবেন, যাতে সীমা শেষ হয়ে গেলে আপনার অ্যাপ কেমন আচরণ করে তা সহজেই পরীক্ষা করতে পারেন। dataSync ফোরগ্রাউন্ড সার্ভিসের জন্য নতুন টাইমআউট পিরিয়ড সেট করতে, এই adb কমান্ড রান করুন:

adb shell device_config put activity_manager data_sync_fgs_timeout_duration duration-in-milliseconds

mediaProcessing ফোরগ্রাউন্ড সার্ভিসের জন্য নতুন টাইমআউট পিরিয়ড সেট করতে, এই কমান্ড রান করুন:

adb shell device_config put activity_manager media_processing_fgs_timeout_duration duration-in-milliseconds