Activity — ce este, ecranul aplicației în Android și Lifecycle-ul său

Autor: IT Sectr Publicat: 2026-02-22 Timp de citire: 7 min

Activity — componenta de bază a aplicației Android, reprezentând un ecran cu interfață de utilizator. Sistemul gestionează ecranele printr-un ciclu de viață strict — callback-urile onCreate, onResume și onDestroy. Fiecare Activity este declarat în AndroidManifest.xml și lansat prin Intent. Citiți mai multe despre istoria Android în documentația oficială Google.

Principalele puncte

  • Activity — componenta Android care reprezintă un ecran cu UI. Gestionat prin Lifecycle
  • Ciclul de viață include 6 callback-uri: onCreate, onStart, onResume, onPause, onStop, onDestroy
  • Intent — mecanism de lansare a Activity și transmitere a datelor între ecrane
  • Manifest — înregistrarea obligatorie a fiecărui Activity în AndroidManifest.xml
  • ViewModel — componenta Jetpack pentru păstrarea datelor la recrearea Activity

Ce este Activity?

Activity — componenta cheie a aplicației Android, oferind o fereastră pentru interacțiunea cu utilizatorul. Fiecare Activity gestionează un ecran separat: lista de sarcini, formularul de autentificare, vizualizarea foto. Sistemul Android creează Activity la cerere și îl distruge când memoria este necesară altor aplicații.

Activity a apărut pentru prima dată în Android 1.0 (2008) și rămâne blocul principal de construcție al interfeței. Conform Google (2026), 98% din aplicațiile din Google Play conțin cel puțin un Activity. În arhitectura modernă, Google recomandă un Activity cu mai multe Fragment, însă aplicația clasică cu mai multe ecrane rămâne o practică răspândită.

Activity stack (back stack) — stiva de sarcini care stochează istoricul navigării. Când utilizatorul apasă „Înapoi”, Activity-ul curent este distrus și cel anterior este restaurat. Sistemul gestionează stiva automat, dar dezvoltatorul poate controla comportamentul prin launchMode și flag-uri Intent.

Ciclul de viață al Activity

Ciclul de viață al Activity — setul de stări și callback-uri prin care trece ecranul de la creare la distrugere. Înțelegerea Lifecycle este critică: lucrul incorect cu stările duce la scurgeri de memorie, pierderi de date și crash-uri ale aplicației.

Sistemul Android apelează callback-urile într-o ordine strictă. Dezvoltatorul suprascrie metodele necesare pentru a inițializa resurse, a salva date și a elibera memoria. Fiecărui callback îi corespunde o pereche: onCreate ↔ onDestroy, onStart ↔ onStop, onResume ↔ onPause.

CallbackDestinațieAcțiunea dezvoltatorului
onCreateApelat la crearea ActivityInițializarea UI, abonarea la ViewModel
onStartActivity devine vizibilPornirea animațiilor, camerei, GPS
onResumeActivity primește focalizareaReluarea videoclipului, timerelor
onPauseActivity pierde focalizareaSalvarea ciornelor, oprirea animațiilor
onStopActivity ascuns de alt ecranEliberarea resurselor grele
onDestroyActivity este distrusCurățarea abonamentelor, Closeable

Stările Activity

Se disting patru stări ale Activity: Running (onResume activ), Paused (vizibil, dar fără focalizare), Stopped (invizibil), Destroyed (distrus). Sistemul poate kill-ui Activity în starea Stopped la lipsa de memorie — datele trebuie salvate în onSaveInstanceState.

Metodele ciclului de viață: onCreate, onStart, onResume

Să examinăm trei metode cheie ale ciclului de viață Activity cu un exemplu în Kotlin. onCreate — punctul de intrare, apelat o singură dată. Aici are loc legarea layout-ului prin setContentView, inițializarea RecyclerView, abonarea la LiveData. onStart — Activity devine vizibil pentru utilizator. onResume — Activity primește focalizarea și este gata de interacțiune.

kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val recyclerView = findViewById<RecyclerView>(R.id.rv_items)
        recyclerView.layoutManager = LinearLayoutManager(this)
        loadItems()
    }

    override fun onStart() {
        super.onStart()
        startLocationUpdates()
    }

    override fun onResume() {
        super.onResume()
        resumeVideoPlayer()
    }
}

În exemplu, onCreate inițializează RecyclerView și încarcă datele. onStart pornește actualizarea geolocației — o resursă care ar trebui să funcționeze doar când ecranul este vizibil. onResume reia videoclipul oprit în onPause. O astfel de separare previne munca inutilă în fundal.

Declararea Activity în AndroidManifest.xml

Fiecare Activity trebuie declarat în fișierul AndroidManifest.xml. Fără înregistrare, sistemul nu va găsi ecranul și va arunca excepția ActivityNotFoundException. În manifest se specifică numele clasei, tema, orientarea, launchMode și filtrele Intent.

xml
<application
    android:allowBackup="true"
    android:label="@string/app_name"
    android:theme="@style/Theme.MyApp">

    <activity
        android:name=".MainActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".DetailActivity"
        android:parentActivityName=".MainActivity" />
</application>

Indicatorul exported determină dacă alte aplicații pot lansa Activity. Pentru ecranul principal exported=true, pentru ecranele interne — false. Atributul parentActivityName activează navigarea standard „În sus” (Up Navigation).

Lansarea Activity prin Intent

Intent — un obiect care descrie o acțiune de executat. În contextul Activity, Intent este folosit pentru a lansa un alt ecran cu transmiterea de date. Intent poate fi explicit (indică o clasă specifică) și implicit (indică o acțiune, sistemul selectează componentul potrivit).

kotlin
// Intent explicit — lansarea DetailActivity cu date
val intent = Intent(this, DetailActivity::class.java).apply {
    putExtra("item_id", itemId)
    putExtra("item_name", itemName)
}
startActivity(intent)

// Primirea datelor în DetailActivity
val itemId = intent.getLongExtra("item_id", 0L)
val itemName = intent.getStringExtra("item_name") ?: ""

Pentru a primi rezultatul de la Activity-ul lansat se folosește Activity Result API, care a înlocuit startActivityForResult învechit. Noul API este type-safe, declarativ și funcționează cu Jetpack Compose.

kotlin
private val getResult = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult()
) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        val data = result.data?.getStringExtra("result_key")
    }
}

fun openPicker() {
    val intent = Intent(this, PickerActivity::class.java)
    getResult.launch(intent)
}

Salvarea stării la recreare

La rotirea ecranului sau schimbarea configurației, Android recrează Activity — apelează secvențial onDestroy și onCreate. Fără salvarea stării, utilizatorul pierde datele introduse, poziția de scroll și elementele selectate. Pentru a rezolva această problemă, Android oferă două mecanisme: onSaveInstanceState și ViewModel.

onSaveInstanceState salvează date simple în Bundle înainte de apelarea onDestroy. ViewModel din Jetpack rezistă la recrearea Activity și păstrează datele în memorie, ceea ce este mai eficient pentru obiecte complexe și cereri de rețea.

kotlin
class MainActivity : AppCompatActivity() {

    private val viewModel: MainViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // ViewModel salvează automat datele
        viewModel.items.observe(this) { items ->
            updateAdapter(items)
        }
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putInt("scroll_position", recyclerView.computeVerticalScrollOffset())
    }
}

Arhitectura Single Activity și Jetpack

Abordarea modernă Google — arhitectura Single Activity cu un Activity și mai multe Fragment. Aplicația folosește un MainActivity, iar toată navigarea este realizată de Navigation Component prin NavHostFragment. Avantaje: navigare centralizată, ViewModel comun pe ecran, lucru corect cu Deep Links.

Jetpack Navigation Component automatizează lucrul cu back stack, animațiile de tranziție și transmiterea argumentelor. NavHostFragment este plasat în layout-ul Activity, iar graful de navigare (NavGraph) descrie toate ecranele și conexiunile dintre ele. Această abordare este recomandată de Google pentru proiecte noi și corespunde principiilor Material Design.

kotlin
class MainActivity : AppCompatActivity() {

    private val navController by lazy {
        findViewById<NavHostFragment>(R.id.nav_host_fragment)
            .navController
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Configurarea NavigationUI pentru AppBar
        setupActionBarWithNavController(navController)
    }

    override fun onSupportNavigateUp() = 
        navController.navigateUp() || super.onSupportNavigateUp()
}

Întrebări frecvente

Cu ce diferă Activity de Fragment?

Activity — un ecran complet al aplicației cu propriul ciclu de viață. Fragment — o parte a UI-ului în interiorul Activity, care supraviețuiește recreării Activity și depinde de Lifecycle-ul său. Activity este obligatoriu, Fragment opțional.

Câte Activity pot fi într-o singură aplicație?

Nu există limitări. Fiecare ecran reprezintă de obicei un Activity separat. Pentru o aplicație simplă este suficient unul, pentru cele cu mai multe ecrane — de la 5 la 20. Google recomandă un Activity cu mai multe Fragment.

Ce este launchMode în Activity?

launchMode determină cum este creat Activity în stiva de sarcini. Patru moduri: standard (se creează o nouă instanță), singleTop, singleTask (o singură instanță în sarcină) și singleInstance (sarcină izolată). Modul se setează în AndroidManifest.xml.

Cum se transmit date între Activity?

Prin Intent — un obiect cu extra-uri (putExtra) în care se plasează primitive, stringuri, Parcelable sau Serializable. Pentru feedback se folosește Activity Result API — înlocuitorul modern type-safe pentru startActivityForResult.

Ce este Configuration Change în Android?

Configuration Change — recrearea Activity la schimbarea configurației (rotirea ecranului, schimbarea limbii, tastatură). Sistemul apelează onDestroy → onCreate. Pentru salvarea datelor se folosește onSaveInstanceState sau ViewModel din Jetpack.

Concluzii

  • Activity — componenta de bază Android care reprezintă un ecran cu interfață de utilizator și este gestionat prin ciclul de viață
  • Ciclul de viață constă din șase callback-uri: onCreate, onStart, onResume, onPause, onStop, onDestroy — fiecare având o destinație strictă
  • Intent asigură lansarea Activity și transmiterea datelor între ecrane prin apeluri explicite și implicite
  • AndroidManifest.xml necesită înregistrarea obligatorie a fiecărui Activity cu numele, tema, orientarea și filtrele
  • ViewModel din Jetpack păstrează datele la recrearea Activity, înlocuind salvarea manuală în onSaveInstanceState
  • Arhitectura Single Activity cu Navigation Component — standardul modern recomandat de Google pentru proiecte Android
  • launchMode gestionează comportamentul Activity în stiva de sarcini: de la standard la singleInstance pentru ecrane izolate

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

Citiți și