La schermata Recenti, chiamata anche schermata Panoramica, è l'attività recente o schermata delle app recenti, è una UI a livello di sistema che elenca gli accessi recenti attività e attività. L'utente può navigare nell'elenco, selezionare un'attività per riprendi o rimuovi un'attività dall'elenco facendola scorrere per nasconderla.
La schermata Recenti utilizza una strategia incentrata sui documenti : introdotto in Android 5.0 (API livello 21), in cui più istanze la stessa attività contenente documenti diversi può essere visualizzata come attività Schermata Recenti. Ad esempio, Google Drive potrebbe avere un'attività per ciascuno diversi documenti Google. Ogni documento appare come un'attività nella scheda Recenti schermata:
Un altro esempio comune è quando l'utente utilizza il browser e tocca Condividi > Gmail Viene visualizzata la schermata Scrivi dell'app Gmail. Toccando il Recenti in quel momento rivela che Chrome e Gmail vengono eseguiti attività:
Normalmente, lasci che sia il sistema a definire le modalità di esecuzione delle tue attività rappresentato nella schermata Recenti. Non è necessario modificarlo comportamento degli utenti. Tuttavia, la tua app può stabilire come e quando vengono visualizzate le attività nella Schermata Recenti.
La
ActivityManager.AppTask
di classe consente di gestire le attività, mentre i flag di attività
Intent
ti consente di specificare quando
l'attività viene aggiunta o rimossa dalla schermata Recenti. Inoltre,
Gli attributi <activity>
ti consentono di impostare
il comportamento nel manifest.
Aggiungi attività alla schermata Recenti
Utilizzo dei flag della classe Intent
per
aggiungere un'attività ti offre un maggiore controllo su quando e come un documento viene aperto
riaperta nella schermata Recenti. Quando utilizzi il
<activity>
, puoi
scegli se aprire sempre il documento in una nuova attività o riutilizzare una esistente
per il documento.
Utilizzare il flag di intent per aggiungere un'attività
Quando crei un nuovo documento per la tua attività, chiami il metodo
startActivity()
, passandogli l'intent che avvia l'attività. Per inserire un prompt logico
in modo che il sistema consideri la tua attività come una nuova attività
schermo, passa
FLAG_ACTIVITY_NEW_DOCUMENT
flag in addFlags()
di Intent
che avvia la
attività.
Se imposti FLAG_ACTIVITY_MULTIPLE_TASK
quando crei il nuovo documento, il sistema crea sempre una nuova attività
l'attività target come principale. Questa impostazione consente allo stesso documento di essere
aperto in più di un'attività. Il seguente codice mostra come l'istanza principale
attività fa quanto segue:
Kotlin
fun createNewDocument(view: View) { val newDocumentIntent = newDocumentIntent() if (useMultipleTasks) { newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK) } startActivity(newDocumentIntent) } private fun newDocumentIntent(): Intent = Intent(this, NewDocumentActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS) putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++) }
Java
public void createNewDocument(View view) { final Intent newDocumentIntent = newDocumentIntent(); if (useMultipleTasks) { newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); } startActivity(newDocumentIntent); } private Intent newDocumentIntent() { boolean useMultipleTasks = checkbox.isChecked(); final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class); newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++); return newDocumentIntent; } }
Quando l'attività principale avvia una nuova attività, il sistema cerca
attività esistenti per un intent il cui intent corrisponde al nome del componente per intent e
sull'intent per l'attività. Se l'attività non viene trovata o se l'intent contiene
FLAG_ACTIVITY_MULTIPLE_TASK
viene creata una nuova attività con l'attività come radice.
Se il sistema trova un'attività il cui intent corrisponde al nome del componente di intent
dati sull'intent, l'attività viene mostrata in primo piano e trasmette il nuovo intent
onNewIntent()
La nuova attività prende l'intento e crea un nuovo documento nella sezione Recenti
come mostrato nell'esempio seguente:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_new_document) documentCount = intent .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0) documentCounterTextView = findViewById(R.id.hello_new_document_text_view) setDocumentCounterText(R.string.hello_new_document_counter) } override fun onNewIntent(newIntent: Intent) { super.onNewIntent(newIntent) /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this Activity will be reused. */ setDocumentCounterText(R.string.reusing_document_counter) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_new_document); documentCount = getIntent() .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0); documentCounterTextView = (TextView) findViewById( R.id.hello_new_document_text_view); setDocumentCounterText(R.string.hello_new_document_counter); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this activity is reused to create a new document. */ setDocumentCounterText(R.string.reusing_document_counter); }
Utilizzare l'attributo activity per aggiungere un'attività
Un'attività può anche specificare nel file manifest che viene sempre avviata in una nuova
utilizzando l'attività <activity>
android:documentLaunchMode
.
Questo attributo ha quattro valori, che producono i seguenti effetti quando l'utente
apre un documento con l'applicazione:
intoExisting
- L'attività riutilizza un'attività esistente per il documento. Equivale a impostare il parametro
FLAG_ACTIVITY_NEW_DOCUMENT
il flag senza impostare il flagFLAG_ACTIVITY_MULTIPLE_TASK
come descritto nel Utilizzo del flag di intent per aggiungere un'attività. always
- L'attività crea una nuova attività per il documento, anche se il documento è
già aperta. Utilizzare questo valore equivale a impostare sia il valore
Flag
FLAG_ACTIVITY_NEW_DOCUMENT
eFLAG_ACTIVITY_MULTIPLE_TASK
. none
- L'attività non crea una nuova attività per il documento. I recenti schermo considera l'attività come se fosse per impostazione predefinita. mostra una singola attività per l'app, che riprende l'attività dall'ultima chiamata dell'utente.
never
- L'attività non crea una nuova attività per il documento. Impostazione di questo valore
sostituisce il comportamento dell'agente
FLAG_ACTIVITY_NEW_DOCUMENT
eFLAG_ACTIVITY_MULTIPLE_TASK
e i flag facoltativi. Se una di queste opzioni è impostata nell'intent e la schermata Recenti visualizza una singola attività per l'app, riprende da qualsiasi attività l'ultima volta che l'utente è stato richiamato. di Gemini Advanced.
Rimuovere le attività
Per impostazione predefinita, un'attività documento esce automaticamente dalla schermata Recenti
quando termina l'attività. Puoi ignorare questo comportamento con
ActivityManager.AppTask
, con un flag Intent
o con
un attributo <activity>
.
Puoi sempre escludere del tutto un'attività dalla schermata Recenti impostando
Attributo <activity>
android:excludeFromRecents
a true
.
Puoi impostare il numero massimo di attività che la tua app può includere nel
Recenti impostando
Attributo <activity>
android:maxRecents
a un
valore intero. Una volta raggiunto il numero massimo di attività,
l'attività utilizzata meno di recente scompare dalla schermata Recenti. Il valore predefinito è 16,
mentre il valore massimo è 50 (25 su dispositivi con memoria ridotta). Valori inferiori
di 1 non sono validi.
Utilizzare la classe AppTask per rimuovere attività
Nell'attività che crea una nuova attività nella schermata Recenti, puoi:
specifica quando rimuovere l'attività e completare tutte le attività associate
chiamando il
finishAndRemoveTask()
:
Kotlin
fun onRemoveFromOverview(view: View) { // It is good pratice to remove a document from the overview stack if not needed anymore. finishAndRemoveTask() }
Java
public void onRemoveFromRecents(View view) { // The document is no longer needed; remove its task. finishAndRemoveTask(); }
Conserva le attività terminate
Se vuoi conservare un'attività nella schermata Recenti, anche se la relativa attività è stata
finito, passiamo
FLAG_ACTIVITY_RETAIN_IN_RECENTS
flag nel
addFlags()
del metodo
intent che avvia l'attività.
Kotlin
private fun newDocumentIntent() = Intent(this, NewDocumentActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS) putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, getAndIncrement()) }
Java
private Intent newDocumentIntent() { final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class); newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT | android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS); newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, getAndIncrement()); return newDocumentIntent; }
Per ottenere lo stesso effetto, imposta
Attributo <activity>
android:autoRemoveFromRecents
a false
. Il valore predefinito è true
per le attività relative ai documenti e false
per
attività regolari. L'utilizzo di questo attributo sostituisce il valore
FLAG_ACTIVITY_RETAIN_IN_RECENTS
flag.
Attivare la condivisione di URL recenti (solo su Pixel)
Sui dispositivi Pixel con Android 12 o versioni successive, gli utenti possono condividere link ai contenuti web visualizzati di recente direttamente dalla schermata Recenti. Dopo la visita i contenuti di un'app, l'utente può scorrere fino alla schermata Recenti e trovare l'app dove ha visualizzato i contenuti, poi tocca il pulsante del link per copiare o condividere URL.
Qualsiasi app può attivare il collegamento di Recenti per gli utenti fornendo una UI web e
eseguire l'override
onProvideAssistContent()
,
come mostrato nell'esempio seguente:
Kotlin
class MainActivity : AppCompatActivity() { protected fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } fun onProvideAssistContent(outContent: AssistContent) { super.onProvideAssistContent(outContent) outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage")) } }
Java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onProvideAssistContent(AssistContent outContent) { super.onProvideAssistContent(outContent); outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage")); } }