W przypadku problemów ze skutecznością wynikających ze zbyt duże zmiany kompozycji, należy debugować stabilność aplikacji. Ten przewodnik Google podaje kilka metod.
Narzędzie do inspekcji układu
Inspektor układów w Android Studio pozwala sprawdzić, które elementy kompozycyjne i ponowne kompilowanie treści w aplikacji. Wyświetla liczbę przypadków ponownie skomponował lub pominął komponent.
Raporty kompilatora tworzenia wiadomości
Kompilator Compose może zwrócić wyniki wnioskowania dotyczącego stabilności inspekcja. Na podstawie tych danych wyjściowych możesz określić, które z elementów kompozycyjnych możliwe do pominięcia, a które nie. Poniżej podsumowujemy, jak korzystać z tych funkcji. raportów, ale bardziej szczegółowe informacje można znaleźć w sekcji dotyczącej dokumentacji.
Konfiguracja
Raporty kompilatora Compose nie są domyślnie włączone. Możesz je aktywować za pomocą
flagę kompilatora. Dokładna konfiguracja zależy od
projektu, ale w przypadku projektów korzystających z wtyczki Gradle kompilatora Compose można
dodaj następujące elementy w każdym pliku build.gradle
modułów.
android { ... }
composeCompiler {
reportsDestination = layout.buildDirectory.dir("compose_compiler")
metricsDestination = layout.buildDirectory.dir("compose_compiler")
}
Raporty kompilatora Compose będą teraz generowane podczas tworzenia projektu.
Przykładowe dane wyjściowe
Na wyjściu reportsDestination
są 3 pliki. Poniżej znajdziesz przykładowe dane wyjściowe
od JetSnack.
<modulename>-classes.txt
: raport o stabilności zajęć w tym . Fragment.<modulename>-composables.txt
: raport na temat możliwości ponownego uruchomienia elementy kompozycyjne, które można pominąć. Fragment.<modulename>-composables.csv
: wersja raportu dotyczącego kompozycji (CSV
) które można zaimportować do arkusza kalkulacyjnego lub przetworzyć za pomocą skryptu. Przykład
Raport Kompozycje
Plik composables.txt
zawiera szczegółowe informacje o każdej funkcji kompozycyjnej dostępnej dla danego argumentu
w tym stabilność ich parametrów oraz to, czy są one
których nie da się pominąć
lub które można pominąć. Oto hipotetyczny przykład z
JetSnack:
restartable skippable scheme("[androidx.compose.ui.UiComposable]") fun SnackCollection(
stable snackCollection: SnackCollection
stable onSnackClick: Function1<Long, Unit>
stable modifier: Modifier? = @static Companion
stable index: Int = @static 0
stable highlight: Boolean = @static true
)
Tę kompozycję SnackCollection
można w pełni ponownie uruchomić, pominąć
stabilną. Zwykle jest to preferowane, ale nie jest obowiązkowe.
Z drugiej strony przyjrzyjmy się innemu przykładowi.
restartable scheme("[androidx.compose.ui.UiComposable]") fun HighlightedSnacks(
stable index: Int
unstable snacks: List<Snack>
stable onSnackClick: Function1<Long, Unit>
stable modifier: Modifier? = @static Companion
)
Elementu kompozycyjnego HighlightedSnacks
nie można pominąć. Tworzenie wiadomości nigdy nie jest pomijane
podczas ponownego komponowania. Dzieje się tak nawet wtedy, gdy żaden z ich parametrów się nie zmienił.
Przyczyną takiego problemu jest parametr unstable
(snacks
).
Raport Zajęcia
Plik classes.txt
zawiera podobny raport na temat klas w podanych
. Ten fragment kodu zawiera dane wyjściowe klasy Snack
:
unstable class Snack {
stable val id: Long
stable val name: String
stable val imageUrl: String
stable val price: Long
stable val tagline: String
unstable val tags: Set<String>
<runtime stability> = Unstable
}
Oto definicja terminu Snack
:
data class Snack(
val id: Long,
val name: String,
val imageUrl: String,
val price: Long,
val tagline: String = "",
val tags: Set<String> = emptySet()
)
Kompilator Compose oznaczył wersję Snack
jako niestabilną. To dlatego, że typ tagu
parametr tags
ma wartość Set<String>
. Jest to typ stały, ponieważ
nie ma statusu MutableSet
. Jednak standardowe klasy zbioru, takie jak Set, List
,
a Map
to interfejsy. W związku z tym podstawowa implementacja może
których nie można zmienić.
Możesz na przykład wpisać val set: Set<String> = mutableSetOf("foo")
.
jest stała, a jej zadeklarowany typ nie jest zmienny,
implementacji można nadal zmieniać. Kompilator Compose nie może mieć pewności,
niezmienność tej klasy, ponieważ widzi tylko zadeklarowany typ. W związku z tym oznacza
tags
jako niestabilny.