التنفيذ في الخلفية في تطوير التطبيقات المحمولة — الجوهر والقيود ومبادئ العمل

المؤلف: IT Sectr نُشر: 2026-03-26 وقت القراءة: 9 دق

Background Execution هي آلية تسمح بتنفيذ كود التطبيق المحمول عندما لا يكون في المقدمة. بدون هذه الآلية، يقوم النظام بتعليق التطبيق عند تصغيره. وفقًا لشركة Apple، 2026، يحد iOS من وقت الخلفية إلى 30 ثانية، بينما يتيح Android سيناريوهات أكثر مرونة عبر WorkManager وForeground Service.

النقاط الرئيسية

  • Background Execution — تنفيذ كود التطبيق عندما يكون مصغرًا أو غير نشط.
  • iOS — حدود صارمة: 30 ثانية للمهام، Background Modes وApp Refresh صارمين.
  • Android — WorkManager وForeground Service وScheduling ووضع Doze بقيود مختلفة.
  • استهلاك الطاقة — السبب الرئيسي للقيود: العمليات في الخلفية تقلل من عمر بطارية الجهاز.
  • الخصوصية — بدءًا من Android 8 وiOS 13، تتطلب الأنظمة أذونات صريحة للعمل في الخلفية.

ما هو التنفيذ في الخلفية في التطبيقات المحمولة؟

Background Execution هي قدرة التطبيق على مواصلة تنفيذ الكود بعد أن يقوم المستخدم بتصغيره أو التبديل إلى تطبيق آخر. بدون آليات خاصة، يضع نظام التشغيل المحمول التطبيق في حالة Suspended (موقف) في غضون ثوانٍ قليلة بعد الدخول إلى الخلفية، مما يحرر المعالج والذاكرة للتطبيقات النشطة.

حالات التطبيق في الخلفية

يمر التطبيق المحمول بعدة حالات من دورة الحياة: Foreground (نشط)، Background (في الخلفية)، Suspended (موقف)، وTerminated (منتهي). Background هي الحالة الوحيدة التي يمكن فيها للتطبيق تنفيذ كود بدون واجهة مرئية. يحدد iOS وAndroid مدة وعمليات هذه الحالة بشكل مختلف.

حالات الاستخدام الرئيسية

التنفيذ في الخلفية ضروري لمهام مزامنة البيانات وتنزيل المحتوى ومعالجة إشعارات Push وتحديد المواقع في الخلفية وتشغيل الصوت. المزامنة هي السيناريو الأكثر شيوعًا: يرسل التطبيق البيانات إلى الخادم أو ينزل التحديثات دون مشاركة المستخدم.

  • المزامنة — رفع وتنزيل البيانات عند تغير حالة الشبكة.
  • تحديد المواقع — تتبع الموقع في تطبيقات اللياقة والملاحة.
  • الوسائط — تشغيل الصوت والفيديو في الخلفية (الموسيقى، البودكاست).
  • الإشعارات — معالجة إشعارات Push والمحلية.
  • التنزيل — تنزيل الملفات الكبيرة (البودكاست، الفيديو) في الخلفية.

لماذا تحد أنظمة التشغيل المحمولة من التنفيذ في الخلفية

القيود على التنفيذ في الخلفية ناتجة عن ثلاثة عوامل: استهلاك الطاقة وأداء الجهاز وخصوصية المستخدم. المعالج ووحدات الراديو (Wi-Fi، البيانات الخلوية) تستهلك أكبر قدر من الطاقة — كل عملية في الخلفية تقلل من عمر البطارية.

استهلاك الطاقة وعمر البطارية

تظهر دراسات Google أن التطبيقات التي تنفذ مهامًا في الخلفية كل 5 دقائق تقلل من عمر بطارية الجهاز بنسبة 20–30% في اليوم. حتى العمليات المحسنة في الخلفية بتكرار مرة واحدة في الساعة لها تأثير ملحوظ إذا كان هناك أكثر من تطبيقين من هذا القبيل.

ذاكرة الوصول العشوائي والأداء

كل تطبيق في الخلفية يستهلك ذاكرة وصول عشوائي. عند نقص الذاكرة، يقوم النظام بتفريغ التطبيقات من الذاكرة، مما يؤدي إلى إعادة تشغيلها عند عودة المستخدم. iOS يستخدم خوارزمية Jetsam — آلية إنهاء إجباري للعمليات في الخلفية عند تجاوز حد الذاكرة. يستخدم Android LMK (Low Memory Killer) بمبدأ مشابه.

خصوصية المستخدم

بدءًا من Android 10 وiOS 13، يطلب النظام من التطبيقات الإعلان عن الغرض من العمل في الخلفية. فرض Android قيودًا على تشغيل Broadcast Receiver في الخلفية. يتطلب iOS تحديد Background Mode في قدرات المشروع. يمكن للمستخدم تعطيل التنفيذ في الخلفية لأي تطبيق في الإعدادات.

نظام التشغيلالإصدارالقيودالتأثير
Android8.0IMPLICIT_BROADCAST محظور67% من Broadcast في الخلفية معطل
Android9.0Doze محسناستدعاءات الشبكة مقيدة
Android12+Foreground Service مقيدالتشغيل من الخلفية محظور
iOS7+Background App Refreshنوافذ تحديث دورية
iOS13+BGTaskSchedulerجدولة بدلاً من التنفيذ

التنفيذ في الخلفية على 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 6.0، يدخل الجهاز في وضع Doze عند عدم النشاط. في هذا الوضع، يتم تأجيل عمليات الشبكة والمزامنة وJobScheduler. يتكيف WorkManager تلقائيًا مع Doze — يتم تنفيذ المهام أثناء نافذة الصيانة التالية عندما يستيقظ الجهاز من السكون للصيانة.

التنفيذ في الخلفية على iOS: Background Tasks وApp Refresh

يستخدم iOS نهجًا أكثر صرامة للتنفيذ في الخلفية. Background App Refresh هو الآلية الرئيسية للتحديث الدوري للبيانات. BGTaskScheduler هي API لجدولة المهام وفقًا لحالة النظام. للعمليات الطويلة، تتوفر Background Modes: audio وlocation وvoip وfetch وprocessing.

Background App Refresh

Background App Refresh يسمح للتطبيق بالاستيقاظ كل 15–30 دقيقة لمزامنة البيانات. يعتمد وقت الاستيقاظ على سلوك المستخدم — يحلل النظام عدد مرات فتحه للتطبيق. يمكن للمستخدم تعطيل هذه الميزة لتطبيقات فردية في الإعدادات — عام — Background App Refresh.

BGTaskScheduler — النهج الحديث

بدءًا من iOS 13، حل BGTaskScheduler محل performFetch وbeginBackgroundTask القديمين. يسجل التطبيق المهام بمعرف وفاصل زمني أدنى، ويحدد النظام وقت التنفيذ الأمثل. تنقسم المهام إلى نوعين: BGProcessingTask (طويلة، 10+ دقائق) وBGAppRefreshTask (قصيرة، حتى 30 ثانية).

حدود وقت التنفيذ

يخصص iOS وقتًا محدودًا لتنفيذ المهام في الخلفية — حتى 30 ثانية لـ BGAppRefreshTask وحتى 10 دقائق لـ BGProcessingTask. عند تجاوز الحد، ينهي النظام المهمة إجباريًا. يجب على المطور استدعاء معالج الانتهاء (expiration handler) لحفظ النتائج الوسيطة.

أمثلة الكود: Android WorkManager

لنلقِ نظرة على تطبيق عملي للتنفيذ في الخلفية على Android باستخدام WorkManager. مثال لمزامنة البيانات كل 8 ساعات مع مراعاة حالة الشبكة. يضمن 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()
        }
    }
}

// تشغيل المهمة الدورية كل 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 مع إشعار

للعمليات الطويلة المرئية للمستخدم، استخدم 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. يمنح النظام حتى 10 دقائق للتنفيذ. يتم التشغيل فقط عندما يكون الجهاز قيد الشحن ومتصلًا بشبكة 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)30 ث / 10 دق (processing)
المهام الدوريةنعم، عبر PeriodicWorkRequestنعم، عبر BGAppRefreshTask
ضمان التنفيذنعم، حتى بعد إعادة التشغيللا — النظام يقرر متى
الوصول إلى الشبكة في الخلفيةمقيد بوضع Dozeعبر 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 تسمح للتطبيق بأداء أنواع معينة من العمليات في الخلفية: الصوت، تحديد المواقع، VoIP، fetch. يستخدم Android نهجًا مشابهًا عبر أنواع Foreground Service.

لماذا يتم إنهاء تطبيقي بعد 30 ثانية في الخلفية؟

على 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، يتوفر PushKit لـ VoIP و Silent Push لتحديث البيانات. على Android — High Priority FCM و Notification Trampoline. WebSockets عبر Foreground Service بديل للتطبيقات في الوقت الفعلي.

الملخص

  • Background Execution — آلية لتنفيذ الكود عند تصغير التطبيق، ضرورية للمزامنة والتنزيل والإشعارات.
  • Android يقدم WorkManager (تنفيذ مضمون)، وForeground Service (مهام مرئية طويلة)، وقيود وضع Doze.
  • iOS يستخدم BGTaskScheduler (جدولة)، وBackground App Refresh (تحديثات دورية)، وBackground Modes للوسائط وتحديد المواقع.
  • استهلاك الطاقة — السبب الرئيسي للقيود: العمليات غير المحسنة في الخلفية تقلل عمر البطارية بنسبة 20–30%.
  • الخصوصية — كلا المنصتين تتطلبان أذونات صريحة (Android POST_NOTIFICATIONS، iOS Background Modes) وإشعار المستخدم.
  • WorkManager هو API الوحيد مع ضمان التنفيذ بعد إعادة التشغيل؛ BGTaskScheduler يعتمد على قرارات النظام.
  • استخدم Foreground Service على Android وBackground Modes على iOS للعمليات الطويلة المرئية للمستخدم في شريط الحالة.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا