Silne pomijanie to tryb dostępny w kompilatorze. Po włączeniu zmienia działanie kompilatora na 2 sposoby:
- Elementy kompozycyjne z niestabilnymi parametrami muszą być możliwe do pominięcia
- Funkcje lambda z niestabilnymi zapisami są zapamiętywane
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ą.