Do systemu Android Pie dodano funkcję zapobiegającą zabijaniu gier obciążających pamięć RAM w przypadku przypadkowego wyjścia

Android Pie zostanie udostępniony dzisiaj, a jedną z fajnych, ukrytych funkcji jest możliwość zapobiegania zabijaniu gier obciążających pamięć RAM w przypadku przypadkowego wyjścia.

Dzisiaj rano Google oficjalnie ogłoszone Android Pie dla Google Pixel i Google Pixel 2. Zaraz potem Wydano niezbędne aktualizację Androida 9 dla Essential Phone. Inne urządzenia, które wzięły udział w programie beta Androida P powinna wkrótce otrzymać aktualizację, więc użytkownicy, którzy pominęli Podglądy Deweloperskie, mają teraz sporo do nadrobienia. Kiedy zagłębiamy się w najnowszą wersję, w tym upuszczenie kodu źródłowego na AOSP i najnowszy dokument definicji zgodności (CDD), będziemy okresowo aktualizować wszelkie nowe informacje, które odkryjemy. Coś interesującego, co znaleźliśmy w CDD, to sekcja „ciężkich” (zawierających dużo pamięci RAM) aplikacji i gier w którym Android Pie priorytetowo będzie przechowywać te aplikacje w pamięci RAM, jeśli użytkownik przypadkowo wyjdzie ich.

Aplikacje i gry „Heavyweight” w systemie Android Pie

Dodano nową sekcję do CDD który opisuje tę funkcję. Oto co napisano:

3.17. Aplikacje wagi ciężkiej

Jeśli implementacje urządzeń deklarują funkcję FEATURE_CANT_SAVE_STATE, to:

  • [C-1-1] MUSI mieć zainstalowaną tylko jedną aplikację, która określa cantSaveState uruchomioną w systemie w danym momencie. Jeśli użytkownik opuści taką aplikację bez wyraźnego jej zamknięcia (na przykład naciskając przycisk Home podczas opuszczania aktywnej aktywności, system zamiast naciskając przycisk Wstecz bez pozostania aktywne działania w systemie), wówczas implementacje urządzeń MUSZĄ nadać priorytet tej aplikacji w pamięci RAM, tak jak ma to miejsce w przypadku innych rzeczy, które powinny pozostać uruchomione, takich jak pierwszy plan usługi. Gdy taka aplikacja działa w tle, system może nadal stosować w niej funkcje zarządzania energią, takie jak ograniczanie dostępu procesora i sieci.
  • [C-1-2] MUSI zapewnić interfejs użytkownika, aby wybrać aplikację, która nie będzie uczestniczyć w mechanizmie zapisywania/przywracania stanu normalnego, gdy użytkownik uruchomi drugą aplikację zadeklarowaną z atrybutem cantSaveState.
  • [C-1-3] NIE MOŻE stosować innych zmian w zasadach do aplikacji, które określają cantSaveState, takich jak zmiana wydajności procesora lub zmiana priorytetów harmonogramu.

Jeśli implementacje urządzeń nie deklarują tej funkcji FEATURE_CANT_SAVE_STATE , wtedy oni:

  • [C-1-1] MUSI ignorować atrybut cantSaveState ustawiony przez aplikacje i NIE MOŻE zmieniać zachowania aplikacji w oparciu o ten atrybut.

Zasadniczo oznacza to, że jeśli urządzenie obsługuje FEATURE_CANT_SAVE_STATE funkcji, wówczas muszą priorytetowo potraktować przechowywanie w pamięci RAM działającej aplikacji, która określa nie można zapisać stanu atrybut. To nadanie priorytetu pamięci RAM rozpoczyna się, gdy użytkownik wyjdzie z aplikacji lub gry poprzez naciśnięcie przycisku strony głównej lub opuszczenie aplikacji lub gry bez wyraźnego jej wyjścia (np. poprzez naciśnięcie przycisku Wstecz lub przycisk zakończenia). Co więcej, system może nadal oszczędzać energię, ograniczając dostęp tych aplikacji do procesora i sieci, ale nie mogą one po prostu zwolnić pamięci RAM, zabijając je, chyba że jest to niezbędny. Na koniec należy pamiętać, że może działać tylko jedna aplikacja ze zdefiniowanym atrybutem cantSaveState. Jeśli spróbujesz uruchomić inną aplikację z tym atrybutem, gdy inna jest uruchomiona, Android Pie poprosi Cię o wybranie gry, którą chcesz kontynuować.

Możesz sprawdzić, czy Twoje urządzenie obsługuje FEATURE_CANT_SAVE_STATE, uruchamiając następujące dwa polecenia za pośrednictwem ADB:

adb shell
dumpsys package | grep "cant_save_state"

Aby sprawdzić, czy aplikacja ma atrybut cantSaveState, należy ją zdekompilować i przejrzeć jej manifest lub użyć dumpsys package package.name.here polecenie w powłoce ADB. Należy pamiętać, że ten atrybut został dodany dopiero na poziomie interfejsu API 28 (Android 9 Pie), więc jest mało prawdopodobne, że wiele aplikacji lub gier będzie jeszcze z niego korzystać.

Ta funkcja będzie niezwykle przydatna w przypadku urządzeń z małą ilością pamięci RAM i/lub aplikacji zużywających mnóstwo pamięci RAM. Na przykład Fortnite Mobile na Androida wymaga minimum 3 GB pamięci RAM ze względu na ilość zużywanej pamięci RAM (nawet bez uruchamiania gry Fortnite Mobile rezerwował 1,6 GB pamięci RAM w moim Google Pixel 2 XL). Gdyby Fortnite miał celować w SDK poziom 28 i użyj tej funkcji, oznacza to, że przypadkowe wyjście z gry, miejmy nadzieję, zapobiegnie jej natychmiastowemu zabiciu, jeśli Twoje urządzenie będzie na wyczerpaniu wolna pamięć RAM. Niestety Fortnite’a dotyczy tylko poziomu SDK 21 obecnie (Android 5.0 Lollipop), więc niestety nie korzysta z najnowszych interfejsów API oferowanych przez Google w systemie Android Pie, nie mówiąc już o Androidzie Oreo, Androidzie Nougat czy Androidzie Marshmallow. Mamy nadzieję, że inne gry zaktualizują się, aby skorzystać z tej funkcji. W przyszłym roku Google będzie ich wymagać zaktualizować, jeśli chcą mieć możliwość dalszego przesyłania aktualizacji w sklepie Google Play.