Background Execution در توسعه موبایل — ماهیت، محدودیت‌ها و اصول کار

نویسنده: IT Sectr منتشر شده: 2026-03-26 زمان مطالعه: 9 دقیقه

Background Execution — مکانیزم اجرای کد برنامه موبایل در زمانی که در پیش‌زمینه نیست. بدون این مکانیزم، برنامه هنگام کوچک‌سازی توسط سیستم متوقف می‌شود. به گفته Apple, 2026، iOS زمان پس‌زمینه را به ۳۰ ثانیه محدود می‌کند، در حالی که Android سناریوهای انعطاف‌پذیرتری از طریق WorkManager و Foreground Service ارائه می‌دهد.

نکات اصلی

  • Background Execution — اجرای کد برنامه هنگامی که کوچک‌سازی شده یا غیرفعال است.
  • iOS — محدودیت‌های سخت: ۳۰ ثانیه برای وظایف، Background Modes و App Refresh سختگیرانه.
  • Android — WorkManager، Foreground Service، Scheduling و Doze mode با محدودیت‌های مختلف.
  • مصرف انرژی — دلیل اصلی محدودیت‌ها: فرآیندهای پس‌زمینه عمر باتری دستگاه را کاهش می‌دهند.
  • حریم خصوصی — از Android 8 و iOS 13، سیستم‌ها برای کار در پس‌زمینه مجوزهای صریح می‌خواهند.

Background Execution در برنامه‌های موبایل چیست؟

Background Execution — توانایی برنامه برای ادامه اجرای کد پس از آنکه کاربر آن را کوچک کرد یا به برنامه دیگری سوئیچ کرد. بدون مکانیزم‌های خاص، سیستم‌عامل موبایل برنامه را پس از چند ثانیه به حالت Suspended (معلق) می‌برد و پردازنده و حافظه را برای برنامه‌های فعال آزاد می‌کند.

وضعیت‌های برنامه در پس‌زمینه

برنامه موبایل چندین وضعیت چرخه حیات را طی می‌کند: Foreground (فعال)، Background (پس‌زمینه)، Suspended (معلق) و Terminated (پایان‌یافته). Background — تنها وضعیتی است که برنامه می‌تواند بدون رابط کاربری قابل مشاهده کد اجرا کند. iOS و Android مدت زمان و عملیات مجاز را در این وضعیت متفاوت تعریف می‌کنند.

سناریوهای اصلی استفاده

اجرای پس‌زمینه برای وظایف همگام‌سازی داده‌ها، دانلود محتوا، پردازش اعلان‌های Push، مکان‌یابی در پس‌زمینه و پخش صدا ضروری است. همگام‌سازی — رایج‌ترین سناریو: برنامه بدون دخالت کاربر داده‌ها را به سرور ارسال می‌کند یا به‌روزرسانی‌ها را دانلود می‌کند.

  • همگام‌سازی — بارگذاری و تخلیه داده‌ها هنگام تغییر شبکه.
  • مکان‌یابی — ردیابی موقعیت در ردیاب‌های تناسب اندام و مسیریاب‌ها.
  • رسانه — پخش صدا و ویدئو در پس‌زمینه (موسیقی، پادکست).
  • اعلان‌ها — پردازش اعلان‌های Push و محلی.
  • دانلود — دریافت فایل‌های حجیم (پادکست، ویدئو) در پس‌زمینه.

چرا سیستم‌عامل‌های موبایل اجرای پس‌زمینه را محدود می‌کنند

محدودیت‌های اجرای پس‌زمینه ناشی از سه عامل است: مصرف انرژی، عملکرد دستگاه و حریم خصوصی کاربر. پردازنده و ماژول‌های رادیویی (Wi-Fi، داده‌های تلفن همراه) بیشترین انرژی را مصرف می‌کنند — هر فرآیند پس‌زمینه عمر باتری را کاهش می‌دهد.

مصرف انرژی و استقلال

تحقیقات Google نشان می‌دهد که برنامه‌هایی که هر ۵ دقیقه وظایف پس‌زمینه را اجرا می‌کنند، عمر باتری دستگاه را ۲۰–۳۰٪ در روز کاهش می‌دهند. حتی عملیات‌های بهینه‌شده پس‌زمینه با تناوب یک بار در ساعت، اگر بیش از دو برنامه از این دست باشد، تأثیر قابل توجهی دارند.

حافظه رم و عملکرد

هر برنامه پس‌زمینه حافظه رم را اشغال می‌کند. در کمبود حافظه، سیستم برنامه‌ها را از حافظه خارج می‌کند که منجر به راه‌اندازی مجدد هنگام بازگشت کاربر می‌شود. iOS از الگوریتم Jetsam استفاده می‌کند — مکانیزم خاتمه اجباری فرآیندهای پس‌زمینه هنگام تجاوز از محدودیت حافظه. Android از LMK (Low Memory Killer) با اصل مشابه استفاده می‌کند.

حریم خصوصی کاربر

از Android 10 و iOS 13، سیستم از برنامه‌ها می‌خواهد هدف کار پس‌زمینه را اعلام کنند. Android راه‌اندازی Broadcast Receiver در پس‌زمینه را محدود کرد. iOS نیاز به مشخص کردن Background Mode در Capabilities پروژه دارد. کاربر می‌تواند اجرای پس‌زمینه را برای هر برنامه در تنظیمات غیرفعال کند.

سیستم‌عاملنسخهمحدودیتتأثیر
Android۸.۰IMPLICIT_BROADCAST ممنوع۶۷٪ Broadcastهای پس‌زمینه شکستند
Android۹.۰Doze بهبود یافتمحدودیت فراخوانی‌های شبکه
Android۱۲+Foreground Service محدود شدممنوعیت راه‌اندازی از پس‌زمینه
iOS۷+Background App Refreshپنجره‌های به‌روزرسانی دوره‌ای
iOS۱۳+BGTaskSchedulerبرنامه‌ریزی به جای اجرا

Background Execution در Android: WorkManager و Foreground Service

Android چندین مکانیزم برای اجرای پس‌زمینه ارائه می‌دهد که هر کدام دسته خاصی از وظایف را حل می‌کنند. WorkManager — API توصیه‌شده برای وظایف تأخیری و دوره‌ای. Foreground Service — برای اجرای فوری با اعلان قابل مشاهده. JobScheduler — آنالوگ سطح پایین WorkManager.

WorkManager — راه‌حل جهانی

WorkManager — بخشی از Android Jetpack است که اجرای وظایف پس‌زمینه را با ضمانت اتمام حتی پس از راه‌اندازی مجدد دستگاه تضمین می‌کند. API زمان بهینه اجرا را با در نظر گرفتن وضعیت شبکه، سطح باتری و حالت Doze انتخاب می‌کند. WorkManager با API 14+ سازگار است و جایگزین AlarmManager و JobScheduler قدیمی می‌شود.

Foreground Service — برای عملیات طولانی

زمانی که برنامه نیاز به اجرای وظیفه قابل مشاهده برای کاربر دارد (پخش موسیقی، ثبت مکان)، از Foreground Service استفاده می‌شود. سرویس یک اعلان دائمی در نوار وضعیت نشان می‌دهد و اولویت بالاتری دارد — سیستم تا پایان وظیفه آن را خاتمه نمی‌دهد. از Android 13، مجوز POST_NOTIFICATIONS الزامی است.

حالت Doze و بهینه‌سازی باتری

از Android ۶.۰، دستگاه در هنگام بیتحرکی به حالت Doze می‌رود. در این حالت عملیات شبکه، همگام‌سازی و JobScheduler به تعویق می‌افتند. WorkManager به طور خودکار با Doze سازگار می‌شود — وظایف در نزدیکترین Maintenance Window زمانی که دستگاه برای سرویس‌دهی از خواب بیدار می‌شود، اجرا می‌شوند.

Background Execution در iOS: Background Tasks و App Refresh

iOS رویکرد سختگیرانه‌تری به اجرای پس‌زمینه دارد. Background App Refresh — مکانیزم اصلی به‌روزرسانی دوره‌ای داده‌ها. BGTaskScheduler — API برای برنامه‌ریزی وظایف با در نظر گرفتن وضعیت سیستم. برای عملیات طولانی، Background Modes در دسترس است: audio، location، voip، fetch و processing.

Background App Refresh

Background App Refresh به برنامه اجازه می‌دهد هر ۱۵–۳۰ دقیقه برای همگام‌سازی داده‌ها بیدار شود. زمان بیدار شدن به رفتار کاربر بستگی دارد — سیستم تحلیل می‌کند که او چند وقت یکبار برنامه را باز می‌کند. کاربر می‌تواند این عملکرد را برای برنامه‌های خاص در Settings — General — Background App Refresh غیرفعال کند.

BGTaskScheduler — رویکرد مدرن

از iOS ۱۳، BGTaskScheduler جایگزین performFetch و beginBackgroundTask قدیمی شده است. برنامه وظایف را با شناسه و حداقل فاصله ثبت می‌کند، و سیستم خود زمان بهینه اجرا را تعیین می‌کند. وظایف به دو نوع تقسیم می‌شوند: BGProcessingTask (طولانی، ۱۰+ دقیقه) و BGAppRefreshTask (کوتاه، تا ۳۰ ثانیه).

محدودیت زمان اجرا

iOS زمان محدودی برای اجرای وظیفه پس‌زمینه به برنامه اختصاص می‌دهد — تا ۳۰ ثانیه برای BGAppRefreshTask و تا ۱۰ دقیقه برای BGProcessingTask. پس از اتمام محدودیت، سیستم وظیفه را اجباری خاتمه می‌دهد. توسعه‌دهنده باید handler اتمام (expiration handler) را برای ذخیره نتایج موقت فراخوانی کند.

نمونه کد: Android WorkManager

بیایید پیاده‌سازی عملی اجرای پس‌زمینه در Android را با WorkManager بررسی کنیم. نمونه همگام‌سازی داده‌ها هر ۸ ساعت با در نظر گرفتن وضعیت شبکه. WorkManager اجرای وظیفه را حتی پس از راه‌اندازی مجدد دستگاه تضمین می‌کند.

kotlin
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()
        }
    }
}

// اجرای وظیفه دوره‌ای هر ۸ ساعت
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 با اعلان

برای عملیات طولانی قابل مشاهده برای کاربر، از Foreground Service استفاده کنید. نمونه دانلود فایل با پیشرفت در اعلان. سرویس startForeground() را با اعلانی که نمی‌توان رد کرد فراخوانی می‌کند. پس از اتمام دانلود — stopForeground(STOP_FOREGROUND_REMOVE).

kotlin
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

در iOS اجرای پس‌زمینه از طریق BGTaskScheduler پیکربندی می‌شود. نمونه ثبت و اجرای وظیفه به‌روزرسانی محتوا. برنامه باید شناسه وظیفه را در Info.plist ثبت کند و submit را در زمان برنامه‌ریزی وظیفه فراخوانی کند.

swift
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)
    }
}

Background Processing Task

برای عملیات طولانی (پاکسازی کش، پردازش داده‌ها) از BGProcessingTask استفاده کنید. سیستم تا ۱۰ دقیقه برای اجرا فرصت می‌دهد. فقط زمانی اجرا می‌شود که دستگاه به شارژر متصل و به Wi-Fi وصل باشد. نیاز به شناسه جداگانه در Info.plist و ثبت از طریق register(forTaskWithIdentifier:) دارد.

swift
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 و iOS در فلسفه اجرای پس‌زمینه تفاوت اساسی دارند. Android ابزارهای انعطاف‌پذیر با کنترل زیاد ارائه می‌دهد، اما از توسعه‌دهنده انتخاب صحیح API را می‌طلبد. iOS امکانات را محدود می‌کند، اما عملکرد پایدار و استقلال را برای کاربر تضمین می‌کند.

معیارAndroidiOS
API توصیه‌شدهWorkManagerBGTaskScheduler
حداکثر زمان وظیفهنامحدود (Foreground Service)۳۰ ثانیه / ۱۰ دقیقه (processing)
وظایف دوره‌ایبله، از طریق PeriodicWorkRequestبله، از طریق BGAppRefreshTask
تضمین اجرابله، حتی پس از راه‌اندازی مجددخیر — سیستم تصمیم می‌گیرد کی
دسترسی شبکه در پس‌زمینهمحدود شده توسط Doze modeاز طریق URLSession با background config
مکان‌یابی در پس‌زمینهForeground Service + مجوزBackground Mode location + NSLocation
صدا در پس‌زمینهForeground Service با اعلان رسانهBackground Mode audio + AVAudioSession

چه زمانی Android WorkManager را انتخاب کنیم

WorkManager برای وظایفی که باید بدون توجه به وضعیت برنامه اجرا شوند بهینه است: همگام‌سازی داده‌ها، ارسال آمار، پردازش صف‌ها. API تضمین می‌کند اجرا حتی پس از خاموش شدن دستگاه — وظیفه پس از بوت دوباره برنامه‌ریزی می‌شود.

چه زمانی iOS BGTaskScheduler را انتخاب کنیم

BGTaskScheduler برای وظایفی مناسب است که سیستم می‌تواند در هر زمان مناسب اجرا کند: دانلود محتوای جدید، به‌روزرسانی ویجت‌ها، پاکسازی کش. برای عملیات فوری مناسب نیست — اگر دستگاه در Doze باشد یا باتری کم باشد، سیستم وظیفه را به تعویق می‌اندازد.

سوالات متداول

تفاوت بین Background Execution و Background Modes چیست؟

Background Execution — مفهوم کلی است که هر کدی را که در پس‌زمینه اجرا می‌شود توصیف می‌کند. Background Modes — مکانیزم خاص iOS که به برنامه اجازه می‌دهد انواع خاصی از عملیات پس‌زمینه را اجرا کند: audio، geolocation، VoIP، fetch. Android از رویکرد مشابهی از طریق انواع Foreground Service استفاده می‌کند.

چرا برنامه من پس از ۳۰ ثانیه در پس‌زمینه خاتمه می‌یابد؟

در iOS این محدودیت استاندارد برای BGAppRefreshTask است. سیستم پس از اتمام محدودیت وظیفه را اجباری خاتمه می‌دهد. در Android وضعیت مشابه زمانی رخ می‌دهد که برنامه از WorkManager یا Foreground Service استفاده نمی‌کند — Service معمولی پس از رفتن به پس‌زمینه توسط سیستم خاتمه می‌یابد.

چگونه اجرای وظیفه را در هر دو پلتفرم تضمین کنیم؟

در Android از WorkManager استفاده کنید — حتی پس از راه‌اندازی مجدد اجرا را تضمین می‌کند. در iOS نمی‌توان اجرا را تضمین کرد — سیستم خود تصمیم می‌گیرد چه زمانی وظیفه را اجرا کند. تنها راه تضمین — استفاده از Background Modes (audio، location) با نشانگر قابل مشاهده برای کاربر.

چگونه بررسی کنیم که اجرای پس‌زمینه مجاز است؟

در iOS UIApplication.shared.backgroundRefreshStatus را فراخوانی کنید — status .available، .denied یا .restricted. در Android از PowerManager.isIgnoringBatteryOptimizations() برای بررسی استثنا از بهینه‌سازی باتری استفاده کنید. برای WorkManager بررسی لازم نیست — API خود محدودیت‌های سیستم را مدیریت می‌کند.

چه جایگزین‌هایی برای اجرای پس‌زمینه وجود دارد؟

اعلان‌های Push — مکانیزم اصلی برای ایجاد رویداد بدون کد پس‌زمینه. در iOS PushKit برای VoIP و Silent Push برای به‌روزرسانی داده‌ها در دسترس است. در Android — High Priority FCM و Notification Trampoline. WebSockets از طریق Foreground Service — جایگزینی برای برنامه‌های real-time.

خلاصه

  • Background Execution — مکانیزم اجرای کد در برنامه کوچک‌شده، حیاتی برای همگام‌سازی، دانلود و اعلان‌ها.
  • Android WorkManager (اجرای تضمینی)، Foreground Service (وظایف طولانی قابل مشاهده) و محدودیت‌های Doze mode را ارائه می‌دهد.
  • iOS از BGTaskScheduler (برنامه‌ریزی)، Background App Refresh (به‌روزرسانی‌های دوره‌ای) و Background Modes برای رسانه و مکان‌یابی استفاده می‌کند.
  • مصرف انرژی — دلیل اصلی محدودیت‌ها: فرآیندهای پس‌زمینه بدون بهینه‌سازی عمر باتری را ۲۰–۳۰٪ کاهش می‌دهند.
  • حریم خصوصی — هر دو پلتفرم مجوزهای صریح (Android POST_NOTIFICATIONS، iOS Background Modes) و اطلاع‌رسانی به کاربر را الزامی می‌کنند.
  • WorkManager — تنها API با تضمین اجرا پس از راه‌اندازی مجدد دستگاه، BGTaskScheduler به تصمیم سیستم متکی است.
  • برای عملیات طولانی قابل مشاهده در نوار وضعیت، در Android از Foreground Service و در iOS از Background Modes استفاده کنید.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید