Intensywny tryb pomijania

Silne pomijanie to tryb dostępny w kompilatorze. Po włączeniu zmienia działanie kompilatora na 2 sposoby:

.

Włącz tryb silnego pomijania

Aby włączyć silne pomijanie w module Gradle, uwzględnij w dokumencie blok composeCompiler konfiguracji Gradle:

android { ... }

composeCompiler {
   enableStrongSkippingMode = true
}

Możliwość pominięcia elementu kompozycyjnego

Tryb silnego pomijania powoduje złagodzenie niektórych reguł dotyczących stabilności, które są zwykle stosowane. w przypadku funkcji pomijania i kompozycji. Według domyślnie, kompilator Compose oznacza funkcję kompozycyjną jako możliwą do pominięcia, jeśli wszystkie jego argumenty mają stałe wartości. Zmienia to stan silnego pomijania.

Po włączeniu silnego pomijania wszystkie funkcje kompozycyjne, które można ponownie uruchomić, stają się ale nie da się jej pominąć. Ta zasada ma zastosowanie niezależnie od tego, czy mają niestabilne parametry. Funkcje kompozycyjne, których nie można ponownie uruchomić, pozostaną niemożliwe do pominięcia.

Kiedy pominąć

Aby określić, czy pominąć kompozycję podczas zmiany kompozycji, funkcja Utwórz porównuje wartości poszczególnych parametrów wraz z ich poprzednimi wartościami. Typ porównania zależy od stabilności parametru.

  • Parametry niestabilne są porównywane z zastosowaniem równości instancji (===)
  • Parametry stabilne są porównywane z zastosowaniem równości obiektów (Object.equals())

Jeśli wszystkie parametry spełniają te wymagania, funkcja tworzenia wiadomości pomija funkcję kompozycyjną zmianę kompozycji.

W funkcji kompozycyjnej możesz chcieć zrezygnować z silnego pomijania. Oznacza to, że możesz zależy Ci na odtworzeniu reklamy z możliwością ponownego uruchomienia, ale niemożliwej do pominięcia. W takim przypadku użyj parametru @NonSkippableComposable adnotacja.

@NonSkippableComposable
@Composable
fun MyNonSkippableComposable {}

Oznacz klasy jako stabilne

Jeśli chcesz użyć obiektu z równością obiektów zamiast równości instancji, kontynuuje dodawanie adnotacji do danej klasy przy użyciu @Stable. Przykład wykorzystania jest to konieczne, obserwując całą listę obiektów, źródeł danych ponieważ sala przydzieli nowe obiekty do każdego elementu na liście w dowolnym momencie ich zmiany.

Notatka lambda

Silny tryb pomijania umożliwia lepsze zapamiętanie wartości lambda. w elementach kompozycyjnych. Przy włączonym silnym pomijaniu każda lambda w jest automatycznie zapamiętywana.

Przykłady

Aby zapamiętać informacje lambda w funkcjach kompozycyjnych przy korzystaniu z silnego pomijania, kompilator zawija Twoją lambdę wywołaniem remember. Kluczem do niego jest lambda.

Weźmy pod uwagę przypadek, w którym stosujesz lambdę, jak w tym przykładzie:

@Composable
fun MyComposable(unstableObject: Unstable, stableObject: Stable) {
    val lambda = {
        use(unstableObject)
        use(stableObject)
    }
}

Po włączeniu silnego pomijania kompilator zapamiętuje funkcję lambda, umieszczając ją w połączenie z użytkownikiem remember:

@Composable
fun MyComposable(unstableObject: Unstable, stableObject: Stable) {
    val lambda = remember(unstableObject, stableObject) {
        {
            use(unstableObject)
            use(stableObject)
        }
    }
}

Klucze podlegają tym samym zasadom porównywania co funkcje kompozycyjne. Środowisko wykonawcze porównuje klucze niestabilne z użyciem równości instancji. Porównuje klucze stabilne za pomocą funkcji równość obiektu.

Zapamiętywanie i zmiana kompozycji

Ta optymalizacja znacznie zwiększa liczbę elementów kompozycyjnych, jest pomijany podczas zmiany kompozycji. Bez zapamiętania informacji środowisko wykonawcze jest znacznie bardziej prawdopodobne aby przypisać nową funkcję lambda do dowolnego elementu kompozycyjnego, który podczas korzystania z parametru lambda zmianę kompozycji. W efekcie nowa funkcja lambda ma parametry, które nie są równe ostatnią kompozycję. Spowoduje to zmianę kompozycji.

Unikaj zapamiętywania

Jeśli masz wartość lambda, której nie chcesz zapamiętywać, użyj @DontMemoize adnotacja.

val lambda = @DontMemoize {
    ...
}

Rozmiar APK

Po skompilowaniu elementy kompozycyjne możliwe do pominięcia generują więcej kodu niż elementów kompozycyjnych, których nie można pominąć. Po włączeniu silnego pomijania oznacza prawie wszystkie elementy kompozycyjne jako możliwe do pominięcia i umieszcza wszystkie elementy lambda w elemencie remember{...} Z tego powodu włączenie silnego trybu pomijania ma bardzo mały na rozmiar pliku APK aplikacji.

Włączenie silnego pomijania w sekcji Now w Androidzie zwiększyło liczbę APK o rozmiarze 4 kB. Różnica w rozmiarze zależy w dużej mierze od liczby poprzednich niemożliwe do pominięcia elementy kompozycyjne, które były w danej aplikacji, ale powinny być stosunkowo niewielką.