Background Execution হল একটি প্রক্রিয়া যা মোবাইল অ্যাপ্লিকেশন কোডকে তখন চালানোর অনুমতি দেয় যখন অ্যাপ্লিকেশনটি ফোরগ্রাউন্ডে থাকে না। এই প্রক্রিয়া ছাড়া, সিস্টেম অ্যাপ্লিকেশনটি মিনিমাইজ করলে তা স্থগিত করে দেয়। Apple, 2026 অনুসারে, iOS ব্যাকগ্রাউন্ড সময় 30 সেকেন্ডে সীমাবদ্ধ করে, যেখানে Android WorkManager এবং Foreground Service-এর মাধ্যমে আরও নমনীয় পরিস্থিতি প্রদান করে।
মূল পয়েন্ট
Background Execution হল একটি অ্যাপ্লিকেশনের ক্ষমতা যা ব্যবহারকারী এটি মিনিমাইজ করার বা অন্য অ্যাপ্লিকেশনে স্যুইচ করার পরে কোড চালানো চালিয়ে যায়। বিশেষ প্রক্রিয়া ছাড়া, মোবাইল OS ব্যাকগ্রাউন্ডে যাওয়ার কয়েক সেকেন্ডের মধ্যে অ্যাপ্লিকেশনটিকে Suspended (স্থগিত) অবস্থায় রাখে, সক্রিয় অ্যাপ্লিকেশনের জন্য CPU এবং মেমরি মুক্ত করে।
একটি মোবাইল অ্যাপ্লিকেশন জীবনচক্রের বেশ কয়েকটি অবস্থার মধ্য দিয়ে যায়: Foreground (সক্রিয়), Background (ব্যাকগ্রাউন্ডে), Suspended (স্থগিত) এবং Terminated (সমাপ্ত)। Background হল একমাত্র অবস্থা যেখানে অ্যাপ্লিকেশন দৃশ্যমান ইন্টারফেস ছাড়াই কোড চালাতে পারে। iOS এবং Android এই অবস্থায় সময়কাল এবং উপলব্ধ অপারেশনগুলি ভিন্নভাবে সংজ্ঞায়িত করে।
ডেটা সিঙ্ক্রোনাইজেশন, কন্টেন্ট ডাউনলোডিং, Push বিজ্ঞপ্তি প্রক্রিয়াকরণ, ব্যাকগ্রাউন্ড জিওলোকেশন এবং অডিও প্লেব্যাকের জন্য ব্যাকগ্রাউন্ড এক্সিকিউশন প্রয়োজন। সিঙ্ক্রোনাইজেশন সবচেয়ে সাধারণ পরিস্থিতি: অ্যাপ্লিকেশন ব্যবহারকারীর অংশগ্রহণ ছাড়াই সার্ভারে ডেটা পাঠায় বা আপডেট ডাউনলোড করে।
ব্যাকগ্রাউন্ড এক্সিকিউশনের সীমাবদ্ধতা তিনটি কারণে: শক্তি খরচ, ডিভাইস কর্মক্ষমতা এবং ব্যবহারকারীর গোপনীয়তা। CPU এবং রেডিও মডিউল (Wi-Fi, সেলুলার ডেটা) সবচেয়ে বেশি শক্তি খরচ করে — প্রতিটি ব্যাকগ্রাউন্ড প্রক্রিয়া ব্যাটারি আয়ু কমিয়ে দেয়।
Google-এর গবেষণায় দেখা যায় যে প্রতি 5 মিনিটে ব্যাকগ্রাউন্ড কাজ চালানো অ্যাপ্লিকেশনগুলি এক দিনে ডিভাইসের ব্যাটারি আয়ু 20–30% কমিয়ে দেয়। এমনকি এক ঘন্টার ফ্রিকোয়েন্সি সহ অপ্টিমাইজ করা ব্যাকগ্রাউন্ড অপারেশনগুলিরও উল্লেখযোগ্য প্রভাব থাকে যদি এরকম দুইটির বেশি অ্যাপ্লিকেশন থাকে।
প্রতিটি ব্যাকগ্রাউন্ড অ্যাপ্লিকেশন RAM নেয়। RAM-এর অভাব হলে, সিস্টেম অ্যাপ্লিকেশনগুলিকে মেমরি থেকে সরিয়ে দেয়, যা ব্যবহারকারীর ফিরে আসার সময় পুনরায় শুরু করতে বাধ্য করে। iOS Jetsam অ্যালগরিদম ব্যবহার করে — মেমরি সীমা অতিক্রম করলে ব্যাকগ্রাউন্ড প্রক্রিয়া জোর করে শেষ করার প্রক্রিয়া। Android অনুরূপ নীতি সহ LMK (Low Memory Killer) ব্যবহার করে।
Android 10 এবং iOS 13 থেকে, সিস্টেম অ্যাপ্লিকেশনগুলিকে ব্যাকগ্রাউন্ড কাজের উদ্দেশ্য ঘোষণা করতে প্রয়োজন। Android ব্যাকগ্রাউন্ডে Broadcast Receiver চালু করার উপর বিধিনিষেধ আরোপ করেছে। iOS প্রকল্পের Capabilities-এ Background Mode নির্দিষ্ট করতে প্রয়োজন। ব্যবহারকারী সেটিংসে যেকোনো অ্যাপ্লিকেশনের জন্য ব্যাকগ্রাউন্ড এক্সিকিউশন বন্ধ করতে পারেন।
| OS | সংস্করণ | বিধিনিষেধ | প্রভাব |
|---|---|---|---|
| Android | 8.0 | IMPLICIT_BROADCAST নিষিদ্ধ | 67% ব্যাকগ্রাউন্ড Broadcast ভেঙে গেছে |
| Android | 9.0 | Doze উন্নত | নেটওয়ার্ক কল সীমাবদ্ধ |
| Android | 12+ | Foreground Service সীমাবদ্ধ | ব্যাকগ্রাউন্ড থেকে লঞ্চ নিষিদ্ধ |
| iOS | 7+ | Background App Refresh | পর্যায়ক্রমিক আপডেট উইন্ডো |
| iOS | 13+ | BGTaskScheduler | এক্সিকিউশনের পরিবর্তে শিডিউলিং |
Android ব্যাকগ্রাউন্ড এক্সিকিউশনের জন্য বেশ কয়েকটি প্রক্রিয়া প্রদান করে, প্রতিটি বিভিন্ন ধরণের কাজ সমাধান করে। WorkManager বিলম্বিত এবং পর্যায়ক্রমিক কাজের জন্য প্রস্তাবিত API। Foreground Service দৃশ্যমান বিজ্ঞপ্তি সহ তাৎক্ষণিক এক্সিকিউশনের জন্য। JobScheduler হল WorkManager-এর নিম্ন-স্তরের বিকল্প।
WorkManager Android Jetpack-এর অংশ, যা ডিভাইস রিবুটের পরেও সম্পূর্ণতার গ্যারান্টি সহ ব্যাকগ্রাউন্ড কাজ সম্পাদন প্রদান করে। API নেটওয়ার্ক অবস্থা, ব্যাটারি স্তর এবং Doze মোড বিবেচনা করে সর্বোত্তম এক্সিকিউশন সময় বেছে নেয়। WorkManager API 14+ এর সাথে সামঞ্জস্যপূর্ণ এবং পুরানো AlarmManager এবং JobScheduler প্রতিস্থাপন করে।
যখন একটি অ্যাপ্লিকেশন ব্যবহারকারীর কাছে দৃশ্যমান একটি কাজ করতে হয় (সঙ্গীত চালানো, জিওলোকেশন রেকর্ড করা), Foreground Service ব্যবহার করা হয়। সার্ভিস স্ট্যাটাস বারে একটি স্থায়ী বিজ্ঞপ্তি দেখায় এবং উচ্চ অগ্রাধিকার রাখে — সিস্টেম কাজ শেষ না হওয়া পর্যন্ত এটি বন্ধ করবে না। Android 13 থেকে, POST_NOTIFICATIONS অনুমতি প্রয়োজন।
Android 6.0 থেকে, ডিভাইস নিষ্ক্রিয় থাকলে Doze মোডে প্রবেশ করে। এই মোডে, নেটওয়ার্ক অপারেশন, সিঙ্ক্রোনাইজেশন এবং JobScheduler স্থগিত করা হয়। WorkManager স্বয়ংক্রিয়ভাবে Doze-এর সাথে খাপ খায় — কাজগুলি পরবর্তী Maintenance Window-এর সময় সম্পাদিত হয় যখন ডিভাইস সার্ভিসিংয়ের জন্য জাগে।
iOS ব্যাকগ্রাউন্ড এক্সিকিউশনের জন্য আরও কঠোর পদ্ধতি ব্যবহার করে। Background App Refresh পর্যায়ক্রমিক ডেটা আপডেটের জন্য প্রধান প্রক্রিয়া। BGTaskScheduler সিস্টেম অবস্থার উপর ভিত্তি করে কাজ শিডিউল করার জন্য API। দীর্ঘ অপারেশনের জন্য Background Modes উপলব্ধ: audio, location, voip, fetch এবং processing।
Background App Refresh অ্যাপ্লিকেশনকে ডেটা সিঙ্ক্রোনাইজ করতে প্রতি 15–30 মিনিটে জাগতে দেয়। জাগ্রত হওয়ার সময় ব্যবহারকারীর আচরণের উপর নির্ভর করে — সিস্টেম বিশ্লেষণ করে যে তারা কতবার অ্যাপ্লিকেশন খোলে। ব্যবহারকারী Settings — General — Background App Refresh-এ পৃথক অ্যাপ্লিকেশনের জন্য এই বৈশিষ্ট্য বন্ধ করতে পারেন।
iOS 13 থেকে, BGTaskScheduler পুরানো performFetch এবং beginBackgroundTask প্রতিস্থাপন করেছে। অ্যাপ্লিকেশন একটি শনাক্তকারী এবং ন্যূনতম ব্যবধানের সাথে কাজ নিবন্ধন করে, এবং সিস্টেম সর্বোত্তম এক্সিকিউশন সময় নির্ধারণ করে। কাজগুলি দুই প্রকারে বিভক্ত: BGProcessingTask (দীর্ঘ, 10+ মিনিট) এবং BGAppRefreshTask (সংক্ষিপ্ত, 30 সেকেন্ড পর্যন্ত)।
iOS ব্যাকগ্রাউন্ড কাজ সম্পাদনের জন্য সীমিত সময় বরাদ্দ করে — BGAppRefreshTask-এর জন্য 30 সেকেন্ড পর্যন্ত এবং BGProcessingTask-এর জন্য 10 মিনিট পর্যন্ত। সীমা অতিক্রম করলে, সিস্টেম জোর করে কাজটি শেষ করে। ডেভেলপারকে মধ্যবর্তী ফলাফল সংরক্ষণের জন্য expiration handler কল করতে হবে।
আসুন WorkManager ব্যবহার করে Android-এ ব্যাকগ্রাউন্ড এক্সিকিউশনের ব্যবহারিক বাস্তবায়ন দেখি। নেটওয়ার্ক অবস্থা সচেতনতার সাথে প্রতি 8 ঘন্টায় ডেটা সিঙ্ক্রোনাইজেশনের উদাহরণ। WorkManager ডিভাইস রিবুটের পরেও কাজ সম্পাদনের গ্যারান্টি দেয়।
class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
return try {
syncDataToServer()
Log.d("Sync", "ডেটা সিঙ্ক্রোনাইজ হয়েছে")
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
// প্রতি 8 ঘন্টায় পর্যায়ক্রমিক কাজ চালান
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresCharging(false)
.build()
val syncRequest = PeriodicWorkRequestBuilder<SyncWorker>(
8, TimeUnit.HOURS
).setConstraints(constraints).build()
WorkManager.getInstance(context).enqueue(syncRequest)
ব্যবহারকারীর কাছে দৃশ্যমান দীর্ঘ অপারেশনের জন্য, Foreground Service ব্যবহার করুন। বিজ্ঞপ্তিতে অগ্রগতি সহ ফাইল ডাউনলোডের উদাহরণ। সার্ভিস একটি বিজ্ঞপ্তি সহ startForeground() কল করে যা সরানো যায় না। ডাউনলোড শেষ হলে — stopForeground(STOP_FOREGROUND_REMOVE)।
class DownloadService : Service() {
override fun onStartCommand(intent: Intent?, flags: Int, id: Int): Int {
startForeground(NOTIFICATION_ID, createNotification())
downloadFile()
stopForeground(STOP_FOREGROUND_REMOVE)
stopSelf()
return START_NOT_STICKY
}
private fun createNotification(): Notification {
return NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("ফাইল ডাউনলোড করুন")
.setSmallIcon(android.R.drawable.ic_download)
.build()
}
}
iOS-এ, ব্যাকগ্রাউন্ড এক্সিকিউশন BGTaskScheduler-এর মাধ্যমে কনফিগার করা হয়। কন্টেন্ট আপডেট কাজ নিবন্ধন এবং সম্পাদনের উদাহরণ। অ্যাপ্লিকেশনকে Info.plist-এ কাজের শনাক্তকারী নিবন্ধন করতে হবে এবং submit কল করতে হবে যখন কাজটি শিডিউল করা উচিত।
import BackgroundTasks
func registerBackgroundTask() {
BGTaskScheduler.shared.register(
forTaskWithIdentifier: "com.app.refresh",
using: nil
) { task in
self.handleAppRefresh(task: task as! BGAppRefreshTask)
}
}
func scheduleAppRefresh() {
let request = BGAppRefreshTaskRequest(
identifier: "com.app.refresh"
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
try? BGTaskScheduler.shared.submit(request)
}
func handleAppRefresh(task: BGAppRefreshTask) {
scheduleAppRefresh()
task.expirationHandler = {
// মধ্যবর্তী ডেটা সংরক্ষণ করুন
cacheCurrentState()
}
fetchLatestData {
task.setTaskCompleted(success: true)
}
}
দীর্ঘ অপারেশনের (ক্যাশ পরিষ্কার, ডেটা প্রক্রিয়াকরণ) জন্য, BGProcessingTask ব্যবহার করুন। সিস্টেম এক্সিকিউশনের জন্য 10 মিনিট পর্যন্ত দেয়। শুধুমাত্র তখন চলে যখন ডিভাইস চার্জ হচ্ছে এবং Wi-Fi-এর সাথে সংযুক্ত। Info.plist-এ একটি পৃথক শনাক্তকারী এবং register(forTaskWithIdentifier:) এর মাধ্যমে নিবন্ধন প্রয়োজন।
func scheduleProcessing() {
let request = BGProcessingTaskRequest(
identifier: "com.app.cleanup"
)
request.requiresExternalPower = true
request.requiresNetworkConnectivity = true
request.earliestBeginDate = Date(timeIntervalSinceNow: 24 * 60 * 60)
try? BGTaskScheduler.shared.submit(request)
}
Android এবং iOS ব্যাকগ্রাউন্ড এক্সিকিউশনের দর্শনে মৌলিকভাবে ভিন্ন। Android বেশি নিয়ন্ত্রণ সহ নমনীয় সরঞ্জাম প্রদান করে কিন্তু ডেভেলপারকে সঠিক API বেছে নিতে হয়। iOS ক্ষমতা সীমাবদ্ধ করে তবে ব্যবহারকারীর জন্য স্থিতিশীল কর্মক্ষমতা এবং ব্যাটারি আয়ু নিশ্চিত করে।
| নির্ণায়ক | Android | iOS |
|---|---|---|
| প্রস্তাবিত API | WorkManager | BGTaskScheduler |
| সর্বোচ্চ কাজের সময় | সীমাহীন (Foreground Service) | 30 সে / 10 মি (processing) |
| পর্যায়ক্রমিক কাজ | হ্যাঁ, PeriodicWorkRequest-এর মাধ্যমে | হ্যাঁ, BGAppRefreshTask-এর মাধ্যমে |
| এক্সিকিউশন গ্যারান্টি | হ্যাঁ, রিবুটের পরেও | না — সিস্টেম সিদ্ধান্ত নেয় কখন |
| ব্যাকগ্রাউন্ড নেটওয়ার্ক অ্যাক্সেস | Doze মোড দ্বারা সীমাবদ্ধ | background config সহ URLSession-এর মাধ্যমে |
| ব্যাকগ্রাউন্ড জিওলোকেশন | Foreground Service + অনুমতি | Background Mode location + NSLocation |
| ব্যাকগ্রাউন্ড অডিও | মিডিয়া বিজ্ঞপ্তি সহ Foreground Service | Background Mode audio + AVAudioSession |
WorkManager সেই কাজের জন্য সর্বোত্তম যা অ্যাপ্লিকেশনের অবস্থা নির্বিশেষে সম্পন্ন হতে হবে: ডেটা সিঙ্ক্রোনাইজেশন, অ্যানালিটিক্স পাঠানো, কিউ প্রক্রিয়াকরণ। API গ্যারান্টি দেয় ডিভাইস বন্ধ করার পরেও এক্সিকিউশন — কাজ বুটের পরে পুনঃনির্ধারিত হয়।
BGTaskScheduler সেই কাজের জন্য উপযুক্ত যা সিস্টেম যেকোনো সুবিধাজনক সময়ে করতে পারে: নতুন কন্টেন্ট ডাউনলোড করা, উইজেট আপডেট করা, ক্যাশ পরিষ্কার করা। উপযুক্ত নয় জরুরি অপারেশনের জন্য — সিস্টেম কাজ বিলম্বিত করে যদি ডিভাইস Doze-এ থাকে বা ব্যাটারি কম থাকে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Background Execution একটি সাধারণ ধারণা যা ব্যাকগ্রাউন্ডে চলমান যেকোনো কোড বর্ণনা করে। Background Modes — একটি নির্দিষ্ট iOS প্রক্রিয়া যা অ্যাপ্লিকেশনকে নির্দিষ্ট ধরণের ব্যাকগ্রাউন্ড অপারেশন করতে দেয়: অডিও, জিওলোকেশন, VoIP, fetch। Android Foreground Service প্রকারের মাধ্যমে অনুরূপ পদ্ধতি ব্যবহার করে।
iOS-এ, এটি BGAppRefreshTask-এর জন্য মানক সীমা। সীমা অতিক্রম করলে সিস্টেম জোর করে কাজটি শেষ করে। Android-এ, অনুরূপ পরিস্থিতি ঘটে যখন অ্যাপ্লিকেশন WorkManager বা Foreground Service ব্যবহার করে না — একটি সাধারণ Service ব্যাকগ্রাউন্ডে যাওয়ার পর সিস্টেম দ্বারা শেষ হয়।
Android-এ, WorkManager ব্যবহার করুন — এটি রিবুটের পরেও এক্সিকিউশনের গ্যারান্টি দেয়। iOS-এ, এক্সিকিউশন গ্যারান্টি দেওয়া যায় না — সিস্টেম সিদ্ধান্ত নেয় কখন কাজ চালাতে হবে। এক্সিকিউশন নিশ্চিত করার একমাত্র উপায় হল ব্যবহারকারীর জন্য দৃশ্যমান সূচক সহ Background Modes (audio, location) ব্যবহার করা।
iOS-এ, UIApplication.shared.backgroundRefreshStatus কল করুন — অবস্থা .available, .denied বা .restricted। Android-এ, ব্যাটারি অপ্টিমাইজেশন ছাড় পরীক্ষা করতে PowerManager.isIgnoringBatteryOptimizations() ব্যবহার করুন। WorkManager-এর জন্য পরীক্ষার প্রয়োজন নেই — API নিজেই সিস্টেমের সীমাবদ্ধতা সামলায়।
Push বিজ্ঞপ্তিগুলি ব্যাকগ্রাউন্ড কোড ছাড়া কাজ ট্রিগার করার প্রধান প্রক্রিয়া। iOS-এ, VoIP-এর জন্য PushKit এবং ডেটা আপডেটের জন্য Silent Push উপলব্ধ। Android-এ — High Priority FCM এবং Notification Trampoline। Foreground Service-এর মাধ্যমে WebSockets রিয়েল-টাইম অ্যাপ্লিকেশনের জন্য একটি বিকল্প।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন