Ograniczenia dotyczące rozpoczynania działań w tle

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

.

W tym przewodniku omawiamy powiadomienia jako alternatywę dla uruchamiania działań w tle. Zawiera on też listę konkretnych przypadków, w których ograniczenia nie mają zastosowania.

Wyświetlanie powiadomień

W prawie wszystkich przypadkach aplikacje działające w tle muszą wyświetlać powiadomienia o wypadkach czasu, aby przekazywać użytkownikom pilne informacje, zamiast bezpośrednio uruchamiać 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 widzi powiadomienie z możliwością odpowiedzi. 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 aktywność w grupie aktywności zadania na pierwszym planie.
  • Aplikacja ma aktywność w dodatkowym stosie istniejącego zadania na ekranie Ostatnie.

  • Aplikacja ma aktywność, która rozpoczęła się bardzo niedawno.

  • Aplikacja o nazwie finish() była ostatnio aktywna. Ma to zastosowanie tylko wtedy, 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 otrzymuje powiadomienie PendingIntent od systemu. W przypadku oczekujących intencji dotyczących usług i odbiorników transmisji aplikacja może uruchamiać 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_CALLSECRET_CODE_ACTION. Aplikacja może uruchamiać czynności przez kilka sekund po wysłaniu transmisji.

  • Aplikacja jest powiązana z urządzeniem sprzętowym za pomocą interfejsu CompanionDeviceManagerAPI. 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 przypadki użycia to w pełni zarządzane urządzenia firmowe oraz dedykowane urządzenia, takie jak tablice informacyjno-reklamowe 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ą 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ą już 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 oczekujących intencji
Ilustracja 1.Proces podejmowania decyzji dotyczących uruchamiania 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ć wymagana tylko, jeśli deweloper aplikacji wie, że aplikacja ma rozpocząć Aktywność.

Aby włączyć tę funkcję, aplikacja powinna przekazać pakiet ActivityOptions z wartością setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) do metody PendingIntent.send() lub podobnej.

Twórca oczekującej intencji

Aplikacje kierowane na Androida 15 lub nowszego, które tworzą PendingIntent, muszą teraz wyraźnie zezwalać na uruchamianie aktywności w tle, jeśli chcą, aby te PendingIntents mogły być uruchamiane zgodnie z wymienionymi warunkami.

W większości przypadków aplikacja uruchamiająca PendingIntent powinna być aplikacją, w której użytkownik ma możliwość wyrażenia zgody. Jeśli jednak aplikacja tworząca musi przyznać te uprawnienia:

  • PendingIntent można uruchomić w dowolnym momencie, gdy tworzona aplikacja jest widoczna.
  • Jeśli aplikacja tworząca ma specjalne uprawnienia, PendingIntent może zostać uruchomiona w dowolnym momencie.

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