Hibernacja aplikacji

Przeciętny użytkownik Androida instaluje na swoich urządzeniach ponad 50 aplikacji (liczba ta rośnie wraz z wielkością pamięci RAM urządzenia). Jednak znaczna liczba tych aplikacji nie jest używana przez użytkownika przez długi czas.

Hibernacja aplikacji wprowadza w stan hibernacji aplikacje, których użytkownik nie używa od kilku miesięcy, podobnie jak automatyczne anulowanie uprawnień. Wymusza to zatrzymanie aplikacji i przełącza ją w stan, w którym optymalizujemy ją pod kątem miejsca na dane, a nie wydajności. Automatyczne cofanie uprawnień jest również powiązane z tym stanem i ma takie samo ustawienie wyłączenia w Ustawieniach. Wymuszone zatrzymanie aplikacji powoduje, że nie wykonuje ona zadań ani alertów w tle i nie może wysyłać powiadomień push. Gdy użytkownik ponownie użyje aplikacji, wyjdzie ona z trybu hibernacji, a zadania, alerty i powiadomienia będą działać jak zwykle. Wszystkie zadania, alerty i powiadomienia zaplanowane przed przejściem aplikacji w stan hibernacji muszą zostać zaplanowane ponownie.

Modyfikacje platformy wprowadzane przez producentów OEM mogą powodować konflikty z implementacją hibernacji aplikacji. Na przykład

  • Zmiana definicji korzystania z aplikacji lub wprowadzenie sposobów wybudzania aplikacji, które nie są dostępne w AOSP, może zakłócić dokładność hibernacji aplikacji.
  • Podobną funkcję może pełnić mechanizm ograniczeń własnościowych OEM, podobny do hibernacji aplikacji. Oba mogą istnieć, ale mogą się częściowo pokrywać.

Dokument CDD zawiera nowy zestaw wymagań dotyczących zmian opartych na korzystaniu z aplikacji, podobny do istniejącego wymagania 3.5.1. Hibernacja aplikacji podlega tym wymaganiom.

Kod platformy znajduje się w:

Logika zasad znajduje się w:

  • repo: platform/packages/modules/Permission
  • directory: PermissionController/src/com/android/permissioncontroller/hibernation

Architektura wysokiego poziomu

Usługa hibernacji aplikacji optymalizuje rzadko używane aplikacje pod kątem miejsca na dane i zapobiega ich działaniu w tle. Aby osiągnąć te wyniki, podczas hibernacji aplikacji:

  • Automatyczne anulowanie uprawnień
  • Wymuszanie zatrzymania aplikacji
  • Usuń pliki ODEX i VDEX.
  • Usuwanie pamięci podręcznej aplikacji

Naszym celem jest wdrożenie hibernacji jako działania odwracalnego, aby aplikacja była nadal dostępna dla użytkownika w Launcherze i innych miejscach z nienaruszonymi danymi aplikacji. Po uruchomieniu aplikacji przywrócimy ją z stanu wymuszonego zatrzymania i będziemy kontynuować tworzenie plików ODEX i VDEX w zwykły sposób.

Planowany interfejs składa się z 2 głównych części:

  • Określanie, kiedy pakiet powinien przejść w stan hibernacji
  • Optymalizacja pakietu hibernacji

Nowa usługa systemowa AppHibernationService i usługa zadań AppHibernationJobService,PermissionController to elementy, które kontrolują ogólne podejmowanie decyzji i logikę.

Decyzja o tym, kiedy pakiet powinien przejść w stan uśpienia, jest podejmowana głównie na podstawie UsageStatsService i zarządzana przez AppHibernationJobServicePermissionController. Logika tej zasady znajduje się w PermissionController, co umożliwia nam dynamiczne aktualizowanie jej za pomocą Mainline. Planujemy też dodać nowy sygnał, wykorzystanie komponentów, aby rejestrować wykorzystanie komponentów pakietu (np. usług, dostawców treści) jako nowy rodzaj danych w UsageStatsService.

Optymalizacja pakietu to proces, w którym następuje faktyczne zmniejszenie rozmiaru i optymalizacja. AppHibernationService komunikuje się z różnymi częściami systemu, aby zatrzymać pakiet, usunąć dane z pamięci podręcznej, usunąć artefakty ART itp. Cofanie uprawnień jest inicjowane bezpośrednio z AppHibernationJobService, aby zachować funkcję automatycznego cofania uprawnień na urządzeniach z Androidem 11 i starszymi wersjami.

Interfejs użytkownika

Użytkownik otrzymuje informacje i ma kontrolę nad tym, które aplikacje mogą być hibernowane.

Podobnie jak w przypadku automatycznego cofania dostępu użytkownik otrzymuje powiadomienie o tym, które aplikacje zostały uśpione, i ma możliwość przejścia do Ustawień bezpośrednio z powiadomienia, aby otworzyć aplikację i wybudzić ją z uśpienia lub usunąć nieużywaną aplikację, jeśli jest to wymagane.

Nadal obsługujemy intencję dewelopera, który prosi użytkownika o zwolnienie z hibernacji, za pomocą istniejącej intencji zwolnienia z automatycznego cofania uprawnień.

Zgodność wsteczna

Funkcje związane z hibernacją są dostępne od Androida 12. Ta funkcja nie działa w starszych wersjach, ponieważ nie ma w nich komponentów platformy (np. nowej usługi systemowej). Automatyczne odwoływanie uprawnień działa tak samo jak w przypadku wcześniejszych wersji systemu operacyjnego.

Aby zapewnić zgodność wsteczną, w Androidzie 12 i nowszych na stronie aplikacji w sekcji Aplikacje i powiadomieniaUstawieniach dodano przełącznik hibernacji. Oryginalny przełącznik automatycznego cofania uprawnień pozostawiono w podmenu Uprawnienia. Ten przełącznik kontroluje ogólne wyłączenie systemu hibernacji aplikacji w przypadku tej aplikacji.

Dostosowywanie

Część implementacji jest częścią modułowego komponentu systemu, dlatego partnerzy nie powinni modyfikować tej funkcji. Partnerzy mogą zamiast tego wdrożyć podobne funkcje, o ile spełniają wymagania dotyczące należytej staranności wobec klienta.

W przypadku wszystkich aplikacji kierowanych na Androida 11 lub nowszego hibernacja aplikacji powinna być domyślnie WŁĄCZONA. Działa to tak samo jak automatyczne anulowanie uprawnień. Chociaż samo ustawienie może być WŁĄCZONE, implementacja hibernacji aplikacji może się różnić w zależności od tego, czy aplikacja jest przeznaczona na Androida 11 czy Androida 12. W przypadku aplikacji kierowanych na Androida 11 hibernacja aplikacji działa tylko w przypadku aplikacji kierowanych na Androida 11, natomiast w przypadku aplikacji kierowanych na Androida 12 jest to w zasadzie tylko automatyczne wycofywanie.

Podobną funkcję mogą też wdrażać producenci OEM. Funkcje te są jednak ukierunkowane na znacznie krótszy okres optymalizacji baterii, który może być specyficzny dla danego producenta OEM. Wszelkie podobne funkcje ograniczania dostępu do aplikacji opracowane przez producentów OEM mogą współistnieć z systemem hibernacji aplikacji, o ile spełniają obecne kryteria określone w CDD.

Testowanie

Hibernacja aplikacji ma testy CTS i jednostkowe, które zapewniają jej prawidłowe działanie.