ডেটা লোড করা, কন্টেন্ট সিঙ্ক্রোনাইজেশন, অ্যানালিটিক্স পাঠানো — অনেক কাজের জন্য ব্যবহারকারীর সক্রিয় অংশগ্রহণের প্রয়োজন হয় না। তবে মোবাইল ডিভাইসগুলি ব্যাটারি বাঁচাতে এবং পারফরম্যান্স বজায় রাখতে ব্যাকগ্রাউন্ড কাজ সীমিত করে। ব্যাকগ্রাউন্ড টাস্ক (background tasks) হল এমন মেকানিজম যা অ্যাপকে কোড এক্সিকিউট করতে দেয় যখন ব্যবহারকারী এটি দেখছেন না। এই নিবন্ধে আমরা WorkManager, BGTaskScheduler, Foreground Service এবং Doze Mode-এর বৈশিষ্ট্য নিয়ে আলোচনা করব। আরও বিস্তারিত জানতে অফিসিয়াল WorkManager ডকুমেন্টেশন দেখুন।
মূল বিষয়
ব্যাকগ্রাউন্ড টাস্ক হল যেকোনো কোড যা অ্যাপ ফোরগ্রাউন্ডে (সক্রিয় স্ক্রিন) না থাকলে চলে। এর মধ্যে অন্তর্ভুক্ত থাকতে পারে: সার্ভারের সাথে পর্যায়ক্রমিক ডেটা সিঙ্ক্রোনাইজেশন, বড় ফাইল ডাউনলোড, push নোটিফিকেশন প্রক্রিয়াকরণ, জিওলোকেশন ট্র্যাকিং, উইজেট আপডেট করা। প্রতিটি প্ল্যাটফর্মের ব্যাকগ্রাউন্ড কাজের নিজস্ব সীমাবদ্ধতা রয়েছে: iOS আরও কঠোর (10–30 মিনিট ব্যাকগ্রাউন্ড সময়), Android বেশি উদার কিন্তু সংস্করণ 9 থেকে নিয়ম কঠোর করেছে।
ব্যাকগ্রাউন্ড টাস্কের আর্কিটেকচার তিনটি স্তরে নির্মিত: (1) তাৎক্ষণিক কাজ — এখনই এক্সিকিউট হয় (Foreground Service); (2) বিলম্বিত কাজ — উপযুক্ত অবস্থায় এক্সিকিউট হয় (WorkManager, BGTaskScheduler); (3) পর্যায়ক্রমিক কাজ — নির্ধারিত ব্যবধানে পুনরাবৃত্তি হয়। সঠিক স্তর নির্বাচন নির্ধারণ করে যে কাজটি সময়মতো সম্পন্ন হবে কিনা এবং এটি অ্যাপ স্টোর প্রত্যাখ্যানের দিকে নিয়ে যাবে কিনা।
উভয় প্ল্যাটফর্মেই, Google/Apple ব্যাকগ্রাউন্ডে সরাসরি থ্রেড পরিচালনা করার পরিবর্তে ডিক্লেয়ারেটিভ API ব্যবহার করার জোরালো পরামর্শ দেয়। Android-এ WorkManager এবং iOS-এ BGTaskScheduler সিস্টেমকে অ্যাপগুলির মধ্যে ব্যাকগ্রাউন্ড কাজ অনুকূলভাবে বিতরণ করতে দেয়, শক্তি বাঁচাতে কাজগুলিকে গ্রুপ করে। IT Sectr-এ, আমরা সর্বদা আপডেটের ফ্রিকোয়েন্সি এবং জরুরিতার প্রয়োজনীয়তা বিশ্লেষণ করে ব্যাকগ্রাউন্ড আর্কিটেকচার ডিজাইন শুরু করি।
iOS ব্যাকগ্রাউন্ড কাজের জন্য বেশ কয়েকটি মেকানিজম সরবরাহ করে। Background Fetch — সিস্টেম দ্বারা নির্ধারিত ব্যবধানে পর্যায়ক্রমিক কন্টেন্ট আপডেট (ডেভেলপার দ্বারা নয়)। অ্যাপ নতুন ডেটা ডাউনলোড করার জন্য ~30 সেকেন্ডের একটি উইন্ডো পায়। Background Fetch Capabilities → Background Modes → Background Fetch-এর মাধ্যমে সক্রিয় করা হয় এবং AppDelegate-এ প্রয়োগ করা হয়: application(_:performFetchWithCompletionHandler:).
BGTaskScheduler হল iOS 13+-এর জন্য আধুনিক API, যা Background Fetch-কে প্রতিস্থাপন করে। ডেভেলপার একটি আইডেন্টিফায়ার দিয়ে কাজ রেজিস্টার করে, এবং সিস্টেম উপযুক্ত অবস্থায় এটি চালায়। BGAppRefreshTask — ছোট কন্টেন্ট আপডেটের জন্য; BGProcessingTask — দীর্ঘ কাজের জন্য (ক্যাশে পরিষ্কার, ডেটাবেস সিঙ্ক্রোনাইজেশন)। কাজগুলি অ্যাপ লঞ্চে রেজিস্টার করা হয়, এবং সিস্টেম ব্যাটারির অবস্থা, নেটওয়ার্ক এবং ব্যবহারকারীর কার্যকলাপ বিবেচনা করে তাদের এক্সিকিউশন শিডিউল করে।
Background Modes — নির্দিষ্ট পরিস্থিতির জন্য ব্যাকগ্রাউন্ড কাজের অনুমতি দেয় এমন মোডের তালিকা: Audio (ব্যাকগ্রাউন্ড প্লেব্যাক), Location (GPS ট্র্যাকিং), VoIP (PushKit-এর মাধ্যমে কল), BLE (ব্লুটুথ ডিভাইস সংযোগ), Processing (BGTaskScheduler-এর মাধ্যমে দীর্ঘ কাজ)। প্রতিটি মোডের App Store পর্যালোচনায় ন্যায্যতা প্রয়োজন। বাস্তব প্রয়োজন ছাড়া মোড ব্যবহার করা অ্যাপ প্রত্যাখ্যানের একটি সাধারণ কারণ।
Significant Location Change — সেই অ্যাপগুলির জন্য মেকানিজম যেগুলির ধ্রুবক জিওলোকেশনের প্রয়োজন নেই তবে উল্লেখযোগ্য ব্যবহারকারী চলাচল (500 মিটারের বেশি) সম্পর্কে জানা গুরুত্বপূর্ণ। সেলুলার টাওয়ার পরিবর্তন হলে সিস্টেম অ্যাপকে জাগিয়ে তোলে। এই মেকানিজম ধ্রুবক GPS ট্র্যাকিংয়ের তুলনায় উল্লেখযোগ্যভাবে ব্যাটারি বাঁচায়।
Android ব্যাকগ্রাউন্ড কাজের জন্য API-র সবচেয়ে সমৃদ্ধ সেট অফার করে, তবে সংস্করণ 8.0 (API 26) থেকে নিয়ম কঠোর হয়েছে। WorkManager是所有 ধরণের ব্যাকগ্রাউন্ড কাজের জন্য Google-এর প্রস্তাবিত সমাধান। WorkManager ডিভাইস রিবুটের পরেও কাজ এক্সিকিউশনের গ্যারান্টি দেয় (BootReceiver-এর মাধ্যমে) এবং কাজের চেইন, পর্যবেক্ষণযোগ্য LiveData/Flow এবং API 14 পর্যন্ত ব্যাকওয়ার্ড সামঞ্জস্যতা সমর্থন করে।
WorkManager Worker ব্যবহার করে — doWork() পদ্ধতি সহ একটি বেস ক্লাস। Constraints এক্সিকিউশন শর্ত নির্ধারণ করে: NetworkType.CONNECTED, BatteryNotLow, StorageNotLow। PeriodicWorkRequest — ন্যূনতম 15 মিনিটের ব্যবধানে পর্যায়ক্রমিক কাজের জন্য। WorkManager স্বয়ংক্রিয়ভাবে Doze Mode এবং App Standby-এর সাথে খাপ খাইয়ে নেয়, কাজগুলিকে রক্ষণাবেক্ষণ উইন্ডোতে গ্রুপ করে। একটি সাধারণ Worker-এর উদাহরণ:
class SyncWorker(
context: Context,
params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
return try {
val repository =
Injection.provideRepository(applicationContext)
repository.syncData()
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
// Запланировать задачу
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(constraints)
.build()
WorkManager.getInstance(context)
.enqueue(syncRequest)
JobScheduler — একটি পুরানো API (Android 5+, API 21)। এটি নির্দিষ্ট শর্ত (নেটওয়ার্ক, চার্জিং, নিষ্ক্রিয়তা) সহ কাজ শিডিউল করে। সীমাবদ্ধতা: এটি ডিভাইস রিবুট সমর্থন করে না (BootReceiver প্রয়োজন) এবং এর কোনো পর্যবেক্ষণযোগ্য অবস্থা নেই। JobScheduler লিগ্যাসি প্রজেক্টে সাধারণ কাজের জন্য উপযুক্ত; নতুন প্রজেক্টের জন্য WorkManager ব্যবহার করুন।
Foreground Service — একটি পরিষেবা যা ব্যবহারকারী একটি স্থায়ী নোটিফিকেশন (ongoing notification) এর মাধ্যমে দেখেন। এটি ব্যবহার করা হয়: সঙ্গীত প্লেব্যাক, GPS ট্র্যাকিং, বড় ফাইল ডাউনলোডের জন্য। Foreground Service-এর উচ্চ অগ্রাধিকার রয়েছে — মেমরি কম হলে সিস্টেম এটি বন্ধ করবে না। Android 13 থেকে শুরু করে, কিছু প্রকারের জন্য FOREGROUND_SERVICE_SPECIAL_USE অনুমতি প্রয়োজন। একটি বিকল্প হল ForegroundServiceOption সহ WorkManager (দীর্ঘ কাজ)।
AlarmManager — সেই কাজের জন্য যা নির্দিষ্ট সময়ে চালাতে হবে (অ্যালার্ম, রিমাইন্ডার)। AlarmManager ডিভাইসকে Doze Mode থেকে জাগাতে পারে (setAlarmClock)। উচ্চ শক্তি খরচের কারণে নিয়মিত সিঙ্ক্রোনাইজেশনের জন্য সুপারিশ করা হয় না। পর্যায়ক্রমিক কাজের জন্য WorkManager ব্যবহার করুন, এবং AlarmManager কেবল তখনই যখন নির্দিষ্ট সময় গুরুত্বপূর্ণ।
| পরিস্থিতি | iOS | Android |
|---|---|---|
| পর্যায়ক্রমিক কন্টেন্ট আপডেট | BGAppRefreshTask (BGTaskScheduler) | WorkManager (PeriodicWorkRequest) |
| দীর্ঘ ব্যাকগ্রাউন্ড কাজ | BGProcessingTask | WorkManager + ForegroundService |
| অডিও প্লেব্যাক | Background Audio Mode | Foreground Service |
| GPS ট্র্যাকিং | Significant Location Change / Background Location | Foreground Service + FusedLocationProvider |
| VoIP / কল | PushKit + CallKit | ConnectionService + Foreground Service |
| নির্দিষ্ট সময় (অ্যালার্ম) | UNNotificationRequest (calendar) | AlarmManager |
| Push প্রক্রিয়াকরণ (ব্যাকগ্রাউন্ড) | Notification Service Extension | FirebaseMessagingService (onMessageReceived) |
Doze Mode হল Android-এ একটি পাওয়ার-সেভিং মোড যা ব্যাকগ্রাউন্ড কাজের এক্সিকিউশনকে প্রভাবিত করে। Android 6.0 (API 23)-এ চালু করা হয়েছে। যখন ডিভাইস চার্জ হচ্ছে না, স্ক্রিন বন্ধ এবং ডিভাইস স্থির, Doze Mode নেটওয়ার্ক অনুরোধ ব্লক করে, JobScheduler এবং WakeLock স্থগিত করে। পর্যায়ক্রমে, Doze রক্ষণাবেক্ষণ উইন্ডো খোলে — ছোট ব্যবধান যখন অ্যাপগুলি বিলম্বিত কাজ এক্সিকিউট করতে পারে। Android 7.0 (API 24) থেকে, Doze স্ক্রিন বন্ধ হলে সক্রিয় হয়, কেবল সম্পূর্ণ স্থির অবস্থায় নয়।
App Standby — একটি মোড যেখানে অব্যবহৃত অ্যাপগুলিকে স্ট্যান্ডবাইয়ে রাখা হয়। যদি কোনো অ্যাপের সক্রিয় নোটিফিকেশন না থাকে এবং কয়েকদিন ধরে খোলা না হয়, তবে এটি Standby Bucket-এ রাখা হয়: সক্রিয় (active), working, frequent, rare। অ্যাপ যত কম ব্যবহার করা হয়, বিধিনিষেধ তত কঠোর হয়: নেটওয়ার্ক অনুরোধ স্থগিত করা হয়, সিঙ্ক্রোনাইজেশন ব্লক করা হয়, JobScheduler চলে না।
WakeLock — একটি মেকানিজম যা ডিভাইসকে জাগিয়ে রাখে (ঘুমাতে বাধা দেয়)। গুরুত্বপূর্ণ অপারেশন সম্পূর্ণ করতে ব্যবহৃত হয়। কাজ শেষ হওয়ার পর WakeLock অবশ্যই ছেড়ে দিতে হবে (release), অন্যথায় ব্যাটারি কয়েক ঘণ্টায় শেষ হয়ে যাবে। WakeLock Doze Mode-এ কাজ করে না — সিস্টেম এটি উপেক্ষা করে। Android 8+-এ WakeLock-এর সাথে কাজ করার জন্য WAKE_LOCK অনুমতি এবং সঠিক লাইফসাইকেল ম্যানেজমেন্ট প্রয়োজন।
IT Sectr-এ, আমরা ডিজাইন পর্যায়ে Doze Mode এবং App Standby বিবেচনা করি। WorkManager স্বয়ংক্রিয়ভাবে এই মোডগুলি পরিচালনা করে, তবে Foreground Service-এর জন্য Doze-এ রূপান্তরের সঠিক হ্যান্ডলিং পরিকল্পনা করতে হবে। বাস্তব ডিভাইসে পাওয়ার-সেভিং মোড সক্ষম করে এবং দীর্ঘ নিষ্ক্রিয়তার পরে ব্যাকগ্রাউন্ড কাজ পরীক্ষা করার পরামর্শ দেওয়া হয়।
ব্যাকগ্রাউন্ড কাজ ডিজাইন করার সময়, এই টিপসগুলি অনুসরণ করুন। 1. নতুন Android প্রজেক্টের জন্য সর্বদা WorkManager ব্যবহার করুন। এটি সামঞ্জস্যতা সমস্যা, Doze Mode এবং ডিভাইস রিবুট সমাধান করে। 2. iOS-এ, iOS 13+-এর জন্য Background Fetch-এর পরিবর্তে BGTaskScheduler পছন্দ করুন। 3. Foreground Service শুধুমাত্র তখনই ব্যবহার করুন যখন কাজটির সত্যিই একটি দৃশ্যমান নোটিফিকেশন প্রয়োজন। 4. WakeLock-এর অপব্যবহার করবেন না — এটি ব্যাটারি শেষ করে এবং অ্যাপ প্রত্যাখ্যানের কারণ হতে পারে। 5. Doze Mode-এ ব্যাকগ্রাউন্ড কাজ পরীক্ষা করুন: adb shell dumpsys deviceidle force-idle। 6. লগিং এবং অ্যানালিটিক্সের মাধ্যমে সর্বদা কাজ সমাপ্তি যাচাই করুন। 7. সীমাগুলি মনে রাখবেন: iOS ~30 সেকেন্ড Background Fetch এবং ~কয়েক মিনিট BGProcessingTask-এর জন্য দেয়। Android WorkManager নির্দিষ্ট এক্সিকিউশন সময়ের গ্যারান্টি দেয় না।
সচরাচর জিজ্ঞাসিত প্রশ্ন
Background Service দৃশ্যমান নোটিফিকেশন ছাড়া চলে এবং সিস্টেম যেকোনো সময় এটি বন্ধ করতে পারে। Foreground Service-কে একটি স্থায়ী নোটিফিকেশন (ongoing notification) দেখাতে হয় এবং এর উচ্চ অগ্রাধিকার থাকে। Foreground Service সঙ্গীত প্লেব্যাক এবং GPS ট্র্যাকিংয়ের জন্য ব্যবহৃত হয়।
Doze Mode হল Android-এর একটি পাওয়ার-সেভিং মোড যা ডিভাইস ব্যবহার না হলে নেটওয়ার্ক অ্যাক্সেস নিষ্ক্রিয় করে এবং JobScheduler/WakeLock স্থগিত করে। WorkManager Doze Mode-এর সাথে স্বয়ংক্রিয়ভাবে খাপ খাইয়ে নেয়।
iOS-এ, ব্যাকগ্রাউন্ড টাস্ক Background Fetch (পর্যায়ক্রমিক আপডেট), BGTaskScheduler (বিলম্বিত কাজ) বা Background Modes (অডিও, VoIP, BLE, অবস্থান) এর মাধ্যমে চালানো হয়। BGTaskScheduler হল iOS 13+-এর জন্য আধুনিক API, যা Background Fetch-কে প্রতিস্থাপন করে।
WorkManager হল Android-এ সমস্ত ব্যাকগ্রাউন্ড কাজের জন্য Google-এর প্রস্তাবিত সমাধান। JobScheduler সীমিত ক্ষমতা সহ একটি পুরানো API। WorkManager কাজের চেইন, পর্যবেক্ষণযোগ্য LiveData/Flow এবং API 14 পর্যন্ত ব্যাকওয়ার্ড সামঞ্জস্যতা সমর্থন করে।
App Standby হল Android-এর একটি মোড যেখানে অব্যবহৃত অ্যাপগুলিকে স্ট্যান্ডবাই অবস্থায় রাখা হয়: নেটওয়ার্ক অনুরোধ স্থগিত করা হয়, সিঙ্ক্রোনাইজেশন বিরতি দেওয়া হয়। যদি কোনো অ্যাপ কয়েকদিন ধরে ব্যবহার না করা হয়, Android এটি একটি Standby Bucket-এ রাখে (active, working, frequent, rare)।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।