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);
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.