Android: Activity

Le applicazioni si basano su elementi denominati Activity che cooperano tra loro o che possono essere indipendenti l’una dalle altre.

Se vogliamo utilizzare un paragone molto grossolano potremo paragonare le activity di una applicazione android alle varie finestre di una normale applicazione per PC.

Come azione predefinita, activity occupa tutta la window a disposizione ma potremo sempre restringere a piacimento l’area in cui verrà visualizzata.

Gli elementi presenti nelle activity sono componenti con cui l’utente è solito interagire come pulsanti, check e radio button, text area, progress bar, ecc… .

Cos’è un’Activity

Un’activity è in parole povere una finestra che contiene l’interfaccia
dell’applicazione.

Lo scopo principale di un’activity è gestire l’interazione tra l’utente e l’applicazione.

Dal momento in cui lanciamo l’applicazione fino al momento in cui la mandiamo in background, l’activity passa attraverso varie fasi, da qui il ciclo di vita di un’app android.

Capire il ciclo di vita di un’activity è fondamentale per assicurare un corretto funzionamento della nostra applicazione.

Ciclo di vita dell’activity

Il ciclo di vita di una activity è un
concetto molto importante e di cui
dovremo tener conto durante lo
sviluppo di una applicazione

Nell’immagine possiamo vedere
graficamente quali sono gli stati che
può assumere un’activity e quali
sono le transazioni che possono
portare da uno stato all’altro.

Ciclo Activity
Ciclo Activity

Ciclo di vita

  • onCreate() — chiamato quando l’activity viene lanciata per la prima volta.
  • onStart() — chiamato quando l’activity diventa visibile all’utente.
  • onResume() — chiamato quando l’activity inizia ad interagire con l’utente.
  • onPause() — chiamato quando l’attuale activity viene messa in pausa e un’activity precedente viene ripristinata.
  • onStop() — chiamato quando l’activity non è più visibile all’utente.
  • onDestroy() — chiamato prima che l’activity venga distrutta (manualmente o dal sistema operativo per
  • liberare memoria).
  • onRestart() — chiamato dopo che l’activity era stata stoppata e quando è pronta ad essere ripristinata.

Quando un’activity esiste, gli stati fondamentali che può assumere sono 3:

  • Resumed (Running) : l’activity è visualizzata sullo schermo e ha il focus dell’utente.
  • Paused: in questo caso è possibile che l’activity sia visualizzata ma un’altra assume il
  • focus e il controllo dell’utente. Esempio: cliccando sul pulsante dell’activity A, viene
  • visualizzata l’activity B per una scelta obbligatoria prima di proseguire con A.
  • Stopped: in questo caso l’activity non è più visualizzabile dall’utente e nel caso in cui
  • la memoria stia per esaurirsi il sistema potrà decidere di distruggerla (kill).

OnCreate

Questo metodo viene chiamato quando l’attività sta iniziando.

E’ il punto in cui la maggior parte di inizializzazione devono esser svolti chiamando setContentView(int) per riempire l’activity dell’utente e utilizzando findViewById(int) consente di interagire a livello di codice con i widget nell’interfaccia utente.

Se l’attività viene reinizializzata dopo essere stata arrestata allora questo bundle contiene i dati che più recentemente fornito in onSaveInstanceState (bundle).

Dettagli sulle Activity

Il ripristino di una Activity dopo una pausa è reso possibile dalla chiamata, automatica, a onSaveInstanceState() che utilizza l’oggetto Bundle passato da onCreate per mantenere le informazioni necessarie al ripristino.

Nota: alla rotazione dello schermo è associata una coppia di eventi pause/resume.

Video su YouTube

Codice completo


import android.os.Bundle;
import android.util.Log;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        Log.e("STATO","OnCreate Stato");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e("STATO","onStart Stato");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e("STATO","onResume Stato");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e("STATO","onPause Stato");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e("STATO","onStop Stato");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e("STATO","onDestroy Stato");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e("STATO","onRestart Stato");
    }
}

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Share via
Copy link
Verificato da MonsterInsights