Limitazioni relative all'avvio di attività in background

Android 10 (livello API 29) e limitazioni relative al luogo in cui è possibile avviare le app attività quando l'app è in esecuzione in sullo sfondo. Queste restrizioni aiutano a ridurre al minimo le interruzioni per l'utente e consentono all'utente di avere maggiore controllo su ciò che viene mostrato sul suo schermo.

Questa guida presenta le notifiche come alternativa per avviare attività da sullo sfondo. Elenca anche i casi specifici in cui la restrizione .

Mostra invece le notifiche

In quasi tutti i casi, le app in background devono visualizzare notifiche urgenti per Fornire informazioni urgenti all'utente invece di avviare direttamente un'attività. Queste notifiche includono la gestione di una telefonata in arrivo o di una sveglia attiva. orologio.

Questo sistema di avviso e promemoria basato sulle notifiche offre numerosi vantaggi per gli utenti:

  • Quando utilizza il dispositivo, l'utente vede una notifica che gli consente di e rispondere. L'utente mantiene il proprio contesto corrente e ha il controllo i contenuti visualizzati sullo schermo.
  • Le notifiche urgenti rispettano le Regole Non disturbare. Per Ad esempio, gli utenti potrebbero consentire solo le chiamate provenienti da contatti specifici o da chiamanti quando è attiva la modalità Non disturbare.
  • Quando lo schermo del dispositivo è spento, viene avviato l'intent a schermo intero immediatamente.
  • Nella schermata Impostazioni del dispositivo, l'utente può vedere di quali app sono notifiche inviate di recente, anche da canali di notifica specifici. Da questa schermata, l'utente può controllare le proprie preferenze di notifica.

Quando le app possono avviare attività

Le app con Android 10 o versioni successive possono avviare attività quando vengono soddisfatte una o più delle seguenti condizioni:

  • L'app ha una finestra visibile, ad esempio un'attività in primo piano.
  • L'app ha un'attività nella back stack del dell'attività in primo piano.
  • L'app presenta un'attività nella pila posteriore di un'attività esistente nella Schermata Recenti.

  • L'app presenta un'attività iniziata molto di recente.

  • L'app finish() attiva un'attività molto recente. Questo vale solo quando l'app presentava un'attività in primo piano o un'attività nello stack posteriore dell' attività in primo piano nel momento in cui è stato chiamato finish().

  • L'app include uno dei seguenti servizi vincolato dal sistema. Questi e servizi potrebbero dover avviare una UI.

  • L'app include un servizio associato a un'altra app visibile. L'app associati al servizio devono rimanere visibili affinché l'app in background iniziare correttamente le attività.

  • L'app riceve una notifica PendingIntent dal sistema. Nel nel caso degli intent in sospeso per servizi e broadcast receiver, l'app può avviare attività per alcuni secondi dopo l'invio dell'intent in attesa.

  • L'app riceve un PendingIntent inviato da un altro indirizzo dell'app.

  • L'app riceve un annuncio di sistema in cui è previsto l'avvio di un nell'interfaccia utente. Alcuni esempi sono ACTION_NEW_OUTGOING_CALL e SECRET_CODE_ACTION. L'app può avviare attività per alcuni secondi dopo l'invio della trasmissione.

  • L'app viene associata a un dispositivo hardware associato tramite la CompanionDeviceManager API. Questa API consente all'app di avviare attività in risposta ad azioni che eseguita dall'utente su un dispositivo accoppiato.

  • L'app è un controller dei criteri dei dispositivi in esecuzione modalità proprietario del dispositivo. Esempi di casi d'uso includono dispositivi aziendali completamente gestiti nonché dispositivi dedicati come le tecnologie segnaletica e chioschi.

  • All'app viene concessa l'autorizzazione SYSTEM_ALERT_WINDOW dall'utente.

Attivazione obbligatoria quando si avviano attività da PendingIntent

Per evitare di consentire avvii accidentali di attività in base ai , a partire da Android 14 esistono API esplicite che ti consentono attivare o disattivare la concessione di autorizzazioni di un'app per gli avvii dell'attività.

Per impostazione predefinita, le app che hanno come target Android 15 o versioni successive non saranno più implicitamente concedendo i privilegi per l'avvio di attività in background (BAL) a PendingIntents, creare. A questo scopo, è necessaria un'attivazione esplicita. Queste sono le opzioni a seconda che l'app stia inviando o creando PendingIntents.

Tabella degli intent in attesa
Figura 1: flusso decisionale per i lanci di attività in background.

Dal mittente dell'PendingIntent

Le app destinate ad Android 14 o versioni successive che vogliono avviare un PendingIntent devono

  • soddisfare le condizioni elencate e
  • attivare per consentire l'avvio di attività in background in base a queste eccezioni

Questa attivazione dovrebbe avvenire solo se lo sviluppatore sa che l'app è avvierà un'attività.

Per essere attivata, l'app deve trasmettere un pacchetto ActivityOptions con setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) a PendingIntent.send() o a metodi simili.

Dall'autore di PendingIntent

Le app che hanno come target Android 15 o versioni successive che creano un PendingIntent adesso devono attivare esplicitamente di consentire l'avvio dell'attività in background se vogliono che PendingIntents per l'avvio nelle condizioni elencate.

Nella maggior parte dei casi, l'attivazione dovrebbe essere l'app che avvia il PendingIntent. Tuttavia, se l'app in fase di creazione deve concedere i seguenti privilegi:

  • L'app PendingIntent può essere avviata in qualsiasi momento in cui è visibile la creazione dell'app.
  • L'PendingIntent può essere avviata in qualsiasi momento se l'app di creazione ha offerte speciali privilegiati.

Per essere attivata, l'app deve trasmettere un pacchetto ActivityOptions con setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) al PendingIntent.getActivity() o metodi simili.

Per ulteriori dettagli, leggi la relativa documentazione di riferimento: