Ciclul de viață în dezvoltarea mobilă: ce este, ce etape și cum funcționează

Autor: IT Sectr Publicat: 2026-03-02 Timp de citire: 9 min

Ciclul de viață al unei aplicații mobile determină cum se comportă la pornire, minimizare, revenire din fundal și închidere. În acest articol, vom aborda App Lifecycle (iOS), Activity Lifecycle (Android), Fragment Lifecycle, ViewController Lifecycle și LifecycleOwner. Înțelegerea acestor procese este esențială pentru prevenirea scurgerilor de memorie, a pierderii de date și a funcționării incorecte a aplicației. Mai multe detalii în documentația oficială Android Activity Lifecycle.

Puncte cheie

  • Activity Lifecycle (Android) include 7 metode: onCreate → onStart → onResume → onPause → onStop → onDestroy + onRestart
  • ViewController Lifecycle (iOS) este apelat în ordine: viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear
  • iOS App Lifecycle are 5 stări: Not Running, Inactive, Active, Background, Suspended
  • Fragment Lifecycle este legat de Activity, dar are propriile metode: onAttach, onCreateView, onViewCreated
  • LifecycleOwner (Android) permite abonarea la evenimentele ciclului de viață prin LifecycleObserver

Ciclul de viață al aplicației (App Lifecycle)

Înainte de a analiza ciclul de viață al ecranelor individuale, este important să înțelegem ciclul de viață al întregii aplicații. În iOS, aplicația trece prin cinci stări: Not Running (nu rulează), Inactive (în fundal, nu primește evenimente), Active (activă), Background (în fundal, codul se execută) și Suspended (în fundal, codul este suspendat). Aceste stări sunt gestionate în AppDelegate prin metodele applicationDidFinishLaunching, applicationDidBecomeActive, applicationWillResignActive, applicationDidEnterBackground și applicationWillTerminate.

În Android, echivalentul este Application Lifecycle, urmărit prin interfața Application.ActivityLifecycleCallbacks. Cu toate acestea, Android se concentrează mai mult pe ciclul de viață al unei Activity — un ecran individual al aplicației. Aceasta deoarece o aplicație Android poate consta din mai multe Activities, fiecare cu propriul ciclu.

Abordarea modernă în Android este utilizarea ProcessLifecycleOwner din biblioteca lifecycle-process. Acesta permite urmărirea stării întregului proces fără a fi legat de o anumită Activity. În iOS, UISceneDelegate (de la iOS 13) sau AppDelegate este folosit pentru urmărirea stării aplicației. SceneDelegate gestionează mai multe ferestre (multiwindow) pe iPad. Înțelegerea App Lifecycle este deosebit de importantă pentru IT Sectr la dezvoltarea aplicațiilor cu sincronizare în fundal, streaming și apeluri VoIP.

Activity Lifecycle în Android

Activity este componenta de bază a unei aplicații Android, reprezentând un ecran. Activity are un ciclu de viață clar definit gestionat de sistemul de operare ca răspuns la acțiunile utilizatorului și evenimentele sistemului (rotirea ecranului, apel primit, memorie insuficientă).

Metodă Descriere Ce să faci
onCreateApelat o dată la crearea ActivityInițializare UI, findViewById, configurare ViewModel
onStartActivity devine vizibilăPornire animații, înregistrare BroadCastReceiver
onResumeActivity primește focalizarea de intrarePornire cameră, senzori, animații
onPauseActivity pierde focalizarea (parțial vizibilă)Salvare ciorne, oprire animații
onStopActivity nu este vizibilăEliberare resurse, oprire actualizări
onDestroyActivity este distrusăCurățare toate referințele, dezabonare de la LiveData
onRestartApelat înainte de onStart după onStopReinițializare

Important: onSaveInstanceState este apelat înainte de onStop pentru a salva starea temporară. Restaurarea are loc în onCreate prin Bundle savedInstanceState sau prin SavedStateHandle în ViewModel. Fără o gestionare corectă a ciclului de viață, aplicația va pierde toate datele nesalvate la rotirea ecranului.

kotlin
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("draft", draftText)
    }
    override fun onDestroy() {
        super.onDestroy()
        // Отписка от всех подписок
    }
}

Activity Lifecycle în Jetpack Compose

În Jetpack Compose, ciclul de viață al Activity rămâne neschimbat, dar Compuse oferă instrumente suplimentare: Compoziție conștientă de ciclul de viață prin LifecycleOwner, efectele LifecycleEventEffect și DisposableEffect pentru curățarea automată a resurselor la distrugere.

Fragment Lifecycle în detaliu

Fragment în Android trăiește în interiorul unei Activity și are propriul ciclu de viață, care se suprapune parțial cu cel al Activity, dar adaugă metode noi. Fragmentele pot fi adăugate, înlocuite, eliminate fără a distruge Activity, făcându-le mai flexibile, dar și mai complexe.

Metodele cheie ale Fragment Lifecycle: onAttach — Fragment atașat la Activity (primul apel); onCreate — inițializare date; onCreateView — crearea View; onViewCreated — View creată, UI poate fi configurat; onStart — Fragment vizibil; onResume — Fragment în focalizare; onPause — Fragment pierde focalizarea; onStop — Fragment nu este vizibil; onDestroyView — View distrusă; onDestroy — Fragment distrus; onDetach — Fragment detașat de Activity.

Diferența cheie față de Activity: onCreateView și onDestroyView pot fi apelate de mai multe ori (de exemplu, la comutarea TabLayout), în timp ce onCreate este apelat o singură dată. Prin urmare, inițializarea View trebuie făcută în onViewCreated, nu în onCreateView. Resursele legate de View (cum ar fi adaptoarele RecyclerView) trebuie curățate în onDestroyView.

ViewController Lifecycle în iOS

UIViewController este clasa de bază pentru gestionarea ecranelor în iOS. Ciclul său de viață constă dintr-o secvență de metode pe care UIKit le apelează automat. Înțelegerea acestui ciclu este esențială pentru inițializarea corectă a UI, gestionarea datelor și a memoriei.

Metodă Când este apelată Utilizare tipică
loadViewCând View Controller încarcă ierarhia sa ViewInițializare personalizată fără storyboard
viewDidLoadDupă încărcarea View în memorie (o dată)Configurare UI, încărcare date inițiale
viewWillAppearÎnainte ca View să apară pe ecranActualizare date, abonare la notificări
viewDidAppearDupă ce View apare pe ecranPornire animații, pornire animații de urmărire
viewWillDisappearÎnainte ca View să dispară de pe ecranSalvare stare, dezabonare de la notificări
viewDidDisappearDupă ce View dispare de pe ecranOprire animații, eliberare resurse
deallocCând View Controller este distrusEliberare toate resursele

Important: viewDidLoad este apelat o singură dată în viața View Controller. Pentru a actualiza datele la fiecare apariție, utilizați viewWillAppear. Dacă vă abonați la NotificationCenter în viewWillAppear, asigurați-vă că vă dezabonați în viewDidDisappear pentru a evita scurgerile de memorie.

SwiftUI Lifecycle

SwiftUI gestionează ciclul de viață al View-urilor prin structuri View. În locul metodelor de callback, SwiftUI utilizează modificatorii onAppear și onDisappear. Pentru stări globale ale aplicației, se utilizează App Lifecycle prin protocoalele App și Scene. SwiftUI gestionează automat crearea și distrugerea View-urilor pe bază de stare, simplificând dezvoltarea, dar necesitând înțelegerea identității și duratei de viață a View-urilor.

swift
struct ContentView: View {
    var body: some View {
        Text("Hello")
            .onAppear {
                print("View появилась")
            }
            .onDisappear {
                print("View исчезла")
            }
    }
}

LifecycleOwner și LifecycleObserver în Android

LifecycleOwner este o interfață din Android Architecture Components care marchează un obiect având un ciclu de viață (Activity, Fragment). LifecycleObserver este o interfață care permite unui obiect să se aboneze la evenimentele LifecycleOwner. Împreună, ele formează baza gestionării reactive a ciclului de viață în dezvoltarea modernă Android.

În loc să apelați metode explicit în onStart/onStop, se recomandă utilizarea DefaultLifecycleObserver (înlocuitor pentru LifecycleObserver învechit cu adnotări @OnLifecycleEvent). Aceasta este abordarea promovată de Google pentru ViewModel și alte componente care trebuie să reacționeze la ciclul de viață fără a avea referințe directe la Activity sau Fragment.

kotlin
class MyObserver : DefaultLifecycleObserver {
    override fun onStart(owner: LifecycleOwner) {
        // Подписка на обновления
    }
    override fun onStop(owner: LifecycleOwner) {
        // Отписка
    }
}

La IT Sectr, folosim LifecycleOwner în toate proiectele Android. ViewModel se abonează la LifecycleOwner al Activity prin viewModelScope și lifecycleScope, garantând anularea automată a corutinelor la distrugerea Activity. Acest lucru previne scurgerile de memorie și face codul mai curat și mai sigur.

Întrebări frecvente

Ce stări parcurge o Activity în Android?

Activity trece prin șase stări: Created (onCreate), Started (onStart), Resumed (onResume), Paused (onPause), Stopped (onStop), Destroyed (onDestroy).

În ce ordine sunt apelate metodele ViewController Lifecycle în iOS?

Ordinea: loadView → viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear. viewDidLoad este apelat o dată.

Ce este LifecycleOwner în Android?

LifecycleOwner este o componentă a Android Architecture Components care deține ciclul de viață al unei Activity sau al unui Fragment. Permite abonarea la evenimente prin LifecycleObserver.

Ce stări are App Lifecycle în iOS?

Aplicația iOS trece prin cinci stări: Not Running, Inactive, Active, Background, Suspended. Tranzițiile sunt gestionate prin UIApplicationDelegate.

Ce este Saved State în Android?

Saved State este mecanismul Android pentru păstrarea stării Activity/Fragment la rotirea ecranului sau recrearea procesului. Folosește onSaveInstanceState și SavedStateHandle.

Rezumat

  • Activity Lifecycle în Android (onCreate → onDestroy) — fundamentul gestionării stării ecranului
  • iOS ViewController Lifecycle (viewDidLoad → viewDidDisappear) — cheia funcționării corecte a UIKit
  • Fragment Lifecycle este mai complex decât Activity din cauza onAttach/onDetach și onCreateView/onDestroyView
  • LifecycleOwner (Android) permite abonarea reactivă la evenimente fără scurgeri de memorie
  • App Lifecycle gestionează starea întregii aplicații (Active, Background, Suspended)
  • SwiftUI folosește onAppear și onDisappear în locul metodelor tradiționale ViewController
  • Gestionarea corectă a ciclului de viață previne până la 80% din defecțiunile tipice ale aplicațiilor mobile

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