Sarcini în fundal în dezvoltarea mobilă: ce sunt, tipuri și cum funcționează

Autor: IT Sectr Publicat: 2026-03-22 Timp de citire: 10 min

Încărcarea datelor, sincronizarea conținutului, trimiterea analizelor — multe sarcini nu necesită participarea activă a utilizatorului. Cu toate acestea, dispozitivele mobile limitează munca în fundal pentru a economisi bateria și a menține performanța. Sarcinile în fundal (background tasks) sunt mecanisme care permit unei aplicații să execute cod atunci când utilizatorul nu o vede. În acest articol vom analiza WorkManager, BGTaskScheduler, Foreground Service și particularitățile Doze Mode. Mai multe detalii în documentația oficială WorkManager.

Puncte cheie

  • WorkManager — standardul pentru sarcini în fundal pe Android (Jetpack)
  • BGTaskScheduler — API-ul modern pentru sarcini în fundal pe iOS (iOS 13+)
  • Foreground Service — pentru sarcini pe care utilizatorul le vede (muzică, GPS)
  • Doze Mode și App Standby — moduri de economisire a energiei care limitează munca în fundal
  • Pe ambele platforme, sistemul limitează execuția în fundal; dezvoltatorul trebuie să aleagă API-ul corect
  • JobScheduler — API vechi pentru Android 5+; se recomandă migrarea la WorkManager

Ce sunt sarcinile în fundal?

O sarcină în fundal este orice cod executat atunci când aplicația nu este în prim-plan (ecran activ). Aceasta poate include: sincronizarea periodică a datelor cu serverul, descărcarea fișierelor mari, procesarea notificărilor push, urmărirea geolocației, actualizarea widgeturilor. Fiecare platformă are propriile restricții privind munca în fundal: iOS este mai strict (10–30 minute de timp în fundal), Android este mai permisiv dar a înăsprit regulile de la versiunea 9.

Arhitectura sarcinilor în fundal se bazează pe trei niveluri: (1) sarcini imediate — se execută imediat (Foreground Service); (2) sarcini amânate — se execută în condiții potrivite (WorkManager, BGTaskScheduler); (3) sarcini periodice — se repetă la un interval stabilit. Alegerea nivelului corect determină dacă sarcina va fi finalizată la timp și dacă va duce la respingerea aplicației din magazin.

Pe ambele platforme, Google/Apple recomandă insistent utilizarea API-urilor declarative în locul gestionării directe a firelor de execuție în fundal. WorkManager pe Android și BGTaskScheduler pe iOS permit sistemului să distribuie optim munca în fundal între aplicații, grupând sarcinile pentru a economisi energie. La IT Sectr, începem întotdeauna proiectarea arhitecturii de fundal prin analiza cerințelor de frecvență și urgență a actualizărilor.

Sarcini în fundal pe iOS (Background Fetch, BGTaskScheduler)

iOS oferă mai multe mecanisme pentru munca în fundal. Background Fetch — actualizare periodică a conținutului cu un interval determinat de sistem (nu de dezvoltator). Aplicația primește o fereastră de ~30 de secunde pentru a descărca date noi. Background Fetch se activează prin Capabilities → Background Modes → Background Fetch și se implementează în AppDelegate: application(_:performFetchWithCompletionHandler:).

BGTaskScheduler este API-ul modern pentru iOS 13+, care înlocuiește Background Fetch. Dezvoltatorul înregistrează o sarcină cu un identificator, iar sistemul o execută când condițiile sunt potrivite. BGAppRefreshTask — pentru actualizări scurte de conținut; BGProcessingTask — pentru sarcini lungi (curățarea cache-ului, sincronizarea bazei de date). Sarcinile sunt înregistrate la pornirea aplicației, iar sistemul planifică execuția lor luând în considerare starea bateriei, rețeaua și activitatea utilizatorului.

Background Modes — o listă de moduri care permit munca în fundal pentru scenarii specifice: Audio (redare în fundal), Location (GPS), VoIP (apeluri prin PushKit), BLE (conectare la dispozitive Bluetooth), Processing (sarcini lungi prin BGTaskScheduler). Fiecare mod necesită justificare în timpul revizuirii App Store. Utilizarea modurilor fără necesitate reală este o cauză comună de respingere a aplicației.

Significant Location Change — un mecanism pentru aplicații care nu au nevoie de geolocație constantă, dar trebuie să știe despre mișcări semnificative ale utilizatorului (peste 500 de metri). Sistemul trezește aplicația la schimbarea turnului celular. Acest mecanism economisește semnificativ bateria în comparație cu GPS-ul constant.

Sarcini în fundal pe Android (WorkManager, JobScheduler, Foreground Service)

Android oferă cel mai bogat set de API-uri pentru sarcini în fundal, dar de la versiunea 8.0 (API 26) regulile au devenit mai stricte. WorkManager este soluția recomandată de Google pentru toate tipurile de sarcini în fundal. WorkManager garantează executarea sarcinii chiar și după repornirea dispozitivului (prin BootReceiver) și suportă lanțuri de sarcini, LiveData/Flow observabile și compatibilitate inversă până la API 14.

WorkManager folosește Worker — o clasă de bază cu metoda doWork(). Constraints definește condițiile de execuție: NetworkType.CONNECTED, BatteryNotLow, StorageNotLow. PeriodicWorkRequest — pentru sarcini periodice cu un interval minim de 15 minute. WorkManager se adaptează automat la Doze Mode și App Standby, grupând sarcinile în ferestre de întreținere. Exemplu de Worker simplu:

kotlin
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 — un API mai vechi (Android 5+, API 21). Planifică sarcini cu condiții specificate (rețea, încărcare, inactivitate). Limitare: nu suportă repornirea dispozitivului (necesită BootReceiver) și nu are stare observabilă. JobScheduler este potrivit pentru sarcini simple în proiecte moștenite; pentru proiecte noi, utilizați WorkManager.

Foreground Service — un serviciu pe care utilizatorul îl vede printr-o notificare persistentă (ongoing notification). Folosit pentru: redare muzică, urmărire GPS, descărcare fișiere mari. Foreground Service are prioritate ridicată — sistemul nu îl va ucide când memoria este insuficientă. Începând cu Android 13, este necesară permisiunea FOREGROUND_SERVICE_SPECIAL_USE pentru unele tipuri. O alternativă este WorkManager cu ForegroundServiceOption (sarcini lungi).

AlarmManager — pentru sarcini care trebuie executate la o oră exactă (alarmă, memento). AlarmManager poate trezi dispozitivul din Doze Mode (setAlarmClock). Nerecomandat pentru sincronizare regulată din cauza consumului mare de energie. Pentru sarcini periodice, utilizați WorkManager, iar AlarmManager numai când ora exactă este critică.

Scenariu iOS Android
Actualizare periodică conținutBGAppRefreshTask (BGTaskScheduler)WorkManager (PeriodicWorkRequest)
Sarcină lungă în fundalBGProcessingTaskWorkManager + ForegroundService
Redare audioBackground Audio ModeForeground Service
Urmărire GPSSignificant Location Change / Background LocationForeground Service + FusedLocationProvider
VoIP / ApeluriPushKit + CallKitConnectionService + Foreground Service
Ora exactă (alarmă)UNNotificationRequest (calendar)AlarmManager
Procesare push (fundal)Notification Service ExtensionFirebaseMessagingService (onMessageReceived)

Doze Mode și App Standby

Doze Mode este un mod de economisire a energiei în Android care afectează executarea sarcinilor în fundal. Introdus în Android 6.0 (API 23). Când dispozitivul nu se încarcă, ecranul este stins și dispozitivul este nemișcat, Doze Mode blochează cererile de rețea, amână JobScheduler și WakeLock. Periodic, Doze deschide ferestre de întreținere — intervale scurte în care aplicațiile pot executa sarcini amânate. De la Android 7.0 (API 24), Doze se activează când ecranul este stins, nu doar când este complet nemișcat.

App Standby — un mod în care aplicațiile neutilizate sunt puse în așteptare. Dacă o aplicație nu are notificări active și nu a fost deschisă de câteva zile, este plasată într-un Standby Bucket: activ (active), working, frequent, rare. Cu cât aplicația este mai puțin utilizată, cu atât restricțiile sunt mai stricte: cererile de rețea sunt amânate, sincronizarea este blocată, JobScheduler nu rulează.

WakeLock — un mecanism care menține dispozitivul treaz (împiedică adormirea). Folosit pentru a finaliza operațiuni importante. WakeLock trebuie eliberat (release) după finalizarea sarcinii, altfel bateria se va descărca în câteva ore. WakeLock nu funcționează în Doze Mode — sistemul îl ignoră. Lucrul cu WakeLock pe Android 8+ necesită permisiunea WAKE_LOCK și gestionarea corectă a ciclului de viață.

La IT Sectr, luăm în considerare Doze Mode și App Standby în faza de proiectare. WorkManager gestionează automat aceste moduri, dar pentru Foreground Service trebuie planificată gestionarea corectă a tranzițiilor către Doze. Se recomandă testarea muncii în fundal pe dispozitive reale cu modul de economisire a energiei activat și după perioade lungi de inactivitate.

Sfaturi practice

La proiectarea sarcinilor în fundal, urmați aceste sfaturi. 1. Utilizați întotdeauna WorkManager pentru proiecte Android noi. Rezolvă problemele de compatibilitate, Doze Mode și repornirea dispozitivului. 2. Pe iOS, preferați BGTaskScheduler în loc de Background Fetch pentru iOS 13+. 3. Utilizați Foreground Service numai când sarcina necesită cu adevărat o notificare vizibilă. 4. Nu abuzați de WakeLock — consumă bateria și poate duce la respingerea aplicației. 5. Testați sarcinile în fundal în Doze Mode: adb shell dumpsys deviceidle force-idle. 6. Verificați întotdeauna finalizarea sarcinii prin înregistrare și analize. 7. Amintiți-vă limitele: iOS oferă ~30 de secunde pentru Background Fetch și ~câteva minute pentru BGProcessingTask. Android WorkManager nu garantează un timp exact de execuție.

Întrebări frecvente

Care este diferența dintre Background Service și Foreground Service pe Android?

Background Service rulează fără o notificare vizibilă și poate fi ucis de sistem în orice moment. Foreground Service trebuie să afișeze o notificare persistentă (ongoing notification) și are prioritate mai mare. Foreground Service este folosit pentru redarea muzicii și urmărirea GPS.

Ce este Doze Mode și cum afectează sarcinile în fundal?

Doze Mode este un mod de economisire a energiei Android care dezactivează accesul la rețea și amână JobScheduler/WakeLock atunci când dispozitivul nu este utilizat. WorkManager se adaptează la Doze Mode automat.

Cum execut o sarcină în fundal pe iOS?

Pe iOS, sarcinile în fundal se execută prin Background Fetch (actualizări periodice), BGTaskScheduler (sarcini amânate) sau Background Modes (audio, VoIP, BLE, locație). BGTaskScheduler este API-ul modern pentru iOS 13+, care înlocuiește Background Fetch.

WorkManager sau JobScheduler: ce să alegeți?

WorkManager este soluția recomandată de Google pentru toate sarcinile în fundal pe Android. JobScheduler este un API mai vechi cu capacități limitate. WorkManager suportă lanțuri de sarcini, LiveData/Flow observabile și compatibilitate inversă până la API 14.

Ce este App Standby?

App Standby este un mod Android în care aplicațiile neutilizate sunt puse în stare de așteptare: cererile de rețea sunt amânate, sincronizarea este întreruptă. Dacă o aplicație nu este utilizată de câteva zile, Android o plasează într-un Standby Bucket (active, working, frequent, rare).

Rezumat

  • WorkManager — soluție universală pentru sarcini în fundal pe Android; se adaptează automat la Doze Mode
  • BGTaskScheduler — API modern pentru iOS 13+ (BGAppRefreshTask, BGProcessingTask)
  • Foreground Service — pentru sarcini vizibile utilizatorului cu notificare persistentă
  • Doze Mode și App Standby — obligatorii de luat în considerare; WorkManager le gestionează automat
  • JobScheduler și AlarmManager — pentru proiecte moștenite; în proiecte noi utilizați WorkManager
  • iOS restricționează munca în fundal mai strict decât Android — luați în considerare la proiectare
  • Testați întotdeauna sarcinile în fundal pe dispozitive reale în modul de economisire a energiei

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul