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 wartości targetSdkVersion. W razie potrzeby przetestuj aplikację i zmodyfikuj ją, aby obsługiwała te zmiany.

Zapoznaj się też z listą zmian w działaniu, które wpływają tylko na aplikacje kierowane na Androida 13.

Wydajność i bateria

Menedżer zadań

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

Od Androida 13 (API na poziomie 33) użytkownicy mogą zatrzymywać aplikacje z usługami działającymi na pierwszym planie, wykonując proces z poziomu panelu powiadomień, jak pokazano na rysunku 1. Ta funkcja nosi nazwę Menedżer zadań. Aplikacje muszą być w stanie obsługiwać to zatrzymywanie inicjowane przez użytkownika.

Ulepszenie obsługi zadań wstępnego pobierania za pomocą JobScheduler

JobScheduler umożliwia aplikacjom oznaczanie określonych zadań jako „wstępne pobieranie” zadań (za pomocą JobInfo.Builder.setPrefetch()). Oznacza to, że powinny one idealnie działać blisko i przed następnym uruchomieniem aplikacji, aby poprawić wrażenia użytkownika. W przeszłości JobScheduler używał tylko sygnału, aby umożliwić zadaniom wstępnego pobierania korzystanie z wolnych lub nadmiarowych danych.

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

Wykorzystanie zasobów baterii

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

Podczas testowania aplikacji z tymi zmianami sprawdź te kwestie:

  • Sprawdź, jak aplikacja reaguje, gdy system umieści ją w "ograniczonym" zasobniku 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 aplikacja reaguje na te ograniczenia, które zwykle dotyczą aplikacji w stanie "ograniczonym" w przypadku wykorzystania baterii w tle:

    • Nie można uruchamiać usług na pierwszym planie.
    • Istniejące usługi na pierwszym planie są usuwane z pierwszego planu.
    • Alarmy nie są wywoływane.
    • 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 w chmurze Firebase (FCM) o wysokim priorytecie

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

  • Zasobniki czuwania aplikacji nie określają już, ile wiadomości FCM o wysokim priorytecie może używać aplikacja.
  • System obniża teraz priorytet wiadomości o wysokim priorytecie, jeśli wykryje, że aplikacja stale wysyła takie wiadomości, które nie powodują wyświetlenia powiadomienia.

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 wiadomość FCM zalecamy sprawdzenie wyniku RemoteMessage.getPriority() i potwierdzenie, że jest to PRIORITY_HIGH, oraz obsługę wszelkich potencjalnych wyjątków ForegroundServiceStartNotAllowedException.

Jeśli Twoja aplikacja nie zawsze wysyła powiadomienia w odpowiedzi na wiadomości FCM o wysokim priorytecie, zalecamy zmianę priorytetu tych wiadomości na normalny , aby wiadomości, które powodują wyświetlenie powiadomienia, nie były obniżane.

Prywatność

Uprawnienia do powiadomień w czasie działania aplikacji

Android 13 (API na poziomie 33) wprowadza uprawnienia do powiadomień w czasie działania : POST_NOTIFICATIONS. Ta zmiana pomaga użytkownikom skupić się na powiadomieniach, które są dla nich najważniejsze.

Zdecydowanie zalecamy jak najszybsze kierowanie aplikacji na Androida 13 lub nowszego, aby skorzystać z dodatkowej kontroli i elastyczności tej funkcji.

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

Ukrywanie treści o charakterze kontrowersyjnym w schowku

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

Podgląd skopiowanego tekstu bez oznaczania treści o charakterze kontrowersyjnym
Podgląd skopiowanego tekstu bez oznaczania treści o charakterze kontrowersyjnym.
Podgląd skopiowanego tekstu z oznaczeniem treści o charakterze kontrowersyjnym.
Podgląd skopiowanego tekstu z oznaczaniem treści o charakterze kontrowersyjnym.

Aby oznaczyć treści o charakterze kontrowersyjnym, dodaj do ClipDescription wartość logiczną. Wszystkie aplikacje powinny to zrobić, 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)
    }
}

Aby dowiedzieć się więcej o nowym interfejsie schowka, wejdź na stronę funkcji kopiowania i wklejania.

Bezpieczeństwo

Migracja z udostępnionego identyfikatora użytkownika

Jeśli Twoja aplikacja używa wycofanego android:sharedUserId atrybutu i nie zależy już od jego funkcji, możesz ustawić android:sharedUserMaxSdkVersion atrybut 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 Twoja aplikacja nie korzysta już z udostępnionego identyfikatora użytkownika. Jeśli Twoja aplikacja deklaruje android:sharedUserMaxSdkVersion i jest nowo zainstalowana na urządzeniach z Androidem 13 lub nowszym, zachowuje się tak, jakby nigdy nie zdefiniowano android:sharedUserId. Zaktualizowane aplikacje nadal używają dotychczasowego udostępnionego identyfikatora użytkownika.

Udostępnione identyfikatory użytkowników powodują niedeterministyczne działanie w menedżerze pakietów. Aby ułatwić współdziałanie między udostępnionymi komponentami, aplikacja powinna używać odpowiednich mechanizmów komunikacji, takich jak usługi i dostawcy treści.

Interfejs użytkownika

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

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

Główna funkcjonalność

Usunięcie starszej wersji implementacji usługi mowy

Android 13 usuwa z aplikacji Google implementację SpeechService – w tym Voice IME, RecognitionService i interfejs API oparty na intencjach —from the Google app.

W Androidzie 12 wprowadzono te zmiany:

Aby zachować zgodność aplikacji z Androidem 12, aplikacja Google używa trampoliny do przekierowywania ruchu do aplikacji Usługi głosowe Google. W Androidzie 13 ta trampolina została usunięta.

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