Ejecución en segundo plano en el desarrollo móvil — esencia, limitaciones y principios de funcionamiento

Autor: IT Sectr Publicado: 2026-03-26 Tiempo de lectura: 9 min

Background Execution es un mecanismo que permite ejecutar código de una aplicación móvil cuando no está en primer plano. Sin este mecanismo, el sistema suspende la aplicación al minimizarla. Según Apple, 2026, iOS limita el tiempo en segundo plano a 30 segundos, mientras que Android ofrece escenarios más flexibles a través de WorkManager y Foreground Service.

Puntos Clave

  • Background Execution — ejecución de código de la aplicación cuando está minimizada o inactiva.
  • iOS — límites estrictos: 30 segundos para tareas, Background Modes y App Refresh rigurosos.
  • Android — WorkManager, Foreground Service, Scheduling y modo Doze con distintas restricciones.
  • Consumo de energía — la razón principal de las limitaciones: los procesos en segundo plano reducen la duración de la batería.
  • Privacidad — a partir de Android 8 y iOS 13, los sistemas requieren permisos explícitos para el trabajo en segundo plano.

¿Qué es la ejecución en segundo plano en aplicaciones móviles?

Background Execution es la capacidad de una aplicación de continuar ejecutando código después de que el usuario la haya minimizado o cambiado a otra aplicación. Sin mecanismos especiales, el SO móvil pone la aplicación en estado Suspendido a los pocos segundos de pasar a segundo plano, liberando CPU y memoria para las aplicaciones activas.

Estados de la aplicación en segundo plano

Una aplicación móvil pasa por varios estados del ciclo de vida: Foreground (activo), Background (en segundo plano), Suspended (suspendido) y Terminated (finalizado). Background es el único estado en el que la aplicación puede ejecutar código sin una interfaz visible. iOS y Android definen la duración y las operaciones disponibles en este estado de manera diferente.

Principales casos de uso

La ejecución en segundo plano es necesaria para la sincronización de datos, descarga de contenido, procesamiento de notificaciones Push, geolocalización en segundo plano y reproducción de audio. La sincronización es el escenario más común: la aplicación envía datos al servidor o descarga actualizaciones sin intervención del usuario.

  • Sincronización — carga y descarga de datos cuando cambia el estado de la red.
  • Geolocalización — seguimiento de ubicación en rastreadores de fitness y navegadores.
  • Multimedia — reproducción de audio y video en segundo plano (música, podcasts).
  • Notificaciones — procesamiento de notificaciones Push y locales.
  • Descarga — descarga de archivos grandes (podcasts, videos) en segundo plano.

¿Por qué los SO móviles limitan la ejecución en segundo plano?

Las limitaciones de la ejecución en segundo plano vienen dadas por tres factores: consumo de energía, rendimiento del dispositivo y privacidad del usuario. La CPU y los módulos de radio (Wi-Fi, datos móviles) consumen la mayor parte de la energía — cada proceso en segundo plano reduce la duración de la batería.

Consumo de energía y autonomía

Los estudios de Google muestran que las aplicaciones que ejecutan tareas en segundo plano cada 5 minutos reducen la duración de la batería del dispositivo entre un 20 y un 30% al día. Incluso las operaciones en segundo plano optimizadas con una frecuencia de una hora tienen un impacto notable si hay más de dos aplicaciones de este tipo.

RAM y rendimiento

Cada aplicación en segundo plano ocupa memoria RAM. Cuando la RAM es insuficiente, el sistema descarga aplicaciones de la memoria, lo que provoca un reinicio al regresar el usuario. iOS utiliza el algoritmo Jetsam — un mecanismo de finalización forzosa de procesos en segundo plano al superar el límite de memoria. Android emplea LMK (Low Memory Killer) con un principio similar.

Privacidad del usuario

A partir de Android 10 e iOS 13, el sistema exige que las aplicaciones declaren el propósito del trabajo en segundo plano. Android introdujo restricciones al lanzamiento de Broadcast Receivers en segundo plano. iOS requiere especificar Background Mode en las capacidades del proyecto. Los usuarios pueden desactivar la ejecución en segundo plano para cualquier aplicación en los ajustes.

SOVersiónRestricciónImpacto
Android8.0IMPLICIT_BROADCAST prohibido67% de Broadcast en segundo plano rotos
Android9.0Doze mejoradoLlamadas de red restringidas
Android12+Foreground Service restringidoInicio desde segundo plano prohibido
iOS7+Background App RefreshVentanas de actualización periódicas
iOS13+BGTaskSchedulerPlanificación en lugar de ejecución

Ejecución en segundo plano en Android: WorkManager y Foreground Service

Android proporciona varios mecanismos para la ejecución en segundo plano, cada uno diseñado para una categoría diferente de tareas. WorkManager es la API recomendada para tareas diferidas y periódicas. Foreground Service es para ejecución inmediata con una notificación visible. JobScheduler es una alternativa de bajo nivel a WorkManager.

WorkManager — Solución universal

WorkManager forma parte de Android Jetpack y proporciona ejecución de tareas en segundo plano con garantía de finalización incluso tras reiniciar el dispositivo. La API elige el momento óptimo de ejecución teniendo en cuenta el estado de la red, el nivel de batería y el modo Doze. WorkManager es compatible con API 14+ y reemplaza a los obsoletos AlarmManager y JobScheduler.

Foreground Service — Para operaciones prolongadas

Cuando una aplicación necesita realizar una tarea visible para el usuario (reproducción de música, registro de geolocalización), se utiliza Foreground Service. El servicio muestra una notificación persistente en la barra de estado y tiene mayor prioridad — el sistema no lo finalizará hasta que la tarea termine. A partir de Android 13, se requiere el permiso POST_NOTIFICATIONS.

Modo Doze y optimización de batería

A partir de Android 6.0, el dispositivo entra en modo Doze cuando está inactivo. En este modo se aplazan las operaciones de red, la sincronización y JobScheduler. WorkManager se adapta automáticamente a Doze — las tareas se ejecutan durante la siguiente Maintenance Window cuando el dispositivo sale del sueño para mantenimiento.

Ejecución en segundo plano en iOS: Background Tasks y App Refresh

iOS utiliza un enfoque más estricto para la ejecución en segundo plano. Background App Refresh es el mecanismo principal para la actualización periódica de datos. BGTaskScheduler es la API para planificar tareas según el estado del sistema. Para operaciones prolongadas están disponibles los Background Modes: audio, location, voip, fetch y processing.

Background App Refresh

Background App Refresh permite que la aplicación se active cada 15–30 minutos para sincronizar datos. El tiempo de activación depende del comportamiento del usuario — el sistema analiza con qué frecuencia abre la aplicación. Los usuarios pueden desactivar esta función para aplicaciones individuales en Ajustes — General — Background App Refresh.

BGTaskScheduler — Enfoque moderno

A partir de iOS 13, BGTaskScheduler reemplazó a los obsoletos performFetch y beginBackgroundTask. La aplicación registra tareas con un identificador e intervalo mínimo, y el sistema determina el momento óptimo de ejecución. Las tareas se dividen en dos tipos: BGProcessingTask (prolongadas, 10+ minutos) y BGAppRefreshTask (cortas, hasta 30 segundos).

Límites de tiempo de ejecución

iOS asigna tiempo limitado para la ejecución de tareas en segundo plano — hasta 30 segundos para BGAppRefreshTask y hasta 10 minutos para BGProcessingTask. Al superar el límite, el sistema finaliza la tarea forzosamente. El desarrollador debe llamar al manejador de finalización (expiration handler) para guardar los resultados intermedios.

Ejemplos de código: Android WorkManager

Veamos una implementación práctica de la ejecución en segundo plano en Android usando WorkManager. Un ejemplo de sincronización de datos cada 8 horas con conocimiento del estado de la red. WorkManager garantiza la ejecución de la tarea incluso tras reiniciar el dispositivo.

kotlin
class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    override fun doWork(): Result {
        return try {
            syncDataToServer()
            Log.d("Sync", "Datos sincronizados")
            Result.success()
        } catch (e: Exception) {
            Result.retry()
        }
    }
}

// Ejecutar tarea periódica cada 8 horas
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 con notificación

Para operaciones prolongadas visibles para el usuario, use Foreground Service. Un ejemplo de descarga de archivo con progreso en la notificación. El servicio llama a startForeground() con una notificación que no se puede descartar. Al completar la descarga — 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("Descargar archivo")
            .setSmallIcon(android.R.drawable.ic_download)
            .build()
    }
}

Ejemplos de código: iOS BGTaskScheduler

En iOS, la ejecución en segundo plano se configura a través de BGTaskScheduler. Un ejemplo de registro y ejecución de una tarea de actualización de contenido. La aplicación debe registrar el identificador de la tarea en Info.plist y llamar a submit cuando la tarea deba programarse.

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 = {
        // Guardar datos intermedios
        cacheCurrentState()
    }
    fetchLatestData {
        task.setTaskCompleted(success: true)
    }
}

Background Processing Task

Para operaciones prolongadas (limpieza de caché, procesamiento de datos), use BGProcessingTask. El sistema concede hasta 10 minutos para la ejecución. Solo se ejecuta cuando el dispositivo está cargando y conectado a Wi-Fi. Requiere un identificador separado en Info.plist y registro a través de 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)
}

Comparación de enfoques Android e iOS

Android e iOS difieren fundamentalmente en su filosofía de ejecución en segundo plano. Android ofrece herramientas flexibles con mayor control, pero requiere que el desarrollador elija la API correcta. iOS limita las capacidades pero garantiza un rendimiento estable y autonomía para el usuario.

CriterioAndroidiOS
API recomendadaWorkManagerBGTaskScheduler
Tiempo máximo de tareaSin límite (Foreground Service)30 s / 10 min (processing)
Tareas periódicasSí, mediante PeriodicWorkRequestSí, mediante BGAppRefreshTask
Garantía de ejecuciónSí, incluso tras reinicioNo — el sistema decide cuándo
Acceso a red en segundo planoLimitado por modo DozeMediante URLSession con background config
Geolocalización en segundo planoForeground Service + permisoBackground Mode location + NSLocation
Audio en segundo planoForeground Service con notificación multimediaBackground Mode audio + AVAudioSession

Cuándo elegir Android WorkManager

WorkManager es óptimo para tareas que deben completarse independientemente del estado de la aplicación: sincronización de datos, envío de análisis, procesamiento de colas. La API garantiza la ejecución incluso tras apagar el dispositivo — la tarea se reprograma después del inicio.

Cuándo elegir iOS BGTaskScheduler

BGTaskScheduler es adecuado para tareas que el sistema puede realizar en cualquier momento conveniente: descargar contenido nuevo, actualizar widgets, limpiar caché. No es adecuado para operaciones urgentes — el sistema retrasa la tarea si el dispositivo está en Doze o tiene poca batería.

Preguntas Frecuentes

¿Cuál es la diferencia entre Background Execution y Background Modes?

Background Execution es un concepto general que describe cualquier código que se ejecuta en segundo plano. Background Modes es un mecanismo específico de iOS que permite a una aplicación realizar ciertos tipos de operaciones en segundo plano: audio, geolocalización, VoIP, fetch. Android utiliza un enfoque similar mediante tipos de Foreground Service.

¿Por qué mi aplicación termina después de 30 segundos en segundo plano?

En iOS, este es el límite estándar para BGAppRefreshTask. El sistema finaliza forzosamente la tarea al alcanzar el límite. En Android, ocurre una situación similar cuando la aplicación no usa WorkManager o Foreground Service — un Service normal es terminado por el sistema al pasar a segundo plano.

¿Cómo garantizar la ejecución de una tarea en ambas plataformas?

En Android, use WorkManager — garantiza la ejecución incluso tras reinicio. En iOS, la ejecución no se puede garantizar — el sistema decide cuándo ejecutar la tarea. La única forma de garantizar la ejecución es usar Background Modes (audio, location) con un indicador visible para el usuario.

¿Cómo comprobar si la ejecución en segundo plano está permitida?

En iOS, llame a UIApplication.shared.backgroundRefreshStatus — estado .available, .denied o .restricted. En Android, use PowerManager.isIgnoringBatteryOptimizations() para verificar la exención de optimización de batería. Para WorkManager no se requiere verificación — la API maneja las restricciones del sistema por sí misma.

¿Qué alternativas existen a la ejecución en segundo plano?

Las notificaciones Push son el mecanismo principal para desencadenar acciones sin código en segundo plano. En iOS, están disponibles PushKit para VoIP y Silent Push para actualización de datos. En Android — High Priority FCM y Notification Trampoline. WebSockets a través de Foreground Service es una alternativa para aplicaciones en tiempo real.

Resumen

  • Background Execution — mecanismo para ejecutar código cuando la aplicación está minimizada, crítico para sincronización, descarga y notificaciones.
  • Android ofrece WorkManager (ejecución garantizada), Foreground Service (tareas visibles prolongadas) y restricciones del modo Doze.
  • iOS utiliza BGTaskScheduler (planificación), Background App Refresh (actualizaciones periódicas) y Background Modes para multimedia y geolocalización.
  • Consumo de energía — la razón principal de las limitaciones: los procesos en segundo plano no optimizados reducen la duración de la batería entre un 20 y un 30%.
  • Privacidad — ambas plataformas requieren permisos explícitos (Android POST_NOTIFICATIONS, iOS Background Modes) y notificación al usuario.
  • WorkManager es la única API con garantía de ejecución tras reinicio; BGTaskScheduler depende de las decisiones del sistema.
  • Use Foreground Service en Android y Background Modes en iOS para operaciones prolongadas visibles para el usuario en la barra de estado.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también