Zmiany w działaniu: wszystkie aplikacje

Platforma Android 13 zawiera zmiany w działaniu, które mogą mieć wpływ na Twoją aplikację. Poniższe zmiany w działaniu dotyczą wszystkich aplikacji działających na Androidzie 13, niezależnie od targetSdkVersion. W razie potrzeby przetestuj aplikację, a następnie zmodyfikuj ją, aby prawidłowo obsługiwała te funkcje.

Zapoznaj się też z listą zmian w zachowaniu, które mają wpływ tylko na aplikacje kierowane na Androida 13.

Wydajność i bateria

Menedżer zadań

U dołu panelu powiadomień znajduje się przycisk z liczbą aplikacji działających obecnie w tle. Po naciśnięciu tego przycisku pojawi się okno z listą nazw różnych aplikacji. Przycisk Zatrzymaj znajduje się po prawej stronie każdej aplikacji.
Rysunek 1. Przepływ pracy w Menedżerze zadań , który umożliwia użytkownikom zatrzymywanie aplikacji z usługami działającymi na pierwszym planie. Ten proces jest dostępny tylko na urządzeniach z Androidem 13 lub nowszym.

Od Androida 13 (API na poziomie 33) użytkownicy mogą wykonać przepływ pracy z poziomu panelu powiadomień, aby zatrzymać aplikacje, które mają działające usługi na pierwszym planie, jak pokazano na ilustracji 1. Ta funkcja jest nazywana Menedżerem zadań. Aplikacje muszą obsługiwać zatrzymywanie inicjowane przez użytkownika.

Ulepsz obsługę zadań wstępnego pobierania za pomocą JobScheduler

JobScheduler umożliwia aplikacjom oznaczanie konkretnych zadań jako zadań „wstępnego pobierania” (za pomocą JobInfo.Builder.setPrefetch()), co oznacza, że powinny one być wykonywane jak najbliżej następnego uruchomienia aplikacji i przed nim, aby zwiększyć wygodę użytkownika. W przeszłości JobScheduler używał tego sygnału tylko po to, aby zadania wstępnego pobierania mogły oportunistycznie korzystać z wolnych lub nadmiarowych danych.

W Androidzie 13 (API na poziomie 33) i nowszych system próbuje określić, kiedy aplikacja zostanie uruchomiona następnym razem, i wykorzystuje to oszacowanie do uruchamiania zadań wstępnego pobierania. Aplikacje powinny używać zadań wstępnego pobierania w przypadku wszystkich działań, które mają być wykonane przed następnym uruchomieniem aplikacji.

Wykorzystanie baterii

Android 13 (API na poziomie 33) zapewnia te sposoby na lepsze zarządzanie żywotnością baterii urządzenia:

Podczas testowania aplikacji z tymi zmianami sprawdź, czy:

  • Sprawdź, jak aplikacja reaguje, gdy system umieści ją w „ograniczonym” zasobniku stanu gotowości aplikacji. Aby przypisać aplikację do tego zasobnika, użyj tego polecenia Android Debug Bridge (ADB):

    adb shell am set-standby-bucket PACKAGE_NAME restricted
    
  • Sprawdź, jak Twoja aplikacja reaguje na te ograniczenia, które zwykle dotyczą aplikacji w stanie „ograniczonym” w zakresie wykorzystania baterii w tle:

    • Nie można uruchomić usług działających na pierwszym planie
    • Istniejące usługi działające na pierwszym planie są usuwane z pierwszego planu.
    • Alarmy nie są włączane
    • Zadania nie są wykonywane

    Aby umieścić aplikację w stanie „ograniczonym”, użyj tego polecenia ADB:

    adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
    

Limity wiadomości FCM o wysokim priorytecie

Android 13 (poziom 33 interfejsu API) aktualizuje limity Komunikacji w chmurze Firebase (FCM), aby zwiększyć niezawodność dostarczania powiadomień FCM o wysokim priorytecie w przypadku aplikacji, które wyświetlają powiadomienia w odpowiedzi na powiadomienia FCM o wysokim priorytecie. W Androidzie 13 (poziom API 33) wprowadzono te zmiany:

  • Zasobniki gotowości aplikacji nie określają już, ile powiadomień FCM o wysokim priorytecie może używać aplikacja.
  • System obniża teraz priorytet wiadomości o wysokim priorytecie, jeśli wykryje aplikację, która stale wysyła takie wiadomości, ale nie powodują one wyświetlania powiadomień.

Podobnie jak w poprzednich wersjach Androida, wiadomości FCM o wysokim priorytecie, które przekraczają limit, są obniżane do normalnego priorytetu. Podczas uruchamiania usług na pierwszym planie (FGS) w odpowiedzi na FCM zalecamy sprawdzenie wyniku RemoteMessage.getPriority() i upewnienie się, że jest to PRIORITY_HIGH, lub obsługę potencjalnych wyjątków ForegroundServiceStartNotAllowedException.

Jeśli Twoja aplikacja nie zawsze publikuje powiadomienia w odpowiedzi na wiadomości FCM o wysokim priorytecie, zalecamy zmianę priorytetu tych wiadomości na normalny, aby wiadomości powodujące wyświetlanie powiadomień nie były obniżane.

Prywatność

Uprawnienia w czasie działania aplikacji dotyczące powiadomień

W Androidzie 13 (poziom 33 interfejsu API) wprowadzono uprawnienia do powiadomień w czasie działania:POST_NOTIFICATIONS Ta zmiana pomoże użytkownikom skupić się na powiadomieniach, które są dla nich najważniejsze.

Zdecydowanie zalecamy jak najszybsze kierowanie reklam na Androida 13 lub nowszego, aby uzyskać dodatkową kontrolę i elastyczność, jakie daje ta funkcja.

Dowiedz się więcej o sprawdzonych metodach dotyczących uprawnień aplikacji.

Ukrywanie poufnych treści w schowku

Jeśli Twoja aplikacja umożliwia użytkownikom kopiowanie do schowka treści o charakterze poufnym, takich jak hasła lub informacje o karcie kredytowej, przed wywołaniem funkcji ClipboardManager#setPrimaryClip() musisz dodać flagę do obiektu ClipData ClipDescription. Dodanie tego znacznika uniemożliwia wyświetlanie treści o charakterze kontrowersyjnym w podglądzie treści.

Podgląd skopiowanego tekstu bez oznaczania treści poufnych
Podgląd skopiowanego tekstu bez oznaczania treści poufnych.
Podgląd skopiowanego tekstu z oznaczeniem treści poufnych.
Podgląd skopiowanego tekstu z oznaczeniem treści poufnych.

Aby oznaczyć treści o charakterze kontrowersyjnym, dodaj do parametru ClipDescription dodatkową wartość logiczną. Wszystkie aplikacje powinny to robić niezależnie od docelowego poziomu interfejsu API.


// When your app is compiled with the API level 33 SDK or higher
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
    }
}

// If your app is compiled with a lower SDK
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean("android.content.extra.IS_SENSITIVE", true)
    }
}

Więcej informacji o nowym interfejsie schowka znajdziesz na stronie funkcji Kopiowanie i wklejanie.

Bezpieczeństwo

Migracja z udostępnianego identyfikatora użytkownika

Jeśli Twoja aplikacja używa wycofanego atrybutu android:sharedUserId i nie zależy już od jego funkcji, możesz ustawić atrybut android:sharedUserMaxSdkVersion na 32, jak pokazano w tym fragmencie kodu:

<manifest ...>
    <!-- To maintain backward compatibility, continue to use
         "android:sharedUserId" if you already added it to your manifest. -->
    android:sharedUserId="SHARED_PACKAGE_NAME"
    android:sharedUserMaxSdkVersion="32"
    ...
</manifest>

Ten atrybut informuje system, że aplikacja nie korzysta już ze współdzielonego identyfikatora użytkownika. Jeśli aplikacja deklaruje android:sharedUserMaxSdkVersion i jest nowo zainstalowana na urządzeniach z Androidem 13 lub nowszym, zachowuje się tak, jakby android:sharedUserId nigdy nie zostało zdefiniowane. Zaktualizowane aplikacje nadal używają dotychczasowego wspólnego identyfikatora użytkownika.

Współdzielone identyfikatory użytkowników powodują niedeterministyczne działanie w menedżerze pakietów. Aplikacja powinna zamiast tego korzystać z odpowiednich mechanizmów komunikacji, takich jak usługi i dostawcy treści, aby ułatwiać współdziałanie między udostępnionymi komponentami.

Interfejs użytkownika

Powiadomienia o usługach działających na pierwszym planie, które można odrzucić

Na urządzeniach z Androidem 13 lub nowszym użytkownicy mogą domyślnie odrzucać powiadomienia związane z usługami działającymi na pierwszym planie.

Główna funkcja

Usunięto starszą kopię implementacji usługi mowy

Android 13 usuwa z aplikacji Google implementację SpeechService, w tym klawiaturę głosową, RecognitionServiceinterfejs API oparty na intencjach.

W Androidzie 12 wprowadziliśmy te zmiany:

  • Funkcje SpeechService zostały przeniesione do aplikacji Usługi głosowe Google, która stała się domyślnym dostawcą SpeechService.
  • Funkcja RecognitionService została przeniesiona do aplikacji Android System Intelligence, aby obsługiwać rozpoznawanie mowy na urządzeniu.

Aby zachować zgodność aplikacji na Androidzie 12, aplikacja Google używa trampoliny do przekierowywania ruchu do aplikacji Usługi mowy Google. Na Androidzie 13 ta trampolina została usunięta.

Aplikacje powinny używać domyślnego dostawcy na urządzeniu w przypadku SpeechService, zamiast na stałe kodować konkretną aplikację.