Ograniczenia dotyczące rozpoczynania działań w tle

Android 10 (poziom interfejsu API 29) i wyższe ograniczenia nakładające ograniczenia na to, kiedy aplikacje mogą uruchamiać działania, gdy działają w tle. Te ograniczenia pomagają zminimalizować przerwy w pracy użytkownika i pozwalają mu lepiej kontrolować to, co wyświetla się na ekranie.

.

Ten przewodnik przedstawia powiadomienia jako alternatywę dla uruchamiania działań w tle. Zawiera on też listę konkretnych przypadków, w których ograniczenia nie obowiązują.

Wyświetlanie powiadomień

Prawie we wszystkich przypadkach aplikacje w tle muszą wyświetlać pilne powiadomienia, aby przekazać użytkownikowi pilne informacje zamiast bezpośrednio rozpoczynać działanie. Takie powiadomienia obejmują obsługę połączeń przychodzących lub aktywnego alarmu zegara.

Ten system powiadomień i przypomnień ma wiele zalet dla użytkowników:

  • Podczas korzystania z urządzenia użytkownik zobaczy powiadomienie HUD, które pozwoli mu odpowiedzieć. Użytkownik zachowuje bieżący kontekst i ma kontrolę nad treściami wyświetlanymi na ekranie.
  • Powiadomienia o charakterze pilnym są zgodne z ustawieniami użytkownika w sekcji Nie przeszkadzać. Na przykład użytkownicy mogą zezwalać na połączenia tylko od określonych kontaktów lub od osób, które często do nich dzwonią, gdy tryb Nie przeszkadzać jest włączony.
  • Gdy ekran urządzenia jest wyłączony, intencja pełnoekranowa uruchamia się natychmiast.
  • Na ekranie Ustawienia urządzenia użytkownik może sprawdzić, które aplikacje wysłały ostatnio powiadomienia, w tym z określonych kanałów powiadomień. Na tym ekranie użytkownik może kontrolować ustawienia powiadomień.

Kiedy aplikacje mogą uruchamiać aktywności

Aplikacje działające na Androidzie 10 lub nowszym mogą uruchamiać czynności, gdy spełniony jest co najmniej 1 z tych warunków:

  • Aplikacja ma widoczne okno, np. aktywność na pierwszym planie.
  • Aplikacja ma działanie w stosie tylnym zadania na pierwszym planie.
  • Aplikacja ma aktywność w dodatkowym stosie istniejącego zadania na ekranie Ostatnie.

  • W aplikacji występuje aktywność, która rozpoczęła się niedawno.

  • Aplikacja o nazwie finish() była ostatnio aktywna. Dotyczy to tylko sytuacji, gdy w momencie wywołania funkcji finish() aplikacja miała aktywność na pierwszym planie lub aktywność w grupie zadań na pierwszym planie.

  • Aplikacja ma jedną z tych usług, która jest powiązana z systemem. Te usługi mogą wymagać uruchomienia interfejsu użytkownika.

  • Aplikacja ma usługę, która jest powiązana z inną, widoczną aplikacją. Aby aplikacja mogła rozpocząć działania, aplikacja powiązana z usługą musi pozostać widoczna w tle.

  • Aplikacja otrzyma od systemu powiadomienie PendingIntent. W przypadku oczekujących intencji dla usług i odbiorników aplikacja może rozpoczynać działania przez kilka sekund po wysłaniu oczekującej intencji.

  • Aplikacja otrzymuje PendingIntent wysłany z innej, widocznej aplikacji.

  • Aplikacja otrzymuje transmisję systemową, w ramach której powinna uruchomić interfejs użytkownika. Przykłady: ACTION_NEW_OUTGOING_CALL i SECRET_CODE_ACTION. Aplikacja może rozpoczynać działania przez kilka sekund po wysłaniu transmisji.

  • Aplikacja jest powiązana z towarzyszącym urządzeniem za pomocą interfejsu API CompanionDeviceManager. Ten interfejs API umożliwia aplikacji uruchamianie działań w odpowiedzi na działania podejmowane przez użytkownika na sparowanym urządzeniu.

  • Aplikacja jest kontrolerem zasad urządzeń działającym w trybie właściciela urządzenia. Przykładowe zastosowania obejmują w pełni zarządzane urządzenia firmowe oraz urządzenia specjalne, takie jak cyfrowe tablice informacyjne i kioski.

  • Użytkownik przyznał aplikacji uprawnienie SYSTEM_ALERT_WINDOW.

Wymagana zgoda na uruchamianie działań z użyciem intencji oczekujących

Aby uniknąć przypadkowego uruchamiania aktywności na podstawie wymienionych warunków, od Androida 14 dostępne są specjalne interfejsy API, które umożliwiają włączanie lub wyłączanie uprawnień aplikacji do uruchamiania aktywności.

Aplikacje kierowane na Androida 15 lub nowszego nie będą domyślnie przyznawać uprawnień do uruchamiania aktywności w tle (BAL) tworzonym przez nie PendingIntents. Wymagane jest wyraźne zezwolenie. Oto dostępne opcje w zależności od tego, czy aplikacja wysyła czy tworzy PendingIntents.

Tabela intencji oczekujących
Rys. 1. Proces decyzyjny w przypadku uruchomienia aktywności w tle

przez nadawcę oczekującej intencji;

Aplikacje kierowane na Androida 14 lub nowszego, które chcą uruchomić PendingIntent, muszą:

  • spełniać wymienione warunki i
  • zezwolić na uruchamianie aktywności w tle na podstawie tych wyjątków.

Ta zgoda powinna być wymagania tylko wtedy, gdy deweloper aplikacji wie, że aplikacja ma rozpocząć Aktywność.

Aby to zrobić, aplikacja powinna przekazać pakiet ActivityOptions z wartością setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) do metody PendingIntent.send() lub podobnej.

Przez twórcę intencji PendingIntent

Aplikacje kierowane na Androida 15 lub nowszego, które tworzą PendingIntent, muszą teraz jednoznacznie zezwolić na uruchamianie aktywności w tle, jeśli chcą, aby PendingIntents można je było uruchamiać zgodnie z wymienionymi warunkami.

W większości przypadków aplikacja uruchamiająca PendingIntent powinna wyrazić zgodę. Jeśli jednak aplikacja tworząca musi przyznać te uprawnienia:

  • PendingIntent możesz uruchomić w każdej chwili, gdy widzisz, że tworzysz aplikację.
  • PendingIntent można uruchomić w dowolnym momencie, jeśli tworząca aplikację ma specjalne uprawnienia.

Aby to zrobić, aplikacja powinna przekazać pakiet ActivityOptions z wartością setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) do PendingIntent.getActivity() lub za pomocą podobnych metod.

Aby dowiedzieć się więcej, zapoznaj się z odpowiednią dokumentacją: