Le Attività in un’applicazione – Lezione 11 di Android


L’interazione con gli utenti e la gestione delle attività

Le attività sono i componenti di un’applicazione Android che consentono di interagire con l’utente che utilizza il dispositivo. Durante l’esecuzione di un’app, l’utente può visualizzare diverse schermate (activity) creando un vero e proprio stack di activity in cui l’utente può scegliere di tornare ad activity precedenti (con il tasto Indietro o con la lista delle applicazioni utilizzate di recente), possono essere interrotte (da eventi esterni) o possono essere sospese (ad esempio utilizzando il tasto Home).
In Android, l’utente può interagire solo con l’attività in cima allo stack, eventualmente può vedere activity sottostanti se l’attività in cima allo stack ha una propria interfaccia grafica.

Quando un’activity viene sospesa, anche l’intero stack di attività viene “sospeso”. Quando l’attività sospesa viene ripresa, se quest’ultima era in cima al suo stack viene riattivata quella specifica istanza con tutti i suoi dati, altrimenti se l’activity richiamata non si trovava in cima allo stack viene creata una nuova istanza dell’attività con un nuovo stack. Android offre ai programmatori la possibilità di scegliere il comportamento in fase di riavvio delle activity tramite il flag nell’activity che vengono lanciate o tramite l’Intent per le activity che lanciano altre attività:

  1. Standard, viene creata sempre una nuova istanza ogni qual volta viene richiamata l’attività;
  2. SingleTop, se l’attività era visualizzata dall’utente (top dello stack), riavvia l’istanza esistente; altrimenti crea una nuova istanza;
  3. SingleTask, può esistere una singola istanza di ogni activity. Se già è stata creata viene richiamata quell’istanza, altrimenti viene creata per la prima volta;
  4. SingleInstance, come sopra, ma se si crea un nuovo task, non consente di creare ulteriori activity all’interno dello stesso stack.

A differenza di altri linguaggi di programmazioni, un’applicazione Android non esiste un main, ogni activity può essere un potenziale main se dichiara di accettare l’Intent MAIN/LAUNCHER:

  <intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>

Come avviare e terminare le attività in un’app Android

In Android, un’activity può essere avviati in diversi modi:

  1. Explicit Intent, indicandone la classe:
      Intent intent = new Intent(this, miaActivity.class);
      startActivity(intent);

  2. Implicit Intent, indicandone l’azione:
      Intent intent = new Intent(Intent.ACTION_...);
      startActivity(intent);

Per poter terminare, un’activity può invocare il metodo finish(), inoltre richiamando setResult() prima di finish() si può sabilire il valore di ritorno dell’attività. Per poter uccidere un’altra activity (lanciata con startActivityForResult(intent, cod)) si può utilizzare il metodo finishActivity(cod).
In caso di necessità anche il sistema può uccidere delle activity (solo se non sono in esecuzione) per liberare risorse. La scelta su quali attività uccidere per poter liberare memoria, Android consente di assegnare alle attività un livello di priorità, ne esistono di 3 tipi:

  1. Priorità critica, attività che non possono essere uccise per nessun motivo (ad esempio le activity in cima allo stack corrente);
  2. Priorità alta, uccisi solo se necessario (activity visibili solo tramite le trasparenze di quella in uso);
  3. Priorità bassa, vengono uccisi quelli meno utilizzati di recente,
  4. Activity non visibili, su tratta della attività in fondo allo stack corrente;
  5. Activity non visibili, attività presenti in altri stack.

Per questi motivi, Android mette a disposizione dei metodi che consentono, quando necessario, di salvare e ripristinare le activity che sono state uccise in precedenza.

In Android può essere eseguita un’unica activity alla volta con cui l’utente interagisce, non è possibile poter eseguire più attività contemporaneamente per una questione pratica, in genere lo schermo degli device Android sono piccoli, non avrebbe senso affiancare due o più finestre; senza contare che le risorse dei dispositivi sono limitate, non riuscirebbero a supportare più activity contemporaneamente.

Tutte le attività non utilizzate ma presenti in memoria vengono ibernate e nascoste in sottofondo pronte ad essere riutilizzate quando richieste. Un activity in esecuzione può essere ibernata da parte del sistema a causa di eventi esterni (vedi una chiamata in arrivo) e verrà ripristinata non appena possibile dal punto in cui la si era lasciata. In Android la maggior parte delle applicazioni non hanno nessun tasto d’uscita, questo poichè le applicazioni che vengono ibernate non consumano risorse. Quando un’activity viene ibernata non consuma nulla in termini di risorse di calcolo. Le attività ibernate possono morire in diversi casi:

  1. Spontaneamente perché hanno terminato il loro lavoro;
  2. Possono essere uccise con dei task manager;
  3. Possono essere distrutte dal sistema in due casi:
    1. L’attività non è più utile e viene distrutta;
    2. E’ necessario liberare spazio e memoria e il sistema decide arbitrariamente di uccidere le attività in sottofondo.

Indice Lezione PrecedenteLezione Successiva

Pubblicato in Android, Android, Google, Guide, Informatica, Programmazione Taggato con: , , , , , , , ,

Lascia un commento

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

*