যদি কোনো অ্যাপ অ্যান্ড্রয়েড 15 বা তার উচ্চতরকে টার্গেট করে, তবে আপনার অ্যাপটি ব্যাকগ্রাউন্ডে থাকাকালীন কতক্ষণ কিছু ফোরগ্রাউন্ড পরিষেবাগুলি চালানোর অনুমতি দেওয়া হয় তার উপর সিস্টেম বিধিনিষেধ রাখে। বর্তমানে, এই নিষেধাজ্ঞা শুধুমাত্র dataSync
এবং mediaProcessing
ফোরগ্রাউন্ড সার্ভিস টাইপ ফোরগ্রাউন্ড পরিষেবাগুলিতে প্রযোজ্য। shortService
ফোরগ্রাউন্ড পরিষেবার প্রকারের উপর আরও সীমাবদ্ধ সীমা রয়েছে যা সেই পরিষেবার প্রকারের ডকুমেন্টেশনে আলোচনা করা হয়েছে।
টাইমআউট আচরণ
সিস্টেম dataSync
এবং mediaProcessing
ফোরগ্রাউন্ড পরিষেবাগুলিকে 24-ঘণ্টার মধ্যে মোট 6 ঘন্টা চালানোর অনুমতি দেয়, তারপরে সিস্টেমটি চলমান পরিষেবাটির Service.onTimeout(int, int)
পদ্ধতিতে কল করে (Android 15 এ প্রবর্তিত)। ( mediaProcessing
ফোরগ্রাউন্ড পরিষেবার ধরনটি অ্যান্ড্রয়েড 15-এ যোগ করা হয়েছিল।) dataSync
এবং mediaProcessing
পরিষেবাগুলির জন্য ছয়-ঘণ্টার সময়সীমা আলাদাভাবে ট্র্যাক করা হয়। উদাহরণস্বরূপ, যদি একটি dataSync
পরিষেবা শুধুমাত্র এক ঘন্টার জন্য চলে, তবে অ্যাপটিতে mediaProcessing
ফোরগ্রাউন্ড পরিষেবাগুলির জন্য মাত্র পাঁচ ঘন্টা উপলব্ধ থাকবে, তবে dataSync
পরিষেবাগুলির জন্য এটির জন্য পুরো ছয় ঘন্টা উপলব্ধ থাকবে৷
যখন একটি ফোরগ্রাউন্ড পরিষেবা ছয়-ঘণ্টার সীমায় পৌঁছে যায়, পরিষেবাটিতে 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]"
এই আচরণ পরিবর্তনের সমস্যাগুলি এড়াতে, আপনি নিম্নলিখিতগুলির মধ্যে এক বা একাধিক করতে পারেন:
- আপনার পরিষেবাকে নতুন
Service.onTimeout(int, int)
পদ্ধতি প্রয়োগ করতে দিন। আপনার অ্যাপ কলব্যাক গ্রহণ করলে, কয়েক সেকেন্ডের মধ্যেstopSelf()
কল করতে ভুলবেন না। (যদি আপনি এখনই অ্যাপটি বন্ধ না করেন তবে সিস্টেমটি একটি ব্যর্থতা তৈরি করে।) - নিশ্চিত করুন যে আপনার অ্যাপের
dataSync
এবংmediaProcessing
পরিষেবাগুলি যে কোনও 24-ঘণ্টার সময়ে মোট 6 ঘন্টার বেশি চলবে না (যদি না ব্যবহারকারী অ্যাপটির সাথে ইন্টারঅ্যাক্ট করে, টাইমার রিসেট করে)। - শুধুমাত্র
dataSync
বাmediaProcessing
ফোরগ্রাউন্ড পরিষেবাগুলি সরাসরি ব্যবহারকারীর ইন্টারঅ্যাকশনের ফলে শুরু করুন; যেহেতু পরিষেবাটি শুরু হওয়ার সময় আপনার অ্যাপটি ফোরগ্রাউন্ডে থাকে, তাই অ্যাপটি ব্যাকগ্রাউন্ডে যাওয়ার পরে আপনার পরিষেবার পুরো ছয় ঘন্টা থাকে। - এই ফোরগ্রাউন্ড পরিষেবাগুলি ব্যবহার করার পরিবর্তে, একটি বিকল্প API ব্যবহার করুন, যেমন WorkManager. বিশেষ করে, একটি
dataSync
ফোরগ্রাউন্ড পরিষেবা ব্যবহার করার পরিবর্তে, একটি বিকল্প API ব্যবহার করার কথা বিবেচনা করুন৷
যদি আপনার অ্যাপের dataSync
ফোরগ্রাউন্ড পরিষেবাগুলি গত 24-এর মধ্যে 6 ঘন্টা ধরে চলে থাকে, তবে ব্যবহারকারী আপনার অ্যাপটিকে ফোরগ্রাউন্ডে না আনলে আপনি অন্য dataSync
ফোরগ্রাউন্ড পরিষেবা শুরু করতে পারবেন না (যা টাইমার রিসেট করে)। আপনি যদি অন্য একটি dataSync
ফোরগ্রাউন্ড পরিষেবা শুরু করার চেষ্টা করেন, তাহলে সিস্টেমটি "ফোরগ্রাউন্ড সার্ভিস টাইপ ডেটাসিঙ্কের জন্য সময়সীমা ইতিমধ্যেই শেষ" এর মতো একটি ত্রুটি বার্তা সহ ForegroundServiceStartNotAllowedException
ছুড়ে দেয়৷
টেস্টিং
আপনার অ্যাপের আচরণ পরীক্ষা করার জন্য, আপনি ডেটা সিঙ্ক টাইমআউট সক্ষম করতে পারেন এমনকি যদি আপনার অ্যাপ অ্যান্ড্রয়েড 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