Introduzione alle attività

La classe Activity è un componente fondamentale di un Android app e il modo in cui le attività vengono avviate e condotte è un aspetto fondamentale parte del modello di applicazione della piattaforma. A differenza dei paradigmi di programmazione quali app vengono lanciate con un metodo main(), Android avvia il codice in un'istanza Activity tramite richiamando metodi specifici di callback che corrispondono a fasi specifiche durante il suo ciclo di vita.

Questo documento introduce il concetto di attività, fornendo poi alcuni e leggere indicazioni su come utilizzarle. Per ulteriori informazioni sulle best practice per progettare la tua app, vedi Guida all'architettura delle app.

Il concetto di attività

L'esperienza su app mobile è diversa dalla controparte per computer desktop in quanto l'interazione di un utente con l'app non inizia sempre dallo stesso punto. Al contrario, il percorso dell'utente spesso inizia in modo non deterministico. Ad esempio, se apri un'app email dalla schermata Home, potrebbe essere visualizzata elenco di email. Al contrario, se utilizzi un'app di social media che avvia la tua app email, potresti andare direttamente alla schermata dell'app email scrivere un'email.

Il corso Activity è progettato per facilitare questo paradigma. Quando un'app richiama un'altra, l'app chiamante richiama un'attività nell'altra piuttosto che l'app come un intero atomico. In questo modo, l'attività il punto di accesso per l'interazione di un'app con l'utente. Implementi un attività come sottoclasse della classe Activity.

Un'attività fornisce la finestra in cui l'app disegna della relativa UI. Questa finestra in genere riempie lo schermo, ma potrebbe essere più piccola del schermo e fluttuano sopra altre finestre. In genere, un'attività implementa una schermata in un'app. Ad esempio, una delle attività di un'app implementare una schermata Preferenze, mentre un'altra attività implementa una schermata Seleziona foto.

La maggior parte delle app include più schermi, il che significa che comprendono attività. Di solito, un'attività in un'app viene specificata come principale , ovvero la prima schermata visualizzata quando l'utente avvia l'app. Ogni attività può quindi iniziare un'altra attività per eseguire azioni diverse. Ad esempio, l'attività principale in una semplice email potrebbe fornire la schermata che mostra una casella di posta in arrivo. Da qui, i principali potrebbero avviare altre attività che forniscono schermate per attività quali scrivere email e aprire singole email.

Sebbene le attività interagiscano per formare un'esperienza utente coerente in un nell'app, ogni attività è legata alle altre; esistono di solito le dipendenze minime tra le attività in un'app. Infatti, spesso avviano attività appartenenti ad altre app. Ad esempio: un'app del browser potrebbe avviare l'attività Condividi di un'app di social media.

Per utilizzare le attività nella tua app, devi registrare le relative informazioni in il file manifest dell'app, e devi gestire i cicli di vita delle attività in modo appropriato. Il resto del documento introduce questi argomenti.

Configurazione del manifest

Affinché la tua app possa usare le attività, devi dichiararle. e alcuni dei loro attributi, nel manifest.

Dichiara le attività

Per dichiarare la tua attività, apri il file manifest e aggiungi un <attività> come elemento secondario di <applicazione> . Ad esempio:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

L'unico attributo obbligatorio per questo elemento è android:name, che specifica il nome della classe dell'attività. Puoi anche aggiungere attributi che definiscono caratteristiche dell'attività come etichetta, icona o tema UI. Per ulteriori informazioni su questi e altri attributi, vedi <attività> documentazione di riferimento sugli elementi.

Nota: dopo aver pubblicato l'app, non dovresti modificare l'attività i nomi degli utenti. In questo caso potresti interrompere alcune funzionalità, ad esempio le scorciatoie app. Per ulteriori informazioni sulle modifiche da evitare dopo la pubblicazione, vedi cose che non possono cambiare.

Dichiara i filtri per intent

Filtri per intent sono una funzionalità molto molto potente della piattaforma Android. Loro offrono la possibilità di avviare un'attività non solo in base a un esplicita, ma anche una richiesta implicita. Ad esempio: una richiesta esplicita potrebbe indicare al sistema di “Avviare l'attività di invio delle email nell'app Gmail". Al contrario, una richiesta implicita indica sistema su "Avvia una schermata Invia email attività in grado di svolgere il lavoro". Quando la UI di sistema chiede a un utente quale app utilizzare nell'esecuzione di un'attività, questo è un filtro per intent in funzione.

Puoi sfruttare questa funzionalità dichiarando un <filtro intent> in <activity>. La definizione di questo elemento include <action> e, facoltativamente, un <categoria> e/o un elemento <data> . Questi elementi combinati per specificare il tipo di intenzione a cui la tua attività può rispondere. Per esempio, il seguente snippet di codice mostra come configurare un'attività che invia dati di testo e riceve richieste da altre attività per farlo:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

In questo ad esempio, la funzione <action> specifica che questa attività invia dati. Dichiarazione del valore <category> come DEFAULT attiva l'attività per ricevere richieste di lancio. La proprietà <data> specifica il tipo di dati che che l'attività può inviare. Il seguente snippet di codice mostra come chiamare il metodo all'attività descritta sopra:

Kotlin

val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)

Java

// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
// Start the activity
startActivity(sendIntent);
Se vuoi che la tua app sia autonoma e non vuoi consentire l'attivazione di altre app le sue attività, sono necessari altri filtri per intent. Attività che non vuoi realizzare disponibili per altre applicazioni non dovrebbero avere filtri per intent e iniziare autonomamente con intenti espliciti. Per ulteriori informazioni le tue attività possono rispondere agli intenti, consulta Intent e i filtri per intent.

Dichiara le autorizzazioni

Puoi utilizzare il parametro Tag <activity> da controllare quali app possono iniziare una determinata attività. Un'attività genitore non può avviare un attività secondarie, a meno che entrambe le attività non abbiano le stesse autorizzazioni del file manifest. Se dichiari un <uses-permission> per un'attività principale, ogni attività secondaria deve avere un <uses-permission> .

Ad esempio, se la tua app vuole usare un'app ipotetica chiamata SocialApp. per condividere un post sui social media, SocialApp stessa deve definire l'autorizzazione che un'app che la chiama deve avere:

<manifest>
<activity android:name="...."
   android:permission=”com.google.socialapp.permission.SHARE_POST”

/>

Per poter chiamare SocialApp, la tua app deve corrispondere all'autorizzazione impostata in File manifest di SocialApp:

<manifest>
   <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>

Per ulteriori informazioni sulle autorizzazioni e sulla sicurezza in generale, vedi Sicurezza e autorizzazioni.

Gestione del ciclo di vita dell'attività

Nel corso della sua vita, un'attività passa attraverso una serie di stati. Puoi utilizzare una serie di callback per gestire le transizioni tra gli stati. Le seguenti sezioni introdurre questi callback.

onCreate()

Devi implementare questo callback, che si attiva quando il sistema crea il tuo attività. L'implementazione deve inizializzare i componenti essenziali la tua attività: ad esempio, l'app deve creare visualizzazioni e associare i dati a elenchi qui. Ma soprattutto, è qui che devi chiamare setContentView() per definire il layout dell'interfaccia utente dell'attività.

Al termine di onCreate(), il callback successivo è sempre onStart().

onStart()

Alla chiusura di onCreate(), l'attività entra nello stato Iniziato e l'attività diventa visibile all'utente. Questo callback contiene i dati sui preparativi finali dell'attività per che arrivano in primo piano e diventano interattivi.

onRiprendi()

Il sistema richiama questo callback appena prima che l'attività inizi a interagire con l'utente. A questo punto, l'attività si trova nella parte superiore dell'attività Stack e acquisisce tutti gli input dell'utente. La maggior parte delle funzionalità di base di un'app implementato nel metodo onResume().

Il callback onPause() sempre segue onResume().

onPause()

Il sistema chiama il numero onPause() in caso di perdita dell'attività lo stato attivo passa allo stato In pausa. Questo stato si verifica, ad esempio, quando l'utente tocca il pulsante Indietro o Recenti. Quando il sistema chiama onPause() per la tua attività, significa tecnicamente che la tua attività è ancora parzialmente visibile, ma il più delle volte indica che l'utente abbandona l'attività e a breve l'attività inserirà Stato Arrestato o Ripreso.

Un'attività nello stato In pausa può continuare ad aggiornare l'interfaccia utente se l'utente e si aspetta un aggiornamento della UI. Esempi di attività di questo tipo includono quella che mostra una navigazione schermata della mappa o di un media player in riproduzione. Anche se queste attività non sono più attive, si aspetta che la UI continui ad aggiornarsi.

Non utilizzare onPause() per salvare l'applicazione o l'utente effettuare chiamate di rete o eseguire transazioni di database. Per informazioni sul salvataggio dei dati, vedi Salvataggio e ripristino dello stato dell'attività.

Quando onPause() termina l'esecuzione, il callback successivo è onStop() o onResume(), a seconda di cosa si verifica quando l'attività passa allo stato In pausa.

onStop()

Il sistema chiama onStop() quando l'attività non è più visibile all'utente. Questo può accadere perché l'attività viene eliminata, una nuova attività viene sta per iniziare o sta per entrare un'attività esistente con lo stato Ripresa e copre l'attività interrotta. In tutti questi casi, l'attività interrotta visibile.

Il callback successivo chiamato dal sistema onRestart(), se l'attività torna a interagire con l'utente oppure onDestroy() se l'attività termina del tutto.

onRiavvia()

Il sistema richiama questo callback quando un'attività nello stato Interrotta viene che sta per essere riavviato. onRestart() ripristina lo stato dell'attività dal momento in cui è stata interrotta.

Questo callback è sempre seguito da onStart().

onDestroy()

Il sistema richiama questo callback prima che un'attività venga eliminata.

Questo callback è l'ultimo che riceve l'attività. onDestroy() è vengono generalmente implementati per garantire che tutte le risorse di un'attività rilasciato quando l'attività, o il processo che la contiene, viene distrutta.

Questa sezione fornisce solo un'introduzione a questo argomento. Per un'esperienza trattamento dettagliato del ciclo di vita dell'attività e dei relativi callback consulta La scheda Attività Ciclo di vita.