Zrzuty zadań

Zrzuty zadań to infrastruktura wprowadzona w Androidzie 8.0, która łączy zrzuty ekranu z ostatnimi miniaturami oraz zapisanymi miejscami w Menedżerze okien. Ostatnie miniatury przedstawiają ostatni stan zadania w widok Ostatnie.

Gdy działanie zostało zatrzymane, Menedżer okien nie zniszczył pliku w obszarach aktywności, o ile jest ona u góry zadania. Jeśli trzeba było wyświetlić tę aktywność ponownie, Menedżer okien mógł uruchomić bez czekania, aż zadanie zakończy rysowanie pierwszej klatki, mógł użyć tej zapisanej powierzchni.

Architektura

Dwie koncepcje dotyczące miniatur ostatnich i zapisanych miejsc są połączone w sekcji Task Zrzuty danych. Gdy zadanie przechodzi w tle, Menedżer okien umieszcza zrzut ekranu do obiektu GraphicBuffer. Jeśli aplikacja na górze strony aktywność tego zadania pozostanie w pamięci, ten komponent GraphicBuffer zostanie zachowany w pamięci. Teraz, gdy to samo działanie zostanie przeniesione na wierzch, Menedżer utworzy okno początkowe (TaskSnapshotSurface) i dołączy do GraphicBuffer bez kopiowania pamięci do kolejki bufora początkowego okno. Gdy tylko aktywność wygeneruje pierwszą klatkę, zrzut zadania okno początkowe płynnie zanika, tak jak na zwykłym ekranie powitalnym.

Ten sam element GraphicBuffer jest również wysyłany do Binder do SystemUI, który ma służyć do rysowania. stan podglądu zadania w widoku Ostatnie. To tylko plik referencyjny w buforze, wysłanie go przez Binder spowoduje zużycie kilku zasobów. Gdy GraphicBuffer trafia do SystemUI, gdzie jest dołączane do sprzętowej mapy bitowej, a następnie jest rysowana na ekranie bez przesyłania pamięci do pamięci graficznej.

Zalety

Nowa architektura ma 3 główne zalety:

  • Jeśli zrzut zadania jest używany jako okno początkowe, uzyskasz ładny przenikanie między migawką a prawdziwą treścią.
  • Zrzut zadania jest wywoływany w interfejsie SystemUI bez żadnych kopiowanie. Wcześniej bitmapę trzeba było kopiować do Ashmem, a potem do grafiki. pamięci. Ponieważ ta metoda zapisuje zrzut bezpośrednio w pamięci graficznej, nie wymagane jest kopiowanie.
  • Stan w sekcji Ostatnie zawsze jest zgodny ze stanem, który zobaczysz po raz pierwszy, ponowne uruchomienie aplikacji. Ten sam bufor również pozwala zaoszczędzić sporo pamięci. Dlatego sekcja Ostatnie może teraz wyświetlać te zdjęcia w pełnej rozdzielczości. Wcześniej próbkowanie było o 64% mniejsze w celu zaoszczędzenia pamięci.

Implementacja

Ta funkcja jest w całości dostępna na platformie Androida. Brak integracji wymagane, a dostosowanie nie jest obsługiwane. Producenci urządzeń mogą jednak całkowicie wyłączyć funkcję zrzutów zadań.

Aby wyłączyć tę funkcję, zmień ją:

frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotController.java#215

Pamiętaj, że jeśli ta funkcja jest wyłączona, w widoku Ostatnie nie będą wyświetlane żadne miniatur.

Migawki w wysokiej i niskiej rozdzielczości

Zrzuty zadań są zapisywane na dysku w 2 skalach. Podczas przywracania zadania z dysku, zrzuty w niskiej rozdzielczości są najpierw odczytywane, a następnie zastępowane ich odpowiednik w wysokiej rozdzielczości. Ta optymalizacja skraca czas wczytywania obrazów. W przeciwnym razie może wystąpić niewielkie opóźnienie podczas odczytu pliku zrzutu i użytkownik będzie widzieć pustą kartę zadań, dopóki obraz nie będzie dostępny. Skale możesz skonfigurować w pliku konfiguracji nakładki urządzenia overlay/frameworks/base/core/res/res/values/config.xml według ustawienia config_highResTaskSnapshotScale i config_lowResTaskSnapshotScale Domyślnie mają one wartość 1, 0. i 0,5. Wyłącz zrzuty w niskiej rozdzielczości za pomocą ustawienia config_lowResTaskSnapshotScale do 0,0.

Przykłady i źródło

Resztę kodu tej funkcji znajdziesz w plikach TaskSnapshot* w następującym miejscu:

frameworks/base/+/main/services/core/java/com/android/server/wm/