Ograniczenia dotyczące rozpoczynania działań w tle

Android 10 (poziom interfejsu API 29) i wyższe ograniczenia nakładania ograniczeń na uruchamianie aplikacji działania, gdy aplikacja działa w tle. Te ograniczenia pozwalają zminimalizować przerwy w pracy Dzięki temu użytkownik ma większą kontrolę nad tym, co wyświetla się na ekranie.

Ten przewodnik przedstawia powiadomienia jako alternatywę dla rozpoczynania modułów w tle. Podaje też listę konkretnych przypadków, w których to ograniczenie nie występuje. zastosuj.

Zamiast tego wyświetlaj powiadomienia

Prawie we wszystkich przypadkach aplikacje działające w tle muszą wyświetlaj pilne powiadomienia, przekazywania użytkownikowi pilnych informacji zamiast bezpośredniego rozpoczynania działania; Takie powiadomienia obejmują obsługę przychodzącego połączenia telefonicznego lub aktywnego alarmu zegar.

Oparty na powiadomienia system alertów i przypomnień ma kilka zalet dla użytkowników:

  • Podczas korzystania z urządzenia użytkownik zobaczy powiadomienie HUD, które umożliwia mu odpowiedzieć. Użytkownik zachowuje obecny kontekst i ma kontrolę nad treści, które widzą na ekranie.
  • Powiadomienia pilne od czasu do czasu uwzględniają Reguły Nie przeszkadzać. Dla: Na przykład użytkownicy mogą zezwalać na połączenia tylko od określonych kontaktów dzwoniących, gdy włączony jest tryb Nie przeszkadzać.
  • Gdy ekran urządzenia jest wyłączony, uruchamia się intencja pełnoekranowa natychmiast.
  • Na ekranie Ustawienia urządzenia użytkownik może zobaczyć, które aplikacje ostatnio wysłane powiadomienia, w tym powiadomienia z konkretnych kanałów powiadomień. Na tym ekranie użytkownik może dostosować swoje ustawienia powiadomień.

Kiedy aplikacje mogą rozpoczynać aktywność

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

  • Aplikacja ma widoczne okno, np. aktywność na pierwszym planie.
  • Aplikacja ma aktywność w: tylny stos funkcji i zadania na pierwszym planie.
  • W stosunku z tyłu istniejącego zadania w aplikacji jest aktywność Ekran Ostatnie.

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

  • Aplikacja o nazwie finish() na urządzeniu niedawnych działań. Dzieje się tak tylko wtedy, gdy aplikacja miała działania na pierwszym planie lub w tylnej części stosu zadanie na pierwszym planie w momencie wywołania funkcji finish().

  • Aplikacja ma jedną z podanych niżej usług powiązanych z systemem. Te może wymagać uruchomienia interfejsu użytkownika.

  • Aplikacja jest powiązana z inną, widoczną aplikacją. Aplikacja powiązane z usługą muszą pozostawać widoczne dla aplikacji w tle dla udało się rozpocząć działania.

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

  • Aplikacja otrzymuje żądanie PendingIntent wysłane z innego, widocznego .

  • Aplikacja otrzymuje komunikat systemowy, w ramach którego aplikacja powinna uruchomić Interfejs. 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 ze sprzętem towarzyszącym za pomocą CompanionDeviceManager API. Ten interfejs API umożliwia aplikacji uruchamianie działań w odpowiedzi na działania podczas słuchania muzyki na sparowanym urządzeniu.

  • Ta aplikacja jest kontrolerem zasad dotyczących urządzeń działającym w trybie właściciela urządzenia. Przykładowe zastosowania to w pełni zarządzane urządzenia firmowe oraz urządzeń specjalnych, takich jak cyfrowe tablice informacyjne i kioski.

  • Aplikacja otrzymała uprawnienie SYSTEM_ALERT_WINDOW przez użytkownika.

Wymagana jest akceptacja w przypadku uruchamiania działań z intencji PendingIntents

Aby zapobiec zezwalaniu na przypadkową aktywność, która rozpoczyna się na podstawie listy , począwszy od Androida 14, dostępne są jawne interfejsy API, które umożliwiają , aby włączyć lub wyłączyć przyznawanie aplikacji uprawnień do aktywności.

Aplikacje kierowane na Androida 15 lub nowszego będą domyślnie wyłączone przyznają PendingIntents uprawnienia do uruchamiania aktywności w tle (BAL) tworzyć. Wymagana jest wyraźna zgoda użytkownika. Oto 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ę intencji PendingIntent

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

  • spełniają podane warunki oraz
  • zezwolić na uruchamianie aktywności w tle z uwzględnieniem tych wyjątków

Zgodę na to należy tylko wtedy, gdy deweloper wie, że aplikacja jest rozpocznie aktywność.

Aby można było wyrazić zgodę, aplikacja powinna przekazać pakiet ActivityOptions z 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 wyraźnie wyrazić zgodę na uruchamianie aktywności w tle, jeśli chcą. PendingIntents, aby można było uruchomić grę zgodnie z wymienionymi warunkami.

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

  • PendingIntent możesz uruchomić w każdej chwili, gdy widzisz, że tworzysz aplikację.
  • PendingIntent możesz uruchomić w dowolnym momencie, jeśli w aplikacji jest specjalny uprawnień.

Aby można było wyrazić zgodę, aplikacja powinna przekazać pakiet ActivityOptions z setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) na PendingIntent.getActivity() lub podobnej.

Więcej informacji znajdziesz w odpowiedniej dokumentacji: