Schermata Recenti

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:

Schermata Recenti che mostra due file di Google Drive documenti, ciascuno rappresentato come un'attività separata.

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à:

Schermata Recenti che mostra Chrome e Gmail in esecuzione come attività separate.

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 flag FLAG_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 e FLAG_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 e FLAG_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.

La schermata Recenti con un link da condividere contenuti web visualizzati di recente.

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"));
    }
}