Utwórz środowisko wykonawcze
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots}) wszystkie pakiety API
()
Najnowsza aktualizacja | Wersja stabilna | Kandydat do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
17 kwietnia 2024 r. | 1.6.6 | - | - | 1.7.0-alfa07 |
Struktura
Tworzenie stanowi połączenie 7 identyfikatorów grupy Maven w usłudze androidx
. Każda grupa zawiera wybrany podzbiór funkcji z własnym zestawem informacji o wersjach.
W tej tabeli opisano grupy i linki do poszczególnych zestawów informacji o wersji.
Grupa | Opis |
---|---|
compose.animation, | Twórz animacje w aplikacjach Jetpack Compose, aby zwiększyć wygodę użytkowników. |
compose.buildr, | Przekształć funkcje @Composable i włącz optymalizacje za pomocą wtyczki kompilatora Kotlin. |
compose.foundation | Pisz aplikacje Jetpack Compose, korzystając z gotowych elementów składowych i rozszerzaj podstawy do tworzenia własnych elementów systemu. |
compose.material, | Twórz interfejsy użytkownika Jetpack Compose z gotowymi do użycia komponentami Material Design. Jest to punkt wejścia wyższego poziomu Compose, zaprojektowany z myślą o dostarczaniu komponentów pasujących do tych opisanych na stronie www.material.io. |
compose.material3, | Twórz interfejsy użytkownika Jetpack Compose za pomocą komponentów Material Design 3, czyli nowej ewolucji Material Design. Material 3 zawiera zaktualizowane motywy i komponenty oraz funkcje personalizacji Material You, takie jak dynamiczny kolor. Został zaprojektowany tak, aby zachować spójność z nowym stylem wizualnym i interfejsem systemu Androida 12. |
compose.runtime, | Podstawowe elementy modelu programowania i zarządzania stanem w usłudze Compose, a także podstawowe środowisko wykonawcze, na które ma być kierowana wtyczka Compose Compiler. |
compose.ui; | Podstawowe komponenty interfejsu tworzenia wiadomości niezbędne do interakcji z urządzeniem, w tym układ, rysowanie i wprowadzanie tekstu. |
Deklarowanie zależności
Aby dodać zależność od Compose, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Google Maven.
W pliku build.gradle
aplikacji lub modułu dodaj zależności artefaktów, których potrzebujesz:
Odlotowy
dependencies { implementation "androidx.compose.runtime:runtime:1.6.6" implementation "androidx.compose.runtime:runtime-livedata:1.6.6" implementation "androidx.compose.runtime:runtime-rxjava2:1.6.6" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.12" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.6.6") implementation("androidx.compose.runtime:runtime-livedata:1.6.6") implementation("androidx.compose.runtime:runtime-rxjava2:1.6.6") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.12" } kotlinOptions { jvmTarget = "1.8" } }
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpack. Daj nam znać, jeśli znajdziesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj problemy z tą biblioteką. Możesz oddać głos w ramach istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Śledzenie środowiska wykonawczego w wersji 1.0
Wersja 1.0.0-beta01
29 listopada 2023 r.
Aplikacja androidx.compose.runtime:runtime-tracing:1.0.0-beta01
została zwolniona. Wersja 1.0.0-beta01 zawiera te zatwierdzenia.
Wersja 1.0.0-alfa05
15 listopada 2023 r.
Aplikacja androidx.compose.runtime:runtime-tracing:1.0.0-alpha05
została zwolniona. Wersja 1.0.0-alpha05 zawiera te zatwierdzenia.
Poprawki błędów
- Przypięto zależności do najniższych obsługiwanych stabilnych wersji (np.compose-runtime i tracing-perfetto). Naprawiono problem, który powodował, że funkcja śledzenia środowiska wykonawczego tworzenia prowadziła do nowszej wersji środowiska wykonawczego tworzenia wiadomości do aplikacji.
Wersja 1.0.0-alfa04
23 sierpnia 2023 r.
Aplikacja androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
została zwolniona. Wersja 1.0.0-alpha04 zawiera te zatwierdzenia.
Nowe funkcje
- Zgodne z najnowszymi wersjami testów porównawczych i śledzenia Perfetto, co umożliwia obsługę Composition Trackings podczas uruchamiania aplikacji (na zimno), np. w AndroidX Benchmark i Android Studio (od Hedgehog Beta 2).
Zmiany w interfejsie API
- Nazwa elementu
androidx.tracing.perfetto.Trace
została zmieniona naandroidx.tracing.perfetto.PerfettoSdkTrace
. (I44af8) - Uzyskiwanie zgodności interfejsów Tracking Perfetto SDK API z
android.os.Trace
. (I73ba0, b/282199917) - Wymagania wstępne śledzenia przy uruchamianiu aplikacji. (Iad890)
- Scalone pliki eksperymentalne i publiczne interfejsu API (I0f2e1, b/278769092)
Wersja 1.0.0-alfa02
8 lutego 2023 r.
Aplikacja androidx.compose.runtime:runtime-tracing:1.0.0-alpha02
została zwolniona. Wersja 1.0.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
- Bez zmian funkcjonalnych. Wiele optymalizacji wydajności w zależnościach na dalszych etapach:
androidx.tracing:tracing-perfetto*
.
Wersja 1.0.0-alfa01
7 września 2022 roku
Aplikacja androidx.compose.runtime:runtime-tracing:1.0.0-alpha01
została zwolniona. Wersja 1.0.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
androidx.compose.runtime:runtime-tracing
to biblioteka, która – dostępna w obecnej wersji obsługującej ją narzędzia – umożliwia rozszerzone śledzenie w aplikacji Compose. Ta początkowa wersja to 1.0.0-alfa01.
Wersja 1.7
Wersja 1.7.0-alfa07
17 kwietnia 2024 r.
Aplikacja androidx.compose.runtime:runtime-*:1.7.0-alpha07
została zwolniona. Wersja 1.7.0-alpha07 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano możliwość udostępniania lokalnej kompozycji, która jest obliczana na podstawie wartości innych kompozycji lokalnych kompozycji – domyślnie za pomocą funkcji
compositionLocalWithComputedDefault()
lub przez podanie funkcji lambda służącej do obliczenia wartości za pomocą funkcjiprovidesComputed
zamiastprovides
. - Wartość kompozycji lokalnej można uzyskać przy użyciu właściwości
currentValue
kompozycji dostępnej lokalnie z poziomu funkcji lambda obliczającej wartość. Jest on używany zamiast atrybutucurrent
, który jest dostępny tylko w funkcjach@Composable
. (Iadbc0)
Zmiany w interfejsie API
- Nowo utworzone obiekty stanu są natychmiast dostępne z innych zrzutów, w tym zrzutu globalnego, w stanie początkowym. Wszelkie kolejne zmiany nie będą widoczne do czasu zastosowania zrzutu, w którym utworzono obiekt.
- Stan początkowy obiektu
mutableStateOf()
, a także jego wersje podstawowe, to wartość przekazywana jako parametr do funkcjimutableStateOf()
. Stan początkowymutableStateListOf()
imutableStateMapOf()
jest pusty. - Dodano
Snapshot.isInSnapshot
iSnapshot.PreexistingSnapshotId
, które umożliwiają obiekt stanu obsługę natychmiastowego dostępu z globalnego zrzutu po jego utworzeniu. - Obiekty stanu niestandardowego mogą obsługiwać natychmiastowy dostęp, zgodnie ze wzorcem zmian wprowadzonych do wbudowanych obiektów zrzutu. (I84a17)
Poprawki błędów
- Rozwiązaliśmy problem scalania danych
readObserver
w zagnieżdżonych zrzutach. W efekcie zagnieżdżone stany derywowane były nieważne, gdy zostały użyte w elemenciesnapshotFlow
. (Idf138).
Wersja 1.7.0-alfa06
3 kwietnia 2024 r.
Aplikacja androidx.compose.runtime:runtime-*:1.7.0-alpha06
została zwolniona. Wersja 1.7.0-alpha06 zawiera te zatwierdzenia.
Poprawki błędów
- Podanie pojedynczych wartości w polu
providesDefault
(538f45) - Unikaj zakleszczenia w narzędziu Recomposer do uzyskiwania dostępu do zegara klatek (07e5c6)
Wersja 1.7.0-alfa05
20 marca 2024 r.
Aplikacja androidx.compose.runtime:runtime-*:1.7.0-alpha05
została zwolniona. Wersja 1.7.0-alpha05 zawiera te zatwierdzenia.
Poprawki błędów
- Usuń opóźnione zmiany w dezaktywowanej kompozycji (5950 bc)
Wersja 1.7.0-alfa04
6 marca 2024 roku
Aplikacja androidx.compose.runtime:runtime-*:1.7.0-alpha04
została zwolniona. Wersja 1.7.0-alpha04 zawiera te zatwierdzenia.
Ulepszenia wydajności
- Wywołaj metodę
Snapshot.current
raz na ocenę stanu derywowanego (ee7daf) - Odczytaj
currentRecord
raz na obserwację w kompozycji (b882b2) - Usuń przypadkowy przydział iteratora w:
snapshotFlow
(231e56) - Włącz
nonSkippingGroupOptimization
w bibliotekach tworzenia. Zwiększa to efektywność generowanego kodu dla wszystkich funkcji kompozycyjnych, których nie można ponownie uruchomić w Androidzie. W przyszłości planujemy włączyć tę opcję domyślnie. I(acbc08)
Wersja 1.7.0-alfa03
21 lutego 2024 r.
Aplikacja androidx.compose.runtime:runtime-*:1.7.0-alpha03
została zwolniona. Wersja 1.7.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Wprowadź grupy zastępujące w celu poprawy wykrywania zmian (0941b5)
Ulepszenia wydajności
- Zwiększanie alokacji pamięci w przypadku wykrywania zmian (53e7fd)
- Naprawianie wycieku pamięci w edytorze (0e097d)
- Użyj
ScopeMap
, aby przekazywać unieważnienia podczas ponownego tworzenia wiadomości (e19a7e) - Mapa unieważnień optymalizacji pozwala zachować tylko stany pochodne (f11c44)
- Zastąp przypadki użycia
IdentityArraySet
wartościąScatterSet
(db572e) - Optymalizuj
removeScope
w:ScopeMap
(bb0530)
Wersja 1.7.0-alfa02
7 lutego 2024 r.
Aplikacja androidx.compose.runtime:runtime-*:1.7.0-alpha02
została zwolniona. Wersja 1.7.0-alpha02 zawiera te zatwierdzenia.
Poprawki błędów
- Unieważniaj kompozycyjne lambda w komponentach w tej samej ramce. (98301c)
- Zadzwoń pod numer
onRelease
w tej samej kolejności coonForgotten
. (2cd790) - Filtruj zmienione stany, których nie zaobserwowano w
snapshotFlow
. (796b80)
Ulepszenia wydajności
- Zmodyfikuj obserwatora zrzutu, gdy jest już przezroczysty. (F60F30)
- Optymalizuj konto
SnapshotIdSet.lowest()
. (7ae149) - Użyj
fold()
bez alokacji wSnapshotIdSet
. (532b7d) - Usuń alokację iteratora (83f96b)
Wersja 1.7.0-alfa01
24 stycznia 2024 r.
Aplikacja androidx.compose.runtime:runtime-*:1.7.0-alpha01
została zwolniona. Wersja 1.7.0-alpha01 zawiera te zatwierdzenia.
Optymalizacja skuteczności
- Dodawanie możliwości tworzenia przedziałów po dodaniu grupy podrzędnej (b5960c)
- Optymalizacja modyfikacji rejestrowania stanów zrzutu (28c3fe)
- Włącz tryb silnego pomijania (ed1766)
Poprawki błędów
- uwzględnij metadane domyślnego parametru w wewnętrznej pamięci (096665)
- Unikalna wartość atrybutu
currentCompoundHashKey
w większej liczbie przypadków (d4a872) - Uzyskiwanie grup po wyjściu z wywołania funkcji wbudowanej (2a90fc)
Wersja 1.6
Wersja 1.6.6
17 kwietnia 2024 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.6
została zwolniona. Brak zmian od ostatniej wersji.
Wersja 1.6.5
3 kwietnia 2024 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.5
została zwolniona. Wersja 1.6.5 zawiera te zatwierdzenia.
Wersja 1.6.4
20 marca 2024 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.4
została zwolniona. Wersja 1.6.4 zawiera te zatwierdzenia.
Wersja 1.6.3
6 marca 2024 roku
Aplikacja androidx.compose.runtime:runtime-*:1.6.3
została zwolniona. Wersja 1.6.3 zawiera te zatwierdzenia.
Wersja 1.6.2
21 lutego 2024 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.2
została zwolniona. Wersja 1.6.2 zawiera te zatwierdzenia.
Wersja 1.6.1
7 lutego 2024 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.1
została zwolniona. Wersja 1.6.1 zawiera te zatwierdzenia.
Poprawki błędów
- Zadzwoń pod numer
onRelease
w tej samej kolejności coonForgotten
. (2cd790) - Filtruj zmienione stany, których nie zaobserwowano w
snapshotFlow
. (796b80)
Wersja 1.6.0
24 stycznia 2024 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.0
została zwolniona. Wersja 1.6.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.5.0
Nowe funkcje
- Ponowne zgłaszanie wyjątków, które są przetwarzane podczas pętli zmiany kompozycji (4dff9a)
Optymalizacja skuteczności
- Optymalizacja modyfikacji rejestrowania stanów zrzutu (28c3fe)
- Optymalizuj
rememberSaveable
(F01d79) - Odrocz ponowne odczytywanie stanów pochodnych do momentu zarejestrowania zmian (F38099)
- Poprawienie lokalnych wartości kompozycji (a337ea)
Poprawki błędów
- Naprawianie wycieku pamięci tabeli przedziałów (73fcfe)
- Pomiń zmianę kompozycji składowych, które zostaną usunięte. (Ieeb99, b/254645321)
- Wyzwalaj cykle życia funkcji
RememberObserver
tylko wtedy, gdy jest ona zapisana w obliczeniach zapamiętanych. (f6b4dc) - Ogranicz przechwytywanie
$dirty
do wbudowanych lambda. (acfca0) - Napraw błędy przenoszenia treści, które czasami otrzymują nieprawidłową kompozycję lokalną. (035cd6)
Wersja 1.6.0-rc01
10 stycznia 2024 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.0-rc01
została zwolniona. Wersja 1.6.0-rc01 zawiera te zatwierdzenia.
Wersja 1.6.0-beta03
13 grudnia 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.0-beta03
została zwolniona. Wersja 1.6.0-beta03 zawiera te zatwierdzenia.
Wersja 1.6.0-beta02
29 listopada 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.0-beta02
została zwolniona. Wersja 1.6.0-beta02 zawiera te zatwierdzenia.
Wersja 1.6.0-beta01
15 listopada 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.0-beta01
została zwolniona. Wersja 1.6.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Stosuj określone wartości stabilności w adnotacjach. (274a4c)
Poprawki błędów
- Użyj zasady referencyjnej dla stanu lokalnego zakresu kompozycji w kontekście. (83361c)
- Ogranicz przechwytywanie $dirty do wbudowanych lambda. (acfca0)
- Napraw błędy przenoszenia treści, które czasami otrzymują nieprawidłową kompozycję lokalną. (035cd6)
- Używaj szybszych, nieprzydzielonych map haszujących w
RecomposeScopeImpl
. (D79494) - Używaj konta
ObjectIntMap
w aplikacjiDerivedState
. (21862e) - Użyj
IntRef
jako liczby całkowitej (SnapshotThreadLocal
) w obiekcieDerivedState
. (04eaf4)
Wersja 1.6.0-alfa08
18 października 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.0-alpha08
została zwolniona. Wersja 1.6.0-alpha08 zawiera te zatwierdzenia.
Poprawki błędów
- Wyzwalaj cykle życia funkcji
RememberObserver
tylko wtedy, gdy jest ona zapisana w obliczeniach zapamiętanych. (f6b4dc) - Popraw przydziały przy sortowaniu listy unieważnień. (954d63)
- Użyj nowych map bez przydzielania lokalizacji w:
SnapshotStateObserver
. (4303ce) - Usuwaj unieważnienia, gdy kompozycja jest zdezaktywowana. (E001be)
Wersja 1.6.0-alfa07
4 października 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.0-alpha07
została zwolniona. Wersja 1.6.0-alpha07 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Komponent
SnapshotStateList
jest teraz oznaczony jakoRandomAccess
, aby można było używać wersji pomocniczej listy służącej do bezpośredniego indeksowania. (I5210c, b/219554654)
Wersja 1.6.0-alfa06
20 września 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.0-alpha06
została zwolniona. Wersja 1.6.0-alpha06 zawiera te zatwierdzenia.
Wersja 1.6.0-alfa05
6 września 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.0-alpha05
została zwolniona. Wersja 1.6.0-alpha05 zawiera te zatwierdzenia.
Wersja 1.6.0-alfa04
23 sierpnia 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.0-alpha04
została zwolniona. Wersja 1.6.0-alpha04 zawiera te zatwierdzenia.
Nowe funkcje
- Ponowne zgłaszanie wyjątków, które są przetwarzane podczas pętli zmiany kompozycji (4dff9a)
Zmiany w interfejsie API
- Dodano metodę dezaktywacji funkcji
ReusableComposition
, usuwając obserwacje, ale utrzymując węzły na swoim miejscu. Dezaktywowaną kompozycję można aktywować ponownie, dzwoniąc pod numersetContent
. (Ib7f31) - Dodano interfejs
ReusableComposition
, który umożliwia zarządzanie cyklem życia i ponownym używaniem podkompozycji. (I812d1, b/252846775)
Wersja 1.6.0-alfa03
9 sierpnia 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.0-alpha03
została zwolniona. Wersja 1.6.0-alpha03 zawiera te zatwierdzenia.
Poprawki błędów
- Popraw nową optymalizację
CompositionLocalProvider
(3118e88) - Popraw sposób demontowania ruchomych węzłów treści. (5e3d59b)
Wersja 1.6.0-alfa02
26 lipca 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.0-alpha02
została zwolniona. Wersja 1.6.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje i ulepszenia wydajności
- Optymalizuj
rememberSaveable
(F01d79) - Odrocz ponowne odczytywanie stanów pochodnych do momentu zarejestrowania zmian (F38099)
- Poprawienie lokalnych wartości kompozycji (a337ea)
- Grupa
SideEffect
jest oznaczona jako@ExplicitGroupsComposable
, aby uniknąć generowania grupy. (I74815) - Unikaj porównywania lokalnych map kompozycji podczas ponownego użycia (782071)
Zmiany w interfejsie API
- W przypadku elementu
CompositionLocalProviders
dodano specjalne przeciążenie wielkości liter. Pozwala to uniknąć nadmiarowego obciążenia, które powoduje szybsze podanie wielu wartości, ale jest nadmiarowe w przypadku podawania 1 wartości. (I6d640, b/288169379)
Poprawki błędów
- Naprawianie wycieku pamięci tabeli przedziałów (73fcfe)
- Jak przywracamy plik
rememberSaveable
, gdystateSaver
zwraca wartość null (90748c)
Wersja 1.6.0-alfa01
21 czerwca 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.6.0-alpha01
została zwolniona. Wersja 1.6.0-alpha01 zawiera te zatwierdzenia.
Poprawki błędów
- Pomiń zmianę kompozycji składowych, które zostaną usunięte. (Ieeb99, b/254645321)
- Zmniejszone przydziały podczas stosowania zrzutów. (I65c09)
- Unikaj obliczania
readableHash
wDerivedState
, jeśli zrzut nie został zmodyfikowany (68c565)
Wersja 1.5
Wersja 1.5.4
18 października 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.5.4
została zwolniona. Wersja 1.5.4 zawiera te zatwierdzenia.
Wersja 1.5.3
4 października 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.5.3
została zwolniona. Wersja 1.5.3 zawiera te zatwierdzenia.
Wersja 1.5.2
27 września 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.5.2
została zwolniona. Wersja 1.5.2 zawiera te zatwierdzenia.
Wersja 1.5.1
6 września 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.5.1
została zwolniona. Wersja 1.5.1 zawiera te zatwierdzenia.
Wersja 1.5.0
9 sierpnia 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.5.0
została zwolniona. Wersja 1.5.0 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Usunięto przydziały ze zmiany kompozycji, animacji kolorów i elementu
AndroidComposeView
. (Ib2bfa) - Dodano adnotację
@StateFactoryMarker
, aby oznaczyć funkcje, które tworzą stany i muszą być uwzględnione w wywołaniuremember
. (I64550) - Dodaj podstawowe wersje stanu i regionu
MutableState
(fb3d89) - Dodano
Snapshot.isApplyObserverNotificationPending
(I672a5) - Dodaliśmy podstawowe wersje interfejsu API
State
, co umożliwia śledzenie wartości Int, Long, Float i Double w obiektachState
bez nałożenia kar za autobox. Aby użyć tych metod, użyj nowych metod fabrycznych,mutableIntState(Int)
,mutableFloatStateOf(Float)
itp. (I48e43)
Poprawki błędów
- Pomiń zmianę kompozycji składowych, które zostaną usunięte. (Ieeb99, b/254645321)
- Nie zachowuj odnośnika do zrzutu w
ComposerImpl
(0206f7) - Nie stosuj kompozycji dwukrotnie (F5791b)
- Sprawdź, czy wartości nie zainicjowanych wartości derywowanych (aa2a92) są unieważnione
- Wywołaj
onEndChanges
podczas usuwania kompozycji. (62cc8c) - Naprawianie przenoszenia treści do kompozycji podrzędnej (4beb41)
- Naprawianie potencjalnych blokad wzajemnych (c1a425 i 8edce0)
- Narzędzie do tworzenia wiadomości utworzone dla okna Androida będzie teraz blokować połączenia z
withFrameNanos
zamiast do całej kompozycji, gdy otrzyma powiadomienie ON_STOP. Oznacza to, że okna powiązane ze zatrzymanymi aktywnościami będą nadal tworzone w celu zmiany danych, ale animacje lub inne elementy wywołującewithFrameNanos
zostaną zablokowane. (Id9e7f, b/240975572) - Wykonaj wywołania zwrotne dezaktywacji dla
LayoutNode
przed usunięciem efektów 3784073 - Poprawianie zmienionych flag lambda uruchamianych ponownie ea81df9
- Naprawianie regresji edycji na żywo elementu kompozycyjnego z węzłami 73fd4d8
- ON_STOP powinien wstrzymać transmisję klatki, a nie kompozycję ae276f1.
- Unieważnij zakresy
SnapshotStateObserver
dla niezmienionych stanów derywowanych 84d9b1c - Naprawianie potencjalnego zakleszczenia podczas usuwania kompozycji 28761fc
- Naprawianie przenoszenia treści do kompozycji podrzędnej 92d4156
- Poprawianie zmienionych flag lambda ponownie uruchamianych (8a03e9)
- Wykonaj wywołania zwrotne dezaktywacji dla
LayoutNode
przed usunięciem efektów (8b0fa4) - Napraw błąd
endToMarker()
podczas kończenia grup węzłów. (D71d980) - Do sprawdzenia dezaktywacji użyj bieżącej grupy
SlotWriter
(a0b518b) - Usuń
fill
w aplikacjiSlotTable.moveSlotGapTo()
i przenieś je, by zamknąć (81f9935) - Rozwiązywanie problemów z brakującymi unieważnieniami podczas przenoszenia treści przenoszonych (1d7c024)
- Rozwiązywanie problemów z natychmiastowym unieważnieniem przeniesionych treści (8676618)
Ulepszenia wydajności
- Unikaj obliczania
readableHash
wDerivedState
, jeśli zrzut nie został zmodyfikowany. (307102). - Ograniczone przydziały (I65c09, d7ea77, 727974 i 445808)
- Szybkie anulowanie tworzenia wiadomości
CoroutineScopes
(A55362 i bd382f) - Zastępowanie rekordów obiektów stanu z rekordami stanu niedostępnymi (C986960)
- Podczas realizacji grup użyj funkcji kompozytora o prawidłowym zakresie (9a5e5b6)
- Użyj
IdentityArraySet
do przechowywania unieważnień zrzutów (7f60cca) - Zmniejsz przydziały na potrzeby obserwacji zrzutów (5bc535f)
Wersja 1.5.0-rc01
26 lipca 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.5.0-rc01
została zwolniona. Wersja 1.5.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
Odrocz ponowne odczytywanie stanów pochodnych do momentu zarejestrowania zmian (F38099)
Dostępna jest opcjonalna kontrola, która zaleca migrację wywołań
mutableStateOf()
do odpowiednich typów wyspecjalizowanych w przypadku elementów podstawowych. Jego identyfikator lint toAutoboxingStateCreation
. Wcześniej ta kontrola była domyślnie włączona we wszystkich projektach. Aby zobaczyć to ostrzeżenie w edytorze Android Studio i wynikach lintowych projektu, zmień jego wagę z informacyjnej na ostrzeżenie (lub wyższą), deklarującwarning "AutoboxingStateCreation"
w konfiguracji modułu build.gradle lub build.gradle.kts (I34f7e):android { lint { warning "AutoboxingStateCreation" } ... }
Wersja 1.5.0-beta03
28 czerwca 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.5.0-beta03
została zwolniona. Wersja 1.5.0-beta03 zawiera te zatwierdzenia.
Poprawki błędów
- Pomiń zmianę kompozycji składowych, które zostaną usunięte. (Ieeb99, b/254645321)
Wersja 1.5.0-beta02
7 czerwca 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.5.0-beta02
została zwolniona. Wersja 1.5.0-beta02 zawiera te zatwierdzenia.
Ulepszenia wydajności
- Unikaj obliczania
readableHash
wDerivedState
, jeśli zrzut nie został zmodyfikowany. (307102).
Wersja 1.5.0-beta01
24 maja 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.5.0-beta01
została zwolniona. Wersja 1.5.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Usunięto przydziały ze zmiany kompozycji, animacji kolorów i pliku
AndroidComposeView
(Ib2bfa) - Dodano adnotację
@StateFactoryMarker
, aby oznaczyć funkcje, które tworzą stany i muszą być uwzględnione w wywołaniuremember
. (I64550) - Dodaj podstawowe wersje stanu i regionu
MutableState
(fb3d89) - Dodano
Snapshot.isApplyObserverNotificationPending
(I672a5)
Poprawki błędów
- Ograniczone przydziały (I65c09, d7ea77, 727974 i 445808)
- Nie zachowuj odnośnika do zrzutu w
ComposerImpl
(0206f7) - Szybkie anulowanie tworzenia wiadomości
CoroutineScopes
(A55362 i bd382f) - Nie stosuj kompozycji dwukrotnie (F5791b)
- Sprawdź, czy wartości nie zainicjowanych wartości derywowanych (aa2a92) są unieważnione
- Wywołaj
onEndChanges
podczas usuwania kompozycji. (62cc8c) - Naprawianie przenoszenia treści do kompozycji podrzędnej (4beb41)
- Naprawianie potencjalnych zakleszczeń (c1a425
- ON_STOP powinno wstrzymać transmisję klatki z zegarem zamiast kompozycji (f4a2d1)
- Poprawianie zmienionych flag lambda ponownie uruchamianych (8a03e9)
- Wykonaj wywołania zwrotne dezaktywacji dla
LayoutNode
przed usunięciem efektów (8b0fa4)
Wkład z zewnątrz
- Dodano
Snapshot.isApplyObserverNotificationPending
(I672a5)
Wersja 1.5.0-alfa04
10 maja 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.5.0-alpha04
została zwolniona. Wersja 1.5.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodaliśmy podstawowe wersje interfejsu API
State
, co umożliwia śledzenie wartości Int, Long, Float i Double w obiektachState
bez nałożenia kar za autobox. Aby użyć tych metod, użyj nowych metod fabrycznych,mutableIntState(Int)
,mutableFloatStateOf(Float)
itp. (I48e43)
Poprawki błędów
Wywołaj
onEndChanges
podczas usuwania kompozycji. Węzły usunięte podczasComposition.dispose
subskrybują węzełonEndChanges
, aby zresetować fokus.(03d4a47)Zadbaj o unieważnienie niezainicjowanych wartości stanu derywowanego. Każdy stan pochodny jest powiązany z listą zależności w funkcji
SnapshotStateObserver
, która służy do unieważniania zakresów powiązanych ze stanem pochodnym za każdym razem, gdy zmienia się zależność. Zmiana zależności jest rejestrowana w momencie wczytywania zrzutu, co może nastąpić po odczytaniu stanu pochodnego (z powodu wywołania metodySnapshot.notifyObjectsInitialized()
).Poprzednia logika obserwacji stanu pochodnego w projekcie
SnapshotStateObserver
oczyszcza stare zależności i odczytuje nową wartość. W rezultacie dochodziło do sytuacji, w której brakowało unieważnienia.Ta zmiana zmienia kolejność odczytu stanu pochodnego i czyszczenia zależności, dzięki czemu unieważnienie zawsze odbywa się w prawidłowym stanie. (c472be6)
Wersja 1.5.0-alfa03
19 kwietnia 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.5.0-alpha03
została zwolniona. Wersja 1.5.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Narzędzie do tworzenia wiadomości utworzone dla okna Androida będzie teraz blokować połączenia z
withFrameNanos
zamiast do całej kompozycji, gdy otrzyma powiadomienie ON_STOP. Oznacza to, że okna powiązane ze zatrzymanymi aktywnościami będą nadal tworzone w celu zmiany danych, ale animacje lub inne elementy wywołującewithFrameNanos
zostaną zablokowane. (Id9e7f, b/240975572)
Poprawki błędów
- Napraw potencjalne zakleszczenie na liście zrzutów i mapie 5c1a425
- Wykonaj wywołania zwrotne dezaktywacji dla
LayoutNode
przed usunięciem efektów 3784073 - Poprawianie zmienionych flag lambda uruchamianych ponownie ea81df9
- Naprawianie regresji edycji na żywo elementu kompozycyjnego z węzłami 73fd4d8
- ON_STOP powinien wstrzymać transmisję klatki, a nie kompozycję ae276f1.
- Unieważnij zakresy
SnapshotStateObserver
dla niezmienionych stanów derywowanych 84d9b1c - Naprawianie potencjalnego zakleszczenia podczas usuwania kompozycji 28761fc
- Naprawianie przenoszenia treści do kompozycji podrzędnej 92d4156
Wersja 1.5.0-alfa02
5 kwietnia 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.5.0-alpha02
została zwolniona. Wersja 1.5.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
- Operator
getValue
używany przez Kotlina umożliwia teraz obsługę funkcji kompozycyjnej (F174f6e)
Poprawki błędów i lepsze działanie aplikacji
- Zastępowanie rekordów obiektów stanu z rekordami stanu niedostępnymi (C986960)
- Podczas realizacji grup użyj funkcji kompozytora o prawidłowym zakresie (9a5e5b6)
- Napraw błąd
endToMarker()
podczas kończenia grup węzłów. (D71d980) - Do sprawdzenia dezaktywacji użyj bieżącej grupy
SlotWriter
(a0b518b) - Użyj
IdentityArraySet
do przechowywania unieważnień zrzutów (7f60cca) - Usuń
fill
w aplikacjiSlotTable.moveSlotGapTo()
i przenieś je, by zamknąć (81f9935) - Rozwiązywanie problemów z brakującymi unieważnieniami podczas przenoszenia treści przenoszonych (1d7c024)
- Rozwiązywanie problemów z natychmiastowym unieważnieniem przeniesionych treści (8676618)
- Zmniejsz przydziały na potrzeby obserwacji zrzutów (5bc535f)
Wersja 1.5.0-alfa01
22 marca 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.5.0-alpha01
została zwolniona. Wersja 1.5.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaje uprawnienia
Modifier.Node#coroutineScope
, aby umożliwićModifier.Nodes
uruchamianie współprogramów (I76ef9) - Zezwól
Modifier.Nodes
na odczytCompositionLocals
przez wdrożenie interfejsuCompositionLocalConsumerModifierNode
. (Ib44df)
Wersja 1.4
Wersja 1.4.3
3 maja 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.4.3
została wydana bez zmian.
Wersja 1.4.2
19 kwietnia 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.4.2
została zwolniona. Wersja 1.4.2 zawiera te zatwierdzenia.
Poprawki błędów
Napraw potencjalne zakleszczenie na liście zrzutów i mapie 2eb6570
Dodawanie treści do
SnapshotStateList
lubSnapshotStateMap
może spowodować zakleszczenie, jeśli modyfikacja odbywa się jednocześnie z bezpośrednim zapisem w rekordzie stanu. Znacznie częściej występuje to w przypadku zmian wprowadzonych przez usługę 93fcae828b, która używa bezpośredniego zapisu do zwalniania nieużywanych rekordów.Blokady są teraz uporządkowane w taki sposób, że nigdy nie próbowano użyć blokady zrzutów, gdy blokada mapy lub listy jest zablokowana.
Wersja 1.4.1
5 kwietnia 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.4.1
została zwolniona. Wersja 1.4.1 zawiera te zatwierdzenia.
Poprawki błędów
- Napraw błąd
endToMarker()
podczas kończenia grup węzłów. d71d980
Wersja 1.4.0
22 marca 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.4.0
została zwolniona. Wersja 1.4.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.3.0
- Użyj zainicjowanej wartości z
LiveData
dla pierwszej kompozycji 3680e25 - Dodaj
ComposeNodeLifecycleCallback
, aby obserwować cykl życia węzłów tworzenia. 8b6a258 - Dodaj właściwość
parameterTypes
doComposableMethod
7b6c7ad
Poprawki błędów i lepsze działanie aplikacji
- Wyczyść indeksy obu zakresów w
SnapshotStateObserver
29f4a3e - Dodaj grupy w treści niemożliwych do pominięcia lambda 7d06752
- Popraw właściwości odniesienia do pamięci stanu zrzutu 93fcae8
- Usuwanie boksu podczas wyszukiwania lokalnego kompozycji 0875717
- Używanie prawidłowego klucza dla grup węzłów, których nie można ponownie użyć: 6388d8d
- Chroń
SnapshotStateObserver
przed rekurencją i równoczesnością, zastosuj 98cb6ba - Dodano sprawdzanie granic indeksu w metodzie „get”
IdentityArraySet
35a77d3 - Aktualizowanie modułu tworzenia wiadomości, aby używać rozszerzeń
ViewTreeLifecycleOwner
21c2122 - Wyślij powiadomienia o zastosowaniu, gdy Recomposer zakończy ramkę. 98f2641
- Naprawianie awarii indeksu wykraczającej poza dopuszczalny zakres podczas anulowania narzędzia Recomposer 8f8656f
- Zawsze wymuszaj ponowne utworzenie, jeśli nadrzędni dostawcy kompozycji zmienią się w 9526fcc
- Tolerancja rekomponowania dla anulowanych zadań a55f7ed
- Poprawa obsługi unieważnień w przypadku dużej liczby kompozytorów 9b7ed67
- Naprawianie generowania grup zamykających dla zwrotów nielokalnych: b6f590c
Wersja 1.4.0-rc01
8 marca 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.4.0-rc01
została zwolniona. Wersja 1.4.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
Wersja 1.4.0-beta02
22 lutego 2023 roku
Opublikowano androidx.compose.runtime:runtime:1.4.0-beta02
i androidx.compose.runtime:runtime-saveable:1.4.0-beta02
. Wersja 1.4.0-beta02 zawiera te zatwierdzenia.
Wersja 1.4.0-beta01
8 lutego 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.4.0-beta01
została zwolniona. Wersja 1.4.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano interfejs
ComposeNodeLifecycleCallback
, który umożliwia obserwowanie cyklu życia węzłów tworzenia (I3731b) - Dodano funkcję
@TestOnly
do funkcjiComposer.disableSourceInformation()
, ponieważ tę funkcję można bezpiecznie wywoływać tylko w teście. (I896c8)
Poprawki błędów
- Usuwanie boksu lokalnego w wyszukiwaniu kompozycji (62f66a)
- Popraw właściwości odniesienia do pamięci stanu zrzutu (dfb451)
Wersja 1.4.0-alfa05
25 stycznia 2023 r.
Opublikowano androidx.compose.runtime:runtime:1.4.0-alpha05
i androidx.compose.runtime:runtime-saveable:1.4.0-alpha05
. Wersja 1.4.0-alpha05 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Więcej typów/wartość null funkcji wbudowanych/wycofanych ukrytych (I24f91)
Wersja 1.4.0-alfa04
11 stycznia 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.4.0-alpha04
została zwolniona. Wersja 1.4.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
TestMonotonicFrameClock
używa teraz prawidłowej adnotacji eksperymentalnej. (I95c9e)
Poprawki błędów
- Chroń
SnapshotStateObserver
przed zastosowaniem rekurencyjnym i równoczesnym (d902fb)
Wersja 1.4.0-alfa03
7 grudnia 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.4.0-alpha03
została zwolniona. Wersja 1.4.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- dodanie nowej metody publicznej do klasy
ComposableMethod
analogicznej dojava.lang.reflect.Method#getParameterTypes()
(Iab0c3).
Poprawki błędów
- Powiadomienia o zastosowaniu zrzutu są teraz wysyłane po zakończeniu wprowadzania zmian przez aplikację
Recomposer
. (Iad6c0, b/222093277)
Wersja 1.4.0-alfa02
9 listopada 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.4.0-alpha02
została zwolniona. Wersja 1.4.0-alpha02 zawiera te zatwierdzenia.
Wersja 1.4.0-alfa01
24 października 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.4.0-alpha01
została zwolniona. Wersja 1.4.0-alpha01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
SnapshotStateList
iSnapshotStateMap
mają teraz bezpośrednie implementacjetoList()
itoMap()
z poszanowaniem praw. Te metody zwracają bieżącą treść bez tworzenia kopii, ponieważ zwracają stałe dane wewnętrzne używane do przechowywania treści. Tej wartości można użyć na przykład do utworzenia przepływu wartości za pomocą funkcjisnapshotFlow
bez konieczności kopiowania danych. (Ica2bd).
Wersja 1.3
Wersja 1.3.3
11 stycznia 2023 r.
Aplikacja androidx.compose.runtime:runtime-*:1.3.3
została zwolniona. Wersja 1.3.3 zawiera te zatwierdzenia.
- Bez zmian od wersji 1.3.2
Wersja 1.3.2
7 grudnia 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.3.2
została zwolniona. Wersja 1.3.2 zawiera te zatwierdzenia.
Poprawki błędów
- Zaktualizowano do obsługi androidx.compose.ui 1.3.2
Wersja 1.3.1
9 listopada 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.3.1
została zwolniona. Wersja 1.3.1 zawiera te zatwierdzenia.
Wersja 1.3.0
24 października 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.3.0
została zwolniona. Wersja 1.3.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.2.0
Obsługa wyjątków / pomoc do edycji na żywo
- Aby lepiej obsługiwać edycję na żywo, dodaliśmy interfejsy API, które umożliwiają obsługę wyjątków w trakcie tworzenia treści.
- Obsługa błędów kompozycji w przypadku ponownego załadowania z pamięci
- Naprawianie błędów edycji na żywo podczas zapisywania i przywracania danych
Śledzenie kompozycji
- Dodaliśmy interfejsy API do śledzenia środowiska wykonawczego, by zapewnić obsługę nowych narzędzi do śledzenia kompozycji
- Generowanie wywołań początkowych i końcowych zdarzeń logu czasu kompozycyjnego
- Ponownie dodano obiekt ComposerKt.traceEventStart(Int, String)
Interfejsy API kompozycyjnego odbicia
- Dodano nowy interfejs API
ComposableMethod
, aby umożliwić bardziej niezawodne wywołania kompozycyjnych interfejsów API, które bazują na refleksjach. - Przenoszenie metody wywołujące kompozycję w celu utworzenia środowiska wykonawczego
- Rework API do wywoływania metody kompozycyjnej
Poprawki w czasie działania
- Naprawianie nieprawidłowego testu zakresu przy sprawdzaniu tabeli przedziałów pod kątem znaczników
- Zezwalanie na przenoszenie treści przenoszonych do i z układu podrzędnego
- Naprawa przenoszenia treści do nowej zawartości kompozycji podrzędnej
System zrzutów
- System zrzutów otrzymał różne ulepszenia w zakresie zarządzania pamięcią, wydajności i poprawności.
- Optymalizowanie usuwania zakresu w usłudze SnapshotStateObserver
- Usuwaj zagnieżdżone zrzuty utworzone z przezroczystych zrzutów
- Poprawiono warunek wyścigu podczas odczytywania stanu z globalnego zrzutu
- Obsługuj funkcję DerivedState w obiekcie SnapshotStateObserver
- Zapobiegaj usuwaniu stanu pochodnego z kompozycji, gdy jest on odczytywany na innych zakresach
- Użyj IdentityTrackMap zamiast HashMap w DerivedState
- Zaktualizuj obserwatorów stanu pochodnego, aby używać zmiennych wektorów
- Aktualizowanie czyszczenia stanu SnapshotStateObserver
- Zastąp zmienną SnapshotStateObserver.invalidated wyrażeniem ArraySet
- Poprawiono warunek wyścigu podczas odczytywania stanu z globalnego zrzutu
- Naprawa użycia nieaktualnego rekordu przy obliczaniu skrótu DerivedState
- Rozwiązywanie problemów z czasem wyścigu podczas tworzenia ogólnych podsumowań
- Przyspiesz czyszczenie obserwacji zakresu w SnapshotStateObserver
Wersja 1.3.0-rc01
5 października 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.3.0-rc01
została zwolniona. Wersja 1.3.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Poprawiona wartość
ArrayIndexOutOfBoundsException
pochodząca z tabeli przedziałów (b/249076084)
Wersja 1.3.0-beta03
21 września 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.3.0-beta03
została zwolniona. Wersja 1.3.0-beta03 zawiera te zatwierdzenia.
Zmiana w związku z naruszeniem zachowania
- Parametr na
remember
irememberCoroutineScope
, gdzie został zmieniony nacrossinline
. Spowoduje to zgłoszenie błędu dotyczącego wczesnych zwrotów, a nie umożliwienia wcześniejszego zwrotu, co spowoduje zgłoszenie późniejszego błędu wewnętrznego. - Ta zmiana może spowodować zgłoszenie nowych błędów kompilatora i wymagać usuwania nielokalnych zwrotów z elementów lambda przekazywanych do tych funkcji. (Ibea62)
Wersja 1.3.0-beta02
7 września 2022 roku
Aplikacja androidx.compose.runtime:runtime-*:1.3.0-beta02
została zwolniona. Wersja 1.3.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Zaktualizowany interfejs API (I64ca0)
Wersja 1.3.0-beta01
24 sierpnia 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.3.0-beta01
została zwolniona. Wersja 1.3.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Do
CompositionData
dodano metodęfind
, aby umożliwić narzędziom dla programistów używanie tego interfejsu API do szybkiego znajdowania podgrupy kompozycji na podstawie jej tożsamości. (I5794f)
Wersja 1.3.0-alfa03
10 sierpnia 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.3.0-alpha03
została zwolniona. Wersja 1.3.0-alpha03 zawiera te zatwierdzenia.
Wersja 1.3.0-alfa02
27 lipca 2022 roku
Aplikacja androidx.compose.runtime:runtime-*:1.3.0-alpha02
została zwolniona. Wersja 1.3.0-alpha02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Ponownie dodano atrybut
ComposerKt.traceEventStart(Int, String)
, aby zapewnić zgodność wsteczną (I6e6de)
Wersja 1.3.0-alfa01
29 czerwca 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.3.0-alpha01
została zwolniona. Wersja 1.3.0-alpha01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Przenoszenie funkcji narzędzi do środowiska wykonawczego (I4f729)
Wersja 1.2
Wersja 1.2.1
10 sierpnia 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.2.1
została zwolniona. Wersja 1.2.1 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązany wyciek pamięci: usuwanie zagnieżdżonych zrzutów utworzonych z przezroczystych zrzutów b/239603305
Wersja 1.2.0
27 lipca 2022 roku
Aplikacja androidx.compose.runtime:runtime-*:1.2.0
została zwolniona. Wersja 1.2.0 zawiera te zatwierdzenia.
Ważne zmiany od 1.1.0
W środowisku wykonawczym Compose wprowadzono kilka funkcji w wersji 1.2.0 oraz wiele poprawek błędów, które stabilizują działanie aplikacji. Najważniejszą nowością było wprowadzenie interfejsu API
movableContentOf
, który umożliwia obsługę złożonych elementów UX, takich jak przejścia elementów wspólnych. InterfejsmovableContentOf
API konwertuje funkcję lambda kompozycyjną na funkcję lambda, która przenosi jej stan i odpowiadające im węzły do każdej nowej lokalizacji. Gdy poprzednie wywołanie opuści kompozycję, stan jest tymczasowo zachowywany. Jeśli do kompozycji pojawi się nowe wywołanie funkcji lambda, stan i powiązane węzły są przenoszone do lokalizacji nowego wywołania. Jeśli nie dodasz żadnego nowego wywołania, stan zostanie trwale usunięty, a obserwatorzy zostaną o tym powiadomieni.Jeśli lambda
movableContentOf
zostanie wywołana wiele razy w tej samej kompozycjach, dla każdego wywołania zostanie utworzony nowy stan i węzły. Gdy wywołania opuszczają kompozycję i pojawiają się nowe, stan jest przenoszony z pierwszych wywołań do wyjść w kolejności ich wywoływania. Wszystkie stany, do których nie zgłoszono nowych połączeń, zostaną trwale usunięte.Oprócz tego i kilku innych nowych funkcji poświęcono dużo czasu na stabilizację środowiska wykonawczego i systemu stanu zrzutu. Usunięto różne wycieki pamięci i zoptymalizowaliśmy ścieżki kodu.
Podsumowanie zmian znajdziesz poniżej:
Nowe funkcje w aplikacji 1.2
- Dodaj eksperymentalny zrzut niebezpiecznyEnter/Exit
- Dodaj eksperymentalny interfejs API Snapshot.asContextElement
- Wprowadzenie obiektu Snapshot.withoutReadObservation
- Zezwalanie na przenoszenie stanów w obrębie kompozycji
- Śledzenie zmian kompozycji w oknie tworzenia wiadomości
Skuteczność – 1.2
- Zwiększanie lokalnej skuteczności kompozycji
- Profile bazowe na potrzeby tworzenia wiadomości powinny pochodzić z testów porównawczych
Poprawki błędów w usłudze 1.2
- Usuwanie informacji o śledzeniu z zakresów ponownego tworzenia wersji
- Zapobiegaj usuwaniu stanu pochodnego z kompozycji, gdy jest on odczytywany na innych zakresach
- Bardziej wydajna funkcja removeScope() w funkcji SnapshotStateObserver
- Usuwa zależności stanu pochodnego w kompozycji
- Naprawianie zmiany wartości hash currentCompositeKeyHash po wewnętrznym przekładzie elementów w treściach przenoszonych
- Usuwaj nieprawidłowe kompozycje podczas utylizacji
- Poprawianie odczytu stanu derywowania podczas ponownej kompozycji
- Naprawianie wycieku pamięci podczas obserwacji obiektów stanu derywowanego
- Poprawiono złożony klucz skrótu movableContent w celu zachowania spójności
- Naprawianie narożnika przypadków, w których aplikacja kompozytora ulegała awarii
- Zapewnij wymuszone unieważnienie wymuszania zmiany kompozycji grupy
- Naprawa błędu polegającego na przywróceniu danych wejściowych w przypadku zapamiętania w nim w niewłaściwej kolejności
Wersja 1.2.0-rc03
29 czerwca 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.2.0-rc03
została zwolniona. Wersja 1.2.0-rc03 zawiera te zatwierdzenia.
Poprawki błędów
- Powstałe obserwacje stanu były wcześniej bezwarunkowo usuwane z wielu elementów jednocześnie, co powodowało łamanie innych zakresów, które mogą nadal obserwować stan pochodny. Ta zmiana usuwa instancje stanu pochodnego tylko wtedy, gdy nie jest już obserwowany przez inne zakresy. (b/236618362)
Wersja 1.2.0-rc02
22 czerwca 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.2.0-rc02
została zwolniona. Wersja 1.2.0-rc02 zawiera te zatwierdzenia.
Wersja 1.2.0-rc01
15 czerwca 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.2.0-rc01
została zwolniona. Wersja 1.2.0-rc01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Interfejsy w bibliotekach tworzenia wiadomości są teraz tworzone przy użyciu domyślnych metod interfejsu jdk8 (I5bcf1)
Wersja 1.2.0-beta03
1 czerwca 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.2.0-beta03
została zwolniona. Wersja 1.2.0-beta03 zawiera te zatwierdzenia.
Wersja 1.2.0-beta02
18 maja 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.2.0-beta02
została zwolniona. Wersja 1.2.0-beta02 zawiera te zatwierdzenia.
Wersja 1.2.0-beta01
11 maja 2022 roku
Aplikacja androidx.compose.runtime:runtime-*:1.2.0-beta01
została zwolniona. Wersja 1.2.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
- To jest pierwsza wersja beta 1.2.
Zmiany w interfejsie API
- Dodano eksperymentalną funkcję
Snapshot.unsafeEnter/unsafeLeave
(I108f3) - Dodano eksperymentalny interfejs API
Snapshot.asContextElement()
(Iff072) - Adnotacja i adnotacje
@ComposableTarget
oznaczone przez@ComposableTargetMarker
mogą być teraz używane w zakresie plików z wykorzystaniem prefiksu@file
. Użycie adnotacji docelowej w zakresie pliku spowoduje, że kompilator przyjmie, że wszystkie funkcje kompozycyjne w pliku są kierowane na powiązaną aplikację. Na przykład użycie polecenia@file:UiComposable
deklaruje, że wszystkie funkcje@Composable
są kierowane na aplikację interfejsu użytkownika tworzenia wiadomości. Funkcja, która musi być kierowana na innego użytkownika, musi wyraźnie podać adnotację w znaczniku docelowym dla odpowiedniego aplikatora. (I40804)
Wersja 1.2.0-alfa08
20 kwietnia 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.2.0-alpha08
została zwolniona. Wersja 1.2.0-alpha08 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano język
TracingInProgress
do interfejsuCompositionTracer
. (Ic6f12) - Dodawanie usługi
recomposeScopeIdentity
do usługi Composer (I0c873) - Interfejsy API śledzenia z ograniczeniami (Composer.setTracer) do
OptIn(InternalComposeTracingApi)
. (I9187f) - Dodano element
ResuableContentHost
, który zapewnia większą kontrolę nad okresem tworzenia stanu treści do wielokrotnego użytku. Jeśli na przykład kompozycja podrzędna jest tymczasowo nieużywana, treść może zostać zdezaktywowana, co spowoduje, że wszystkie zapamiętane stany kompozycji zostaną zapomniane, na przykład wszystkie efekty jednorazowe. (I2c0f2, b/220322704)
Wersja 1.2.0-alfa07
6 kwietnia 2022 roku
Aplikacja androidx.compose.runtime:runtime-*:1.2.0-alpha07
została zwolniona. Wersja 1.2.0-alpha07 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano nową funkcję
Snapshot.withoutReadObservation { ... }
. Umożliwia użytkownikom uruchamianie przekazanej funkcji lambda bez subskrybowania zmian wartości stanu odczytywanych podczas tego bloku. Może się ono przydać w przypadkach, gdy chcesz korzystać z bezpiecznego zapisu/odczytu na podstawie zrzutów, ale chcesz mieć możliwość odczytania wartości bez konieczności wprowadzania zmian w strukturze ani ponownego pomiaru. (I9f365, b/214054486)
Wersja 1.2.0-alfa06
23 marca 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.2.0-alpha06
została zwolniona. Wersja 1.2.0-alpha06 zawiera te zatwierdzenia.
Wersja 1.2.0-alfa05
9 marca 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.2.0-alpha05
została zwolniona. Wersja 1.2.0-alpha05 zawiera te zatwierdzenia.
Wkład z zewnątrz
- Zaktualizowano, aby używać współprogramów Kotlinx 1.6.0 (I3366d)
Wersja 1.2.0-alfa04
23 lutego 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.2.0-alpha04
została zwolniona. Wersja 1.2.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
Dodano właściwości
ComposableTarget
,ComposableTargetMarker
iComposableOpenTarget
, które umożliwiają kompilowanie raportowania czasu, gdy funkcja kompozycyjna jest wywoływana w celu kierowania na aplikację, do której nie została zaprojektowana.W większości przypadków adnotacje mogą zostać wywnioskowane przez wtyczkę kompilatora compose, więc bezpośrednie używanie tych adnotacji powinno być rzadkie . Przypadki, których nie można wywnioskować, obejmują tworzenie i używanie niestandardowych aplikacji, abstrakcyjnych funkcji kompozycyjnych (takich jak metody interfejsu), pól lub zmiennych globalnych, które są zmiennymi kompozycyjnymi (wywnioskowane są zmienne lokalne i parametry) oraz korzystanie z funkcji
ComposeNode
lub powiązanych funkcji kompozycyjnych.W przypadku aplikacji niestandardowych funkcje kompozycyjne, które wywołują funkcje
ComposeNode
lubReusableComposeNode
, muszą dodać adnotacjęCompoableTarget
do funkcji i dowolnych typów parametrów lambda kompozycyjnych. Zalecamy jednak utworzenie adnotacji z adnotacjąComposableTargetMarker
, a następnie użycie oznaczonej adnotacji bezpośrednio zamiastComposableTarget
. Adnotacja kompozycyjna oznaczona za pomocą atrybutuComposableTargetMarker
jest odpowiednikiemComposbleTarget
z pełną i jednoznaczną nazwą klasy atrybutu jako parametru stosującego. Przykład użycia właściwościComposableTargetMarker
znajdziesz tutaj:anroidx.compose.ui.UiComposable
. (I38f11)
Wersja 1.2.0-alfa03
9 lutego 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.2.0-alpha03
została zwolniona. Wersja 1.2.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
Dodano funkcję
movableContentOf
, która konwertuje funkcję lambda kompozycyjną na obiekt lambda, który przenosi jego stan, a także odpowiadające mu węzły do każdej nowej lokalizacji. Gdy poprzednie wywołanie opuści kompozycję, stan jest tymczasowo zachowywany, a jeśli do kompozycji pojawi się nowe wywołanie funkcji lambda, stan i powiązane z nim węzły są przenoszone do lokalizacji nowego wywołania. Jeśli nie dodasz żadnego nowego wywołania, stan zostanie trwale usunięty, a obserwatorzy zostaną powiadomieni.Jeśli lambda
movableContentOf
zostanie wywołana wiele razy w tej samej strukturze, dla każdego wywołania zostanie utworzony nowy stan i węzły. Gdy wywołania opuszczają kompozycję i wchodzą nowe, stan jest przenoszony z pierwszych wywołań do wywołań w kolejności ich wywoływania. Wszystkie stany, które nie zostały zajęte przez nowe wywołania, są trwale usuwane. (Ib4850)Do kompozycji dodano interfejs API śledzenia, aby umożliwić narzędziom bardziej szczegółowe śledzenie funkcji kompozycyjnych. Kompilator generuje teraz wywołania interfejsu tracing API, które zawierają informacje o źródle. (Ib0eb5)
Aby usunąć z kompilacji wersji te wywołania i powiązane informacje o źródle, dodaj tę regułę Proguard:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }
Dodaj element
InternalComposeScope
, który umożliwia narzędziom rozpoznawanie elementu kompozycyjnego podczas rekompozycji. (I07a3f)
Wersja 1.2.0-alfa02
26 stycznia 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.2.0-alpha02
została zwolniona. Wersja 1.2.0-alpha02 zawiera te zatwierdzenia.
Wersja 1.2.0-alfa01
12 stycznia 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.2.0-alpha01
została zwolniona. Wersja 1.2.0-alpha01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Do elementu
CompositionData
dodano poleidentity
, które umożliwia generowanie identyfikatorów niewariantów w inspektorze układu. (Ic116e)
Aktualizacje zależności
- Teraz zależy od Kotlin
1.6.10
.
Wersja 1.1
Wersja 1.1.1
23 lutego 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.1.1
została zwolniona. Wersja 1.1.1 zawiera te zatwierdzenia.
Poprawki błędów
- Popraw
NullPointerException
na stronieandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
(aosp/1947059, b/206677462) - Naprawiono awarię spowodowaną zawartością schowka podczas odczytu ze schowka na Androidzie. (I06020, b/197769306)
- Stały RTL w
LazyVerticalGrid
(aosp/1931080, b/207510535)
Wersja 1.1.0
9 lutego 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.1.0
została zwolniona. Wersja 1.1.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.0.0
- Stabilna obsługa efektu sygnalizowania końca przewijania w Androidzie 12.
- Ulepszenia rozmiaru docelowych elementów dotykowych
- Pamiętaj, że w przypadku interfejsu Compose 1.0 komponenty Material będą rozszerzały swoją przestrzeń układu, aby spełnić wytyczne dotyczące ułatwień dostępu w zakresie rozmiaru docelowego elementu dotykowego. Na przykład element dotykowy przycisku rozwinie się do minimalnego rozmiaru
48x48dp
, nawet jeśli ustawisz jego mniejszy rozmiar. Dzięki temu interfejs Compose Material jest taki sam jak w przypadku komponentów Material Design, co zapewnia spójne zachowanie w przypadku łączenia widoków i tworzenia. Ta zmiana sprawi też, że gdy tworzysz interfejs z użyciem komponentów Compose Material, będą one spełnione minimalne wymagania dotyczące ułatwień dostępu w elementach dotykowych. - Stabilna obsługa Nawigacja Rail
- Przekształcanie wielu wcześniej eksperymentalnych interfejsów API w stabilne
- obsługa nowszych wersji Kotlin,
Wersja 1.1.0-rc03
26 stycznia 2022 r.
Aplikacja androidx.compose.runtime:runtime-*:1.1.0-rc03
została zwolniona. Wersja 1.1.0-rc03 zawiera te zatwierdzenia.
Poprawki błędów
- Zaktualizowano, aby umożliwić obsługę materiału tworzenia wiadomości
1.1.0-rc03
Wersja 1.1.0-rc01
15 grudnia 2021 roku
Aplikacja androidx.compose.runtime:runtime-*:1.1.0-rc01
została zwolniona. Wersja 1.1.0-rc01 zawiera te zatwierdzenia.
Wersja 1.1.0-beta04
Grudzień 1, 2021
Aplikacja androidx.compose.runtime:runtime-*:1.1.0-beta04
została zwolniona. Wersja 1.1.0-beta04 zawiera te zatwierdzenia.
Nowe funkcje
- Zaktualizowano w celu zapewnienia zgodności z Kotlin
1.6.0
Wersja 1.1.0-beta03
17 listopada 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.1.0-beta03
została zwolniona. Wersja 1.1.0-beta03 zawiera te zatwierdzenia.
Wersja 1.1.0-beta02
3 listopada 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.1.0-beta02
została zwolniona. Wersja 1.1.0-beta02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Kod zrzutu dysku został podzielony na kilka plików, ale wszystkie nadal znajdują się w tej samej klasie JVM. (Ic6c98)
Wersja 1.1.0-beta01
27 października 2021 roku
Aplikacja androidx.compose.runtime:runtime-*:1.1.0-beta01
została zwolniona. Wersja 1.1.0-beta01 zawiera te zatwierdzenia.
Wersja 1.1.0-alfa06
13 października 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.1.0-alpha06
została zwolniona. Wersja 1.1.0-alpha06 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Usunięto element
InternalCompilerApi
z metod narzędzia Composer, które muszą być wywoływane przez moduły (I1aa0b) - Tabela
Recomposer.state
została wycofana i zastąpiona przezRecomposer.currentState
, aby zmienić jej typ na StateFlow (Ic2ab3, b/197773820)
Wersja 1.1.0-alfa05
29 września 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.1.0-alpha05
została zwolniona. Wersja 1.1.0-alpha05 zawiera te zatwierdzenia.
Wersja 1.1.0-alfa04
15 września 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.1.0-alpha04
została zwolniona. Wersja 1.1.0-alpha04 zawiera te zatwierdzenia.
Wersja 1.1.0-alfa03
1 września 2021 roku
Aplikacja androidx.compose.runtime:runtime-*:1.1.0-alpha03
została zwolniona. Wersja 1.1.0-alpha03 zawiera te zatwierdzenia.
Nowe funkcje
- Kompilator tworzenia wiadomości obsługuje teraz starsze wersje środowiska wykonawczego tworzenia wiadomości (1.0). Przed tą zmianą kompilator tworzenia wiadomości był zgodny tylko ze środowiskiem wykonawczym tworzenia w tej samej wersji lub nowszej. Po tej zmianie kompilator tworzenia wiadomości jest zgodny ze starszą wersją środowiska wykonawczego tworzenia wiadomości (1.0). (Aosp/1796968)
- Zaktualizowano element Tworzenie
1.1.0-alpha03
, aby bazował na Kotlin1.5.30
. (I74545)
Wersja 1.1.0-alfa02
18 sierpnia 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.1.0-alpha02
została zwolniona. Wersja 1.1.0-alpha02 zawiera te zatwierdzenia.
Wersja 1.1.0-alfa01
4 sierpnia 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.1.0-alpha01
została zwolniona. Wersja 1.1.0-alpha01 zawiera te zatwierdzenia.
Wersja 1.0
Wersja 1.0.5
3 listopada 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.5
została zwolniona. Wersja 1.0.5 zawiera te zatwierdzenia.
Poprawki błędów
- Usunięto problem ze śledzeniem awarii w przypadku instancji pochodnej klasy. (Aosp/1792247)
Wersja 1.0.4
13 października 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.4
została zwolniona. Wersja 1.0.4 zawiera te zatwierdzenia.
Aktualizacje zależności
- Zaktualizowano w celu dopasowania do Kotlin
1.5.31
Wersja 1.0.3
29 września 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.3
została zwolniona. Wersja 1.0.3 zawiera te zatwierdzenia.
Aktualizacje zależności
- Zaktualizowano w celu dopasowania do Kotlin
1.5.30
Wersja 1.0.2
1 września 2021 roku
Aplikacja androidx.compose.runtime:runtime-*:1.0.2
została zwolniona. Wersja 1.0.2 zawiera te zatwierdzenia.
Zaktualizowano, aby obsługiwać wersję 1.0.2
tworzenia wiadomości. Funkcja Utwórz 1.0.2
jest nadal zgodna z Kotlinem 1.5.21
.
Wersja 1.0.1
4 sierpnia 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.1
została zwolniona. Wersja 1.0.1 zawiera te zatwierdzenia.
Aktualizacje zależności
- Zaktualizowano zgodnie z kotlinem
1.5.21
.
Wersja 1.0.0
28 lipca 2021 roku
Aplikacja androidx.compose.runtime:runtime-*:1.0.0
została zwolniona. Wersja 1.0.0 zawiera te zatwierdzenia.
Główne funkcje wersji 1.0.0
To jest pierwsza stabilna wersja funkcji Compose. Więcej informacji znajdziesz na oficjalnym blogu dotyczącym wydania wiadomości.
Znane problemy
Jeśli używasz Androida Studio Bumblebee Canary 4 lub AGP
7.1.0-alpha04
/7.1.0-alpha05
, może wystąpić ta awaria:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
Aby rozwiązać ten problem, tymczasowo zwiększ wartość minSdkVersion do poziomu 24+ w pliku
build.gradle
. Ten problem zostanie rozwiązany w następnej wersji Androida Studio Bumblebee i interfejsu API7.1
. (b/194289155)
Wersja 1.0.0-rc02
14 lipca 2021 roku
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-rc02
została zwolniona. Wersja 1.0.0-rc02 zawiera te zatwierdzenia.
- Naprawiono warunki wyścigu w programie SnapshotStateObserver, co powodowało występowanie ostrych wyjątków NullPointerException. (Aosp/1763445, aosp/1758105, b/192677711)
- Rozwiązaliśmy problemy ze zrzutami środowiska wykonawczego, które powodowały
java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied
awarii. (b/193006595, b/192570897)
Wersja 1.0.0-rc01
1 lipca 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-rc01
została zwolniona. Wersja 1.0.0-rc01 zawiera te zatwierdzenia.
Wersja 1.0.0-beta09
16 czerwca 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-beta09
została zwolniona. Wersja 1.0.0-beta09 zawiera te zatwierdzenia.
Dodane reguły profilu
Ta wersja dodaje reguły profilu do tych modułów tworzenia wiadomości (I14ed6):
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime,
- androidx.compose.ui,
- androidx.compose.ui.geometry,
- androidx.compose.ui.graphics,
- androidx.compose.ui.text,
- androidx.compose.ui.text,
- androidx.compose.ui.unit,
- androidx.compose.ui.util
Co to są reguły profilu?
Reguły profilu biblioteki są określone w pliku tekstowym
baseline-prof.txt
znajdującym się w katalogusrc/main
lub podobnym. Każda reguła jest podana w pliku w oddzielnym wierszu. W tym przypadku reguła jest wzorcem dopasowywania do metod lub klas w bibliotece. Składnia tych reguł jest nadzbiorem formatu profilu ART zrozumiałego dla człowieka, który jest używany podczas korzystania z funkcjiadb shell profman --dump-classes-and-methods ...
. Reguły te mogą mieć 2 formy kierowania na metody lub klasy.Reguła metody będzie miała następujący wzorzec:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
Reguła dotycząca klasy będzie miała następujący wzorzec:
<CLASS_DESCRIPTOR>
<FLAGS>
to co najmniej jeden ze znakówH
,S
iP
wskazujący, czy ta metoda ma być oznaczona jako „Hot”, „Startup” lub „Post Startup”.<CLASS_DESCRIPTOR>
to deskryptor klasy, do której należy metoda docelowa. Na przykład klasaandroidx.compose.runtime.SlotTable
miałaby deskryptor o wartościLandroidx/compose/runtime/SlotTable;
.<METHOD_SIGNATURE>
to podpis metody, który zawiera nazwę, typy parametrów oraz zwracane typy metody. Na przykład metodafun isPlaced(): Boolean
naLayoutNode
ma podpisisPlaced()Z
.Te wzorce mogą zawierać symbole wieloznaczne (
**
,*
i?
), aby jedna reguła obejmowała wiele metod lub klas.
Jaką rolę pełnią reguły?
Metoda z flagą
H
wskazuje, że jest to metoda „gorąca” i należy ją skompilować z wyprzedzeniem.Metoda z flagą
S
wskazuje, że jest ona wywoływana podczas uruchamiania i powinna zostać skompilowana z wyprzedzeniem, aby uniknąć kosztów kompilacji i interpretowania jej podczas uruchamiania.Metoda z flagą
P
wskazuje, że jest wywoływana po uruchomieniu.Klasa znajdująca się w tym pliku wskazuje, że jest używana podczas uruchamiania i powinna być wstępnie przypisana na stercie, aby uniknąć kosztów ładowania klas.
Jak to działa?
- Biblioteki mogą definiować te reguły, które zostaną spakowane do artefaktów AAR. Gdy zostanie utworzona aplikacja, która zawiera te artefakty, reguły te są scalane, a scalone reguły są wykorzystywane do stworzenia kompaktowego binarnego profilu ART specyficznego dla danej aplikacji. ART może wykorzystać ten profil, gdy aplikacja jest zainstalowana na urządzeniach, aby z wyprzedzeniem skompilować określony podzbiór aplikacji w celu zwiększenia wydajności aplikacji, zwłaszcza jej przy pierwszym uruchomieniu. Pamiętaj, że nie będzie to miało wpływu na aplikacje z możliwością debugowania.
Wersja 1.0.0-beta08
2 czerwca 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-beta08
została zwolniona. Wersja 1.0.0-beta08 zawiera te zatwierdzenia.
Zmiany w interfejsie API
State<T>
to terazState<out T>
(I69049)- Zmiana w interfejsie API
ControlledComposition
umożliwiająca ponowne kompilowanie zmian w pojedynczym podsumowaniu. (Iaafd1, b/184173932)
Wersja 1.0.0-beta07
18 maja 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-beta07
została zwolniona. Wersja 1.0.0-beta07 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano nowe interfejsy API kompilatora tworzenia, które umożliwiają usuwanie informacji o źródle wygenerowanych przez kompilator podczas minifikacji źródła. (Ia34e6)
Wprowadzono funkcję
ReusableContent
, która spróbuje ponownie wykorzystać węzły w swojej treści, zamiast zastępować je po zmianie klucza. Po zmianie klucza poprzednie wartości w tabeli przedziałów są ignorowane z wyjątkiem wygenerowanych węzłów i wartości używanych do ich aktualizowania.Wprowadzono funkcję
ReusableComposeNode
, która będzie używać utworzonego węzła, a nie zastępować go tak jak w przypadku typuComposeNode
. (I1dd86)@ComposeCompilerApi
nie ma już stanu@RequiresOptIn
(Iab690)
Poprawki błędów
- LazyColumn/Row zachowa teraz maksymalnie 2 widoczne wcześniej elementy (nie wyrzucone), nawet jeśli zostaną już przewinięte. Dzięki temu komponent może ponownie wykorzystywać aktywne kompozycje podrzędne, gdy trzeba utworzyć nowy element, który zwiększa szybkość przewijania. (IE5555)
Wersja 1.0.0-beta06
5 maja 2021 roku
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-beta06
została zwolniona. Wersja 1.0.0-beta06 zawiera te zatwierdzenia.
Zmiany w interfejsie API
@ComposeCompilerApi
nie ma już stanu@RequiresOptIn
(Iab690)
Wersja 1.0.0-beta05
21 kwietnia 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-beta05
została zwolniona. Wersja 1.0.0-beta05 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Usunięto
@InternalComposeApi
z powodu rejestrowania odczytów i zapisów zrzutów (Id134d)
Poprawki błędów
- Pliki AndroidManifest z elementów ui-test-manifest i ui-tooling-data są teraz zgodne z Androidem 12 (I6f9de, b/184718994).
Wersja 1.0.0-beta04
7 kwietnia 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-beta04
została zwolniona. Wersja 1.0.0-beta04 zawiera te zatwierdzenia.
Poprawki błędów
Przed tą zmianą lokalne funkcje kompozycyjne można było pominąć na podstawie ich parametrów. Po tej zmianie żadne lokalne funkcje kompozycyjne nie zostaną pominięte. Ta zmiana jest powszechna i oczekiwana przez funkcje lokalne do przechwytywania parametrów z elementu nadrzędnego, a ich pomijanie jest częstym źródłem błędów.
Podsumujmy ten przykład:
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }
Przed tą zmianą funkcja kompozycyjna
ShowCount
była zawsze pomijana, nawet po zaktualizowaniu parametrucount
. Ta informacja jest nieaktualna. (I5648a)Rozwiązaliśmy problem, który powodował, że funkcja
rememberSaveable()
przywracała starą wartość podczas używania z parametrami wejściowych (I1b110, b/182403380)
Wersja 1.0.0-beta03
24 marca 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-beta03
została zwolniona. Wersja 1.0.0-beta03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Interfejs
DefaultMonotonicFrameClock
został wycofany. Połączenie z numeremwithFrameNanos
lubRecomposer.runRecomposeAndApplyChanges
bez użycia danychMonotonicFrameClock
spowoduje błądIllegalStateException
. (I4eb0d)
Wersja 1.0.0-beta02
10 marca 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-beta02
została zwolniona. Wersja 1.0.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Egzekwuj ograniczenia dotyczące publicznego użytkowania eksperymentalnych interfejsów API (I6aa29, b/174531520)
- Naprawiono problem z nieprawidłowym atrybutem
rememberSaveable { mutableStateOf(0) }
użytym w miejscu docelowym nawigacji-komponent. (I1312b, b/180042685, b/180701630)
Wersja 1.0.0-beta01
24 lutego 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-beta01
została zwolniona. Wersja 1.0.0-beta01 zawiera te zatwierdzenia.
To jest pierwsza wersja beta funkcji tworzenia wiadomości w wersji 1.0.0.
Zmiany w interfejsie API
- Dodaj
Recomposer.runRecomposeConcurrentlyAndApplyChanges
eksperymentalny interfejs API służący do rekomponowania nieprawidłowych kompozycji poza pętlę głównej ramki. (I342d0) - Wszystkie obiekty kompozycyjne oznaczone symbolem @ReadOnlyComposable są teraz weryfikowane podczas kompilowania, aby mieć pewność, że wywołują tylko inne elementy @ReadOnlyComposable (I58961)
Pole
defaultFactory
dla właściwościcompositionLocalOf
istaticCompositionLocalOf
jest teraz wymagane zamiast opcjonalnego.Ta zmiana usuwa potencjalny błąd typu w przypadku typów niedopuszczających wartości null, w przypadku których nie podano domyślnej fabryki. Wcześniej w przypadku typu niedopuszczającego wartości null stosowane było odwołanie o wartości null.
W przypadku typów z wartością null rozważ podanie
{ null }
jako domyślnej fabryki.Nie zalecamy używania lokalnych z typami bez wartości null, chyba że możesz podać rozsądną wartość domyślną. Jeśli nie ma żadnej rozsądnej wartości domyślnej, lambda
defaultFactory
powinna zgłosić wyjątek. Złożenie wyjątku oznacza jednak, że konsumenci będą pośrednio zależnić od jego podania, który nie jest egzekwowany przez system typów. (Ifbd2a)Wycofane symbole zostały usunięte ze środowiska wykonawczego tworzenia (I3252c)
Wycofane komponenty typu
emptyContent()
zostały usunięte. Użyj w zamian zasady{}
. (Idb33f, b/179432510)Nazwa dostawców została zmieniona na CompositionLocalProvider
- Konstruktor kompozycji nie akceptuje już parametru klucza i został wycofany.
- Element currentCompositeKeyHash został przekształcony w kompozycyjną właściwość najwyższego poziomu zamiast funkcji kompozycyjnej najwyższego poziomu.
- CompositionData i CompositionGroup zostały przeniesione do przestrzeni nazw androidx.compose.runtime.tooling
- Obiekt ComposableLambda został przekształcony w interfejs zamiast konkretnej klasy i nie ma już parametrów typu.
- Obiekt ComposableLambdaN został przekształcony w interfejs zamiast konkretnej klasy i nie ma już parametrów typu.
- Funkcja zrzutFlow została przeniesiona do przestrzeni nazw androidx.compose.runtime
- Metoda scalania SnapshotMutationPolicy nie jest już eksperymentalna
- Funkcja @TestOnly najwyższego poziomu clearRoots została usunięta. Nie jest już potrzebna.
- Funkcje keySourceInfoOf i resetSourceInfo zostały usunięte. Nie są już potrzebne.
- Element Composer.collectKeySourceInformation został usunięty. Nie jest już potrzebna.
- Metody isJoinedKey,joinKeyLeft i joinKeyRight zostały usunięte. Nie są już potrzebne.
- Różne interfejsy API najwyższego poziomu zostały przeniesione i uporządkowane w różne pliki. Ze względu na semantykę klasy plików stosowanej przez Kotlin powoduje to przerwanie zgodności plików binarnych, ale nie zgodności ze źródłem. U większości użytkowników nie powinno to stanowić problemu.
- (I99b7d, b/177245490)
Narzędzie SnapshotStateObserver nie ma już funkcji eksperymentalnych (Id2e6a)
Usunięto niektóre wycofane wcześniej interfejsy API (Ice5da, b/178633932).
Wprowadzono te zmiany w interfejsie Material API:
- Dodano parametr contentPadding do Top/bottomAppBar, aby umożliwić dostosowanie domyślnego dopełnienia.
- Zmieniono kolejność parametrów w BackdropScaffold, by były zgodne z wytycznymi API. Wymagane parametry znajdowały się przed parametrami opcjonalnymi.
- Parametr
icon
w elemencie bottomPoruszaItem został przeniesiony za parametrselected
ionClick
. - Zmieniono nazwę parametru
alwaysShowLabels
w elemencie {Down PojawiItem naalwaysShowLabel
. - Zmieniono nazwy parametrów
bodyContent
w kilku komponentach nacontent
. - Zmieniła się kolejność parametrów w tabeli
ButtonDefaults.buttonColors()
. Uwaga: ponieważ rodzaj parametrów się nie zmienił, nie spowoduje to błędu w kodzie. Pamiętaj, by używać nazwanych parametrów lub zaktualizować kolejność ręcznie. W przeciwnym razie kod nie będzie działać tak samo jak poprzednio. - Dodano parametr
secondaryVariant
do tabelidarkColors()
. Ten kolor jest zwykle taki sam jak kolorsecondary
w ciemnym motywie, ale jest dodatkowy dla zachowania spójności i możliwości dostosowania. - Usunęliśmy elementy ElevationDefaults i animmateElevation() z publicznej platformy interfejsu API, ponieważ nie były one powszechnie używane lub przydatne.
- Zmieniono nazwę
onValueChangeEnd
wSlider
naonValueChangeFinished
i sprawiliśmy, że może ona mieć wartość null. - Zmieniono nazwę parametru
text
wSnackbar
nacontent
, aby zachować spójność. - Dodano parametr
contentPadding
do elementuDropdownMenuItem
, aby umożliwić dostosowanie domyślnego dopełnienia, i ustawiliśmycontent
jako rozszerzenie wRowScope
. - Nazwa elementu
ModalDrawerLayout
została zmieniona naModalDrawer
. - Nazwa elementu
BottomDrawerLayout
została zmieniona naBottomDrawer
. - (I1cc66)
Wersja 1.0.0-alfa12
10 lutego 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-alpha12
została zwolniona. Wersja 1.0.0-alpha12 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Obsługa grup widoków została usunięta z aplikacji UiApplier. Wycofane elementy kompozycyjne emitView zostały usunięte. (Ifb214)
- Nazwa elementu CompositionReference zmieniła się na CompositionContext (I53fcb).
- Komponent KomponentActivity.setContent został przeniesiony do strony androidx.activity.compose.setContent w module androidx.activity:activity-compose. (Icf416)
- Zaktualizowaliśmy interfejs Snapshot API, aby był bardziej zgodny ze wskazówkami dotyczącymi interfejsu API oraz ukrywał wewnętrzne klasy implementacji z publicznego interfejsu API. (Id9e32).
- Zmieniono nazwy trybu Ambients, aby dopasować je do nazwy Ambient -> CompositionLocal. Oświetlenie nazywane wcześniej AmbientFoo, teraz CompositionLocals to LocalFoo. (I2d55d)
- Zmieniono nazwę trybu Ambient na CompositionLocal, a odpowiednio na wygaszacz / staticAmbientOf – na compositionLocalOf / staticCompositionLocalOf. Ta zmiana pomoże uściślić przeznaczenie CompositionLocal: mechanizm udostępniania / pobierania wartości lokalnych do kompozycji. Instancje CompositionLocal powinny mieć prefiks
Local
, np. val LocalFoo = obiektLocalOf { Foo() }. (Ia55b6) - TakeMutableSnapshot i TakeSnapshot zostały przeniesione do innych metod Snapshot. (I91f19)
Wycofaliśmy atrybut
@ComposableContract
i zastąpiliśmy go 3 bardziej szczegółowymi adnotacjami.Rozszerzenie
@ComposableContract(restartable = false)
zmieniło się w@NonRestartableComposable
.@ComposableContract(readonly = true)
zmieniło się w@ReadOnlyComposable
@ComposableContract(preventCapture = true)
zostało zmienione na@DisallowComposableCalls
@ComposableContract(tracked = true)
zostało usunięte. (I60a9d)Narzędzia pusteContent() i (@Composable () -> Unit).orEmpty() zostały wycofane, ponieważ nie mają już wpływu na wydajność ani nie mają żadnej wartości (I0484d)
snapshotFlow
iwithMutableSnapshot
nie są już eksperymentalne (I6a45f)Narzędzie do tworzenia kopii zapasowych można teraz zamknąć. Zamknięte narzędzia do rekompozycji będą kontynuowane do momentu ukończenia komponowania podrzędnych współużytkowań. Nazwa Recomposer.shutDown została zmieniona, aby anulować i kontrastować z zamknięciem. (Ib6d76)
Artefakt
compose:runtime-dispatch
został wycofany. Element MonotonicFrameClock można teraz znaleźć w komponencie compose:runtime, a AndroidUiDispatcher – w kompozycji:ui. (Ib5c36)Interfejs API, na który kierowana jest wtyczka kompilatora Compose, został refaktoryzowany tak, aby używał interfejsu zamiast konkretnej klasy. Interfejs nie używa już parametru typu.
Jest to zmiana wewnętrzna, która nie powinna wpływać na zgodność kodu źródłowego, ale jest zmianą powodującą uszkodzenie kodu binarnego. (I3b922, b/169406779)
Wprowadzenie narzędzia SnapshotMutableState (Icfd03)
Nazwa elementu DisposableEffectDisposable została zmieniona na DisposaleEffectResult (Ica7c6)
Usunięto element Recomposer.current(). [Abstract]ComposeView teraz domyślnie ustawia leniwe tworzenie funkcji Recomposer z zakresem okna, które są wywoływane przez element ViewTreeLifecycleOwner dla okna. Zmiana kompozycji i znaczniki animacji oparte na ramceNanos są wstrzymywane, gdy cykl życia hosta jest zatrzymywany. (I38e11)
Funkcja Recomposer.runningRecomposers oferuje teraz globalny przepływ stanu kompozycji (tylko do odczytu) obiektu RecomposerInfo, który umożliwia obserwowanie ciągłego stanu kompozycji w trakcie tego procesu. Wolę ten interfejs API niż Recomposer.current(), który został już wycofany. (If8ebe)
Nazwa elementu DisposableEffectDisposable została zmieniona na DisposaleEffectResult (I3ea68)
Wersja 1.0.0-alfa11
28 stycznia 2021 roku
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-alpha11
została zwolniona. Wersja 1.0.0-alpha11 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Interfejsy onCommit, onDispose i onActive zostały wycofane i zastąpione przez SideEffect oraz DisposableEffect API (If760e)
- Interfejs API emit() i wszystkie przeciążenia zostały wycofane i zmienione na ComposeNode. Interfejsy API są identyczne, ale mają inną nazwę zgodną z konwencjami nazewnictwa stosowanymi w narzędziu I4137b.
- Metody metody invalidate i enterpriseReference() zostały teraz wycofane. Zastąpiły one obecne RecomposeScope i zapamiętaCompositionReference. (I583a8)
PamiętajObserver zastępuje CompositionLifecycleObserver, a usługa CompositionLifecycleObserver została wycofana.
RememberObserver
zastępujeCompositionLifecycleObserver
zmodyfikowaną semantyką i nowymi metodami. Przejście na nowy interfejs API można wprowadzić mechanicznie w przypadku obiektów, które są zapamiętywane tylko raz. Jest to i nadal jest zalecane. Jeśli jednak odwołanie zostało zapisane więcej niż raz w kompozycji, funkcjaonRemembered
jest wywoływana dla każdego odwołania, w którym elementonEnter
jest wywoływany tylko raz. ObiektonEnter
został wywołany wiele razy, jeśli był używany w kompozycjach podrzędnych, takich jakWithConstraints
iScaffold
, przez co pojedyncze wywołanieonEnter
było niewiarygodne i został usunięty dlaRememberObserver
.RememberObserver
dodaje elementonAbandoned
, który jest wywoływany, jeśli instancjaRememberObserver
jest zwracana z wywołania zwrotnego przekazanego doremember
, ale nie została zapamiętana w stanie kompozycji, dlatego nigdy nie będzie wywoływanaonRemembered
. Może się tak zdarzyć, gdy wyjątek zakończy kompozycję przed ukończeniem lub zostanie ona odrzucona, ponieważ państwo tworzy kompozycję, która jest już nieaktualna lub z innego powodu nie jest już potrzebna. Jeśli instancjaRememberObserver
zgodnie z powyższym zaleceniem referencyjnym śledzi zasób zewnętrzny, zarównoonForgotten
, jak ionAbandoned
oznacza, że zasób nie jest już potrzebny. Jeśli obiekt śledzi rozpoczęte zadania lub zasoby przydzielone wonRemembered
, elementonAbandoned
może zostać zignorowany, ponieważ nie zostanie wywołany po wywołaniu funkcjionRemembered
. (I02c36)Nie oznaczaj funkcji
collectAsState()
jako wbudowanych (Ia73e4)
Poprawki błędów
- Funkcja WithConstraints została zmieniona na BoxWithConstraints, a następnie przeniesiono ją do Foundation.layout. (I9420b, b/173387208)
- Wykorzystywanie narzędzia TestCoroutineDispatcher do testowania (I532b6)
Wersja 1.0.0-alfa10
13 stycznia 2021 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-alpha10
została zwolniona. Wersja 1.0.0-alpha10 zawiera te zatwierdzenia.
Znacząca zmiana
Zmiana struktury wewnętrznego interfejsu API kompilatora umożliwia grupowanie zmian w węzłach wygenerowanych w wyniku kompozycji na etapie stosowania zmian po zakończeniu wszystkich funkcji
@Composable
.Jest to zmiana powodująca przerwy w działaniu, która może mieć wpływ na kod aplikacji, ponieważ węzły nie są już dostępne w wewnętrznych i eksperymentalnych interfejsach API do czasu zastosowania zmian. Zwykle można obejść ten problem, ujmując kod w takie zależności w kompozycji
SideEffect
w celu odroczenia wykonania kodu do momentu utworzenia i zainicjowania węzłów. (I018da)
Zmiany w interfejsie API
- Dodaliśmy sposób śledzenia, czy rekomponent wprowadził zmiany. (I1b3e2).
Rozwiń interfejsy [Abstract]ComposeView API, aby umożliwić recykling widoków opartych na Compose, tak aby ich kompozycję można było odtworzyć później. Dodaj interfejsy API do instalowania i wykrywania ograniczonych do okna obiektów Recomposers i CompositionReferences w celu tworzenia kompozycji podrzędnych.
Dodano element ViewCompositionStrategy w strategii usuwania kompozycji w obiektach [Abstract]ComposeViews. Działanie domyślne to utylizacja po odłączeniu okna. (I860ab)
Poprawki błędów
- Narzędzie Recomposer ujawnia teraz przepływ w jego bieżącym stanie, umożliwiając monitorowanie jego aktywności i aktywności powiązanych efektów. (Ifb2b9)
- Dostęp do natywnego zdarzenia KeyEvent można teraz uzyskać za pomocą polecenia keyEvent.nativeKeyEvent (I87c57, b/173086397).
Wersja 1.0.0-alfa09
16 grudnia 2020 roku
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-alpha09
została zwolniona. Wersja 1.0.0-alpha09 zawiera te zatwierdzenia.
Zmiany w interfejsie API
Usunięto SlotTable, SlotReader i SlotWriter z publicznego interfejsu API. Wcześniej były one oznaczone jako InternalComposeAPI. Są one teraz dostępne tylko w module tworzenia wiadomości.
Funkcje CompositionData i CompositionGroup zostały dodane jako zamienniki interfejsu API narzędzi do interfejsu i wykorzystywane do wyodrębniania informacji o kompozycji. Są one publiczne, ale nie powinny być używane poza interfejsem API ui-tooling, ponieważ zawierają nieprzetworzone informacje interpretowane przez ten interfejs API (I31a9c).
Klasa Applier nie jest już uznawana za klasę (Id85b0)
Interfejs
Applier
został zmieniony tak, aby uprościć tworzenie drzew od dołu, a nie z góry.Nazwa metody
insert()
została zmieniona nainsertTopDown()
.Dodano nową metodę:
insertBottomUp()
.W zależności od tego, który wariant ma lepszą skuteczność, aplikacja wstawia węzły do edytowanego drzewa za pomocą metody
insertTopDown()
lubinsertBottomUp()
.W przypadku niektórych drzew, np.
LayoutNode
iView
, konstruowanie od dołu jest znacznie skuteczniejsze niż w przypadku drzew rosnących. Przed tą zmianą wdrożyliśmy stos wstawek w celu wdrożenia modelu oddolnego, który trzeba kopiować do każdego wnioskodawcy, który w celu zwiększenia skuteczności wymagał tworzenia oddolnego poziomu. W związku z tą zmianą właściwośćApplier
zastępuje właściwośćinsertBottomUp()
, aby utworzyć strukturę od dołu do góry, a elementinsertTopDown()
– od góry. (Icbdc2)Tworzenie obsługuje metody pobierania właściwości, które umożliwiają tworzenie wywołań kompozycyjnych. Ta funkcja nie zostanie wycofana, ale zmieni się składnia deklarowania metody pobierania właściwości jako @Composable.
Obecnie wycofywano składnię, która służyła do dodawania adnotacji do samej właściwości:
@Composable val someProperty: Int get() = ...
Prawidłową składnią obecnie jest dodanie adnotacji do metody pobierania właściwości:
val someProperty: Int @Composable get() = ...
Obie składni będą działać przez jakiś czas, ale poprzednia składnia, która została wycofana, stanie się w końcu błędem kompilacji. (Id9197).
Poprawki błędów
- AndroidOwner – wewnętrzny (Ibcad0, b/170296980)
- Element subcomposeInto(UkładNode) został zmieniony na wewnętrzny (Id724a)
Wersja 1.0.0-alfa08
Grudzień 2, 2020
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-alpha08
została zwolniona. Wersja 1.0.0-alpha08 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano sprawdzanie lintowania pod kątem nazewnictwa i pozycji parametrów kompozycyjnych lambda w celu sprawdzenia zgodności ze wskazówkami dotyczącymi tworzenia wiadomości.
Przeprowadzono też migrację niektórych interfejsów API, używając
children
jako nazwy końcowej lambda docontent
, zgodnie ze sprawdzaniem lintowania i wskazówkami. (Iec48e). - Narzędzie Recomposer nie akceptuje już elementu EmbeddingContext. Wymagane zależności harmonogramu są pobierane z efektuCoroutineContext. Interfejs FrameManager został wycofany. Integracje z platformami powinny zainicjować własną obsługę zrzutów globalnych. (I02369)
- Nazwa funkcji RestorableStateHolder.withRestorableState została zmieniona na RestorableStateProvider (I66640)
Poprawki błędów
- Wycofano elementy otoczenia, których sufiks to
Ambient
, i zastąpiono je nowymi usługami z przedrostkiem Ambient zgodnie z innymi wytycznymi dotyczącymi interfejsu Ambients i Compose. (I33440) - Usuń stary moduł testu interfejsu użytkownika i jego wycinki (I3a7cb)
Wersja 1.0.0-alfa07
11 listopada 2020 roku
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-alpha07
została zwolniona. Wersja 1.0.0-alpha07 zawiera te zatwierdzenia.
Nowe funkcje
Zmiany w interfejsie API
- Adnotacja
@UnionType
została wycofana (I57cde) - Jako alternatywę można dodać parametr ProvideDefault, który pozwala określić dźwięki otoczenia. Można go użyć do określenia wartości otoczenia, które będą ustawiane tylko wtedy, gdy nie podano jeszcze wartości otoczenia. (Id6635, b/171024925)
- Nazwa LaunchedTask została zmieniona na LaunchedEffect, aby zapewnić spójność z interfejsami SideEffect i DisposableEffect API. Parametr LaunchedEffect bez parametrów podmiotu jest niedozwolony, by zachęcić użytkowników do stosowania sprawdzonych metod. (Ifd3d4)
- Applier ma teraz wywołania zwrotne onInitialChanges/onEndChanges, które są wywoływane, gdy usługa Composer rozpoczyna lub kończy wprowadzanie zmian do drzewa. W razie potrzeby można ich użyć do zbiorczego zarządzania zasobami. (Icf476)
- Aplikacja Recomposer wymaga teraz elementu CoroutineContext na etapie budowy (Ic4610)
- Zmiany w wewnętrznej implementacji SlotTable, które nie powinny mieć wpływu na publiczny interfejs API. (If9828)
- Wycofane adaptery rxjava2, które nie przyjmują wartości początkowej, zostały usunięte (Idb72f)
Poprawki błędów
- Fundacja.Text została wycofana i zastąpiona przez materiał.Text. Podstawowy, niezrozumiały interfejs API tekstu, który nie przetwarza wartości z motywu, znajdziesz na stronie androidx.compose.foundation.PodstawyText. (If64cb)
- Pole BaseTextField zostało wycofane. Użyj interfejsu BasicTextField. (I896eb)
- Kilka symboli związanych z układem zostało przeniesionych z androidx.compose.ui do androidx.compose.layout.ui. (I0fa98, b/170475424)
Wkład z zewnątrz
- Dodano moduł
runtime-rxjava3
do tworzenia wiadomości. Podobne doruntime-rxjava2
(I02cbf)
Wersja 1.0.0-alfa06
28 października 2020 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-alpha06
została zwolniona. Wersja 1.0.0-alpha06 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Funkcja ponownego kompozytora to teraz element CompositionReference i prawidłowy element nadrzędny kompozycji. Funkcja jednoznacznego rekomponowania jest teraz wymagana w mniejszej liczbie miejsc. (I4036f)
- Dodano odpowiedni interfejs API DisposableEffect do elementu SideEffect, który wypełnił rolę onCommit-with-params, ale z wymaganym parametrem onDispose.
- Dodano interfejs API saveUpdatedState, który umożliwia publikowanie danych od momentu zmiany kompozycji do trwających lub długotrwałych procesów, takich jak DisposableEffects lub LaunchedTasks.
- (Id50b9).
- MutableVector korzysta teraz z funkcji RandomAccess (I85d73, b/170461551).
- Dodano funkcję SideEffect composable służącą do stosowania efektów ubocznych kompozycji do obiektów zarządzanych przez kompozycję. SideEffect ma zastąpić obiekt kompozycyjny onCommit. (Ia77c2)
- Nowy eksperymentalny interfejs API RestorableStateHolder. Umożliwia zapisanie stanu skonfigurowanego w poddrzewie za pomocą wartości [savedInstanceState] i [rememberSavedInstanceState], zanim będzie można je zutylizować, aby następnym razem można było utworzyć je w przywróconym stanie. (I66884, b/166586419)
Poprawki błędów
- Włącz przejścia w elemencie ComposeTestRule. Usuń tę opcję, aby włączyć migający kursor w elemencie ComposeTestRule. (If0de3)
Wersja 1.0.0-alfa05
14 października 2020 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-alpha05
została zwolniona. Wersja 1.0.0-alpha05 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Eksperymentalny modyfikator zawieszenia danych wejściowych Modifier.pointerInput (Ia77d2)
- Wydajność przewijania leniwych kolumn/wiersza poprawia się dzięki zmniejszeniu ilości pracy w kompozycji podrzędnej przy każdym przewijaniu. Dodano nową metodę hasInvalidations() klasy Composition. Metoda hasPendingChanges() z systemu Recomposer została zmieniona na hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371).
- Dodano interfejs API createState do uruchamiania koroncji z kompozycji, które aktualizują pojedynczą wartość
State<T>
w czasie (Id4a57) - Zmiana nazwy aplikacjilaunchInComposition na LaunchedTask, aby dopasować ją do wytycznych interfejsu Compose API (I99a8e)
- Kolejność wywołań place() w niestandardowych układach określa teraz kolejność rysowania elementów podrzędnych (Ibc9f6)
Wersja 1.0.0-alfa04
1 października 2020 roku
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-alpha04
została zwolniona. Wersja 1.0.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano obiekt WłaścicielScope, który umożliwia zbieranie zakresów obserwacji i rysowanie, gdy przestaną być prawidłowe. (Ic4cf8)
- Dodano interfejs API derStateOf API do tworzenia obiektów State na podstawie obliczeń, które mogą odczytywać inne obiekty State i wyciągać z nich dane (If758b).
- Dodano interfejs API TestOnly dla SnapshotStateObserver (I6e2a9)
Poprawki błędów
- Fundacja.Box została wycofana. Użyj parametru Foundation.layout.Box. (Ie5950, b/167680279)
Wersja 1.0.0-alfa03
16 września 2020 roku
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-alpha03
została zwolniona. Wersja 1.0.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
CompositionCoroutineScope
nie korzysta już z metodyMonotonicFrameClock
. Wywołujący funkcjewithFrameNanos
powinny bezpośrednio importować funkcję najwyższego poziomu. (Icb642, b/166778123)
Poprawki błędów
- Globalne funkcje testowe, takie jak
onNode
czywaitForIdle
, zostały wycofane. Przejdź na ich nowe odpowiedniki, które są zdefiniowane za pomocą reguły ComposeTestRule (I7f45a). launchInComposition
nie uruchamia już niewysyłanych współuczestników (Ief6af, b/166486000)
Wersja 1.0.0-alfa02
2 września 2020 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-alpha02
została zwolniona. Wersja 1.0.0-alpha02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodaj interfejsy API
snapshotFlow
iwithMutableSnapshot
, aby wykorzystywać i tworzyć zmiany danych ze zrzutu. (I3e722) Zmieniła się konwencja wywoływania funkcji kompozycyjnych. Jest to zmiana powodująca uszkodzenie danych binarnych. Aby działały z tą wersją wtyczki kompilatora compose, wszystkie biblioteki muszą zostać ponownie skompilowane.
Ta zmiana nie spowoduje zmiany powodującej niezgodność na poziomie źródła, ponieważ zmienione interfejsy API są tylko interfejsami API kompilatora z wyraźną zgodą. (I7afd2, b/158123185)
Usunięto metody planowania z EmbeddingContext (I7b9be)
Funkcja onPreCommit została wycofana; funkcja onCommit działa teraz zgodnie z właściwością onPreCommit.
Metody onCommit i onActive działają w tej samej strukturze choreografa, w której zmienia się kompozycja, a nie na początku kolejnego planu choreografa. (I70403)
Wersja 1.0.0-alfa01
26 sierpnia 2020 r.
Aplikacja androidx.compose.runtime:runtime-*:1.0.0-alpha01
została zwolniona. Wersja 1.0.0-alpha01 zawiera te zatwierdzenia.
Wersja 0.1.0-dev
Wersja 0.1.0-dev17
19 sierpnia 2020 r.
Aplikacja androidx.compose.runtime:runtime-*:0.1.0-dev17
została zwolniona. Wersja 0.1.0-dev17 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Niestandardowe emisje mogą teraz deklarować, że co najmniej 1 z ich ustawień można pominąć i utworzyć ponownie niezależnie od nich. (Ibbd13).
Usunięto wycofane wywołania FrameManagera.
Zmieniono wewnętrzne interfejsy API do tworzenia wiadomości, aby zmniejszyć obciążenie wynikające ze śledzenia obiektów stanu, takich jak
mutableStateof()
(I80ba6)Funkcja kompozycyjna
state { ... }
została wycofana i wycofana z funkcjiremember { mutableStateOf(...) }
, aby zapewnić przejrzystość. Zmniejsza to ogólną powierzchnię interfejsu API i liczbę pojęć związanych z zarządzaniem stanem i dopasowywane do wzorcaby mutableStateOf()
na potrzeby przekazywania właściwości klasy. (Ia5727)Parametr Flow.collectAsState określa teraz domyślnego dyspozytora na podstawie samej kompozycji, zamiast korzystać z domyślnego ustawienia Dispatchers.Main. (I9c1d9)
Awaria, gdy naprawiono element, który zapisuje stan używany w pętli for. Teraz stosowanie tego samego klucza w zapisanej instancjiState() jest dozwolone, więc interfejs API UiSavedStateRegistry został dostosowany do tego nowego wymogu (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561).
Poprawki błędów
- Interfejs
emitView
został wycofany. W miarę możliwości używaj zasadyAndroidView
do generowania wyświetleń w ramach tworzenia wiadomości. Uwaga: bezpośrednie tworzenie widoków danych i grup widoków nie będzie obsługiwane w przyszłości, chyba że będą to liście w drzewie kompozycji – w sytuacji, gdy można to osiągnąć za pomocą AndroidView. (I29b1e, b/163871221)
Wersja 0.1.0-dev16
5 sierpnia 2020 r.
Aplikacja androidx.compose.runtime:runtime-*:0.1.0-dev16
została zwolniona. Wersja 0.1.0-dev16 zawiera te zatwierdzenia.
Zmiany w interfejsie API
Domyślna zasada mutacji
mutableStateOf()
,ambientOf()
isavedInstanceStateOf()
została zmieniona nastructuralEqualityPolicy()
, a niereferentialEqualityPolicy()
.Ustawienie domyślne określające, czy nowa wartość przypisana do instancji
mutableStateOf()
jest uznawana za zmianę, teraz domyślnie przyjmuje użycie==
zamiast===
.Więcej informacji: https://kotlinlang.org/docs/reference/equality.html
Implementacje
ambientOf()
isavedInstanceStateOf()
używająmutableStateOf()
, więc zostały zmienione tak, by były zgodne zmutableStateOf()
.Wykorzystanie równości strukturalnej w większym stopniu odpowiada oczekiwaniom deweloperów.
Na przykład
val state = mutableStateOf(1f)
a po nim,
state.value = 1f
nie będą już brane pod uwagę za zmianę w
state
, a użyciestate
podczas tworzenia nie będzie już wymagało ponownego tworzenia.Jest to zmiana powodująca niezgodność, ale w większości przypadków (np. gdy używasz klas, które nie zastępują
equals()
) nie będzie to miało zauważalnego wpływu na aplikację.Klasy, które zastępują
equals()
, takie jak klasydata
, mogą zauważyć spadek wydajności, ponieważ ich metodyequals()
są teraz domyślnie wywoływane po przypisaniu domutableStateOf()
.Poprzednie działanie można przywrócić, dodając do wywołań
mutableStateOf()
,ambientOf()
isavedInstanceStateOf()
parametr zasadypolicy = referentialEqualityPolicy()
. (Ic21a7).Parametry
Row
iColumn
są teraz wbudowane, co znacznie zmniejsza koszty związane z ich używaniem. (I75c10)
Poprawki błędów
- Funkcja setViewContent została wycofana. Zamiast niej należy używać funkcji setContent. (I7e497, b/160335130)
Dodano funkcję MonotonicFrameAnimationClock, która umożliwia użycie MonotonicFrameClock jako obiektu AnimationClockObservable w celu wypełnienia luki między nowymi zegarami opartymi na współpracownikach a interfejsami API, które nadal korzystają ze starych zegarów opartych na wywołaniach zwrotnych.
Odpowiednikiem MonotonicFrameClock ze ManualAnimationClock jest teraz ManualFrameClock. (I111c7, b/161247083)
Interfejs Modifier.stateDraggable został całkowicie przerobiony i jego nazwa została zmieniona na Modifier.swipeable. Została wprowadzona nowa klasa PrzesuńableState, a DrawerState i DrawerState zostały zmodyfikowane w celu dziedziczenia z niej. [Modal/Down]DrawerLayout nie przyjmuje już parametru onStateChange. (I72332, b/148023068)
Funkcja Modifier.plus została wycofana. Zamiast niej użyj elementu Modifier.then. „Następnie” zawiera silniejszy sygnał porządkowania, ale zabrania też wpisywania
Modifier.padding().background() + anotherModifier
, co powoduje pęknięcie łańcucha i jest trudniejsze do odczytania (Iedd58, b/161529964).Układ podrzędny został dodany. Jest to element podstawowy niskiego poziomu, który umożliwia utworzenie elementów podrzędnych podczas pomiaru, jeśli chcemy użyć wartości dostępnych później dla składu drzewa podrzędnego. Na przykład element WithConstraints nie jest implementowany przy użyciu układu podrzędnego. (I25cc8)
Nazwa Material FilledTextField została zmieniona na TextField, a podstawowe pole TextField zostało – na BaseTextField, aby ułatwić wyszukiwanie i używanie interfejsu API (Ia6242, b/155482676)
Nazwa Modifier.drawBackground została zmieniona na Modifier.background (I13677).
Wersja 0.1.0-dev15
22 lipca 2020 r.
Aplikacja androidx.compose.runtime:runtime-*:0.1.0-dev15
została zwolniona. Wersja 0.1.0-dev15 zawiera te zatwierdzenia.
Aktualizacja zależności
- Aby korzystać z wersji tworzenia wiadomości w wersji
0.1.0-dev15
, musisz zaktualizować zależności zgodnie z nowymi fragmentami kodu podanymi powyżej w sekcji Deklarowanie zależności.
Zmiany w interfejsie API
Adnotacja
@Model
została wycofana. Użyj atrybutów state i mutableStateOf jako alternatywne. Podjęliśmy decyzję o wycofaniu tej funkcji po szczegółowej dyskusji.Uzasadnienie
Uzasadnienie obejmuje m.in.:
- zmniejsza obszar interfejsu API i koncepcje, których musimy uczyć
- Ściślej dopasowane do innych porównywalnych narzędzi (Swift UI, React, Flutter).
- Odwracalna decyzja. W każdej chwili możemy przywrócić urządzenie
@Model
. - Eliminuje użycie małych liter i ułatwia udzielanie odpowiedzi na pytania dotyczące konfigurowania usługi
@Model
jako rzeczy, którymi musimy się zająć @Model
klas danych, równa się, kod skrótu itp.- Jak mogę ustawić niektóre właściwości jako „obserwowane”, a inne nie?
- Jak określić równość strukturalną i referencyjną do zastosowania w obserwacji?
- Ogranicza działanie magii w systemie. Zmniejszyłoby się prawdopodobieństwo, że ktoś założy, że system jest inteligentniejszy niż jest (np. potrafi odróżnić listę)
- Sprawia, że szczegółowość obserwacji jest bardziej intuicyjna.
- Poprawia refaktoryzację z właściwości zmienna -> klasy
- potencjalnie stwarza możliwości wykonywania ręcznie przygotowanych optymalizacji dla poszczególnych stanów.
- Rozwiązanie ściślej pasuje do reszty ekosystemu i zmniejsza niejasność co do wartości niezmiennych, czyli „uwzględniających stan zmienny”
Uwagi dotyczące migracji
Niemal wszystkie istniejące zastosowania funkcji
@Model
zostały w łatwy sposób przekształcone na jeden z dwóch sposobów. W przykładzie poniżej znajduje się klasa@Model
z 2 właściwościami, która jest używana w funkcji kompozycyjnej.@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
Wersja alternatywna 1. Użyj aplikacji
State<OriginalClass>
i utwórz kopie.Takie podejście jest łatwiejsze dzięki klasom danych w Kotlin. Ogólnie rzecz biorąc, przekształć wszystkie właściwości
var
wcześniej we właściwościval
klasy danych, użyjstate
zamiastremember
i przypisz wartość stanu do sklonowanych kopii oryginału, korzystając z metody wygodnych klasy danychcopy(...)
.Pamiętaj, że to podejście działa tylko wtedy, gdy jedyne mutacje tej klasy zostały wykonane w tym samym zakresie co instancja
State
. Jeśli klasa wewnętrznie mutuje się poza zakresem użycia i polegasz na tej obserwacji, kolejną metodą jest ta, której warto użyć.data class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, onXChange={ p = p.copy(x=it) } onYChange={ p = p.copy(y=it) } ) }
Alternatywnie 2. Użyj wartości mutableStateOf i przedstawicieli właściwości
To podejście jest łatwiejsze dzięki przedstawicielom właściwości Kotlin i interfejsowi API
mutableStateOf
, który umożliwia tworzenie instancji MutableState poza kompozycją. Ogólnie rzecz biorąc, zastąp wszystkie właściwościvar
pierwotnej klasy właściwościamivar
z atrybutemmutableStateOf
jako przedstawicieli. Ma to tę zaletę, że nie zmieni się w ogóle sposób wykorzystania klasy – zmieni się tylko jej wewnętrzna implementacja. Działanie nie jest jednak całkowicie identyczne z pierwotnym przykładem, ponieważ każda właściwość jest obecnie obserwowana lub subskrybowana oddzielnie, więc zmiany kompozycji widoczne po tej refaktoryzacji mogą być węższe (co jest korzystne).class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
(I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/15726
Zmienia strategię generowania kodu kompilatora Compose. Przed tą zmianą kompilator composeing przekształcał wywołania na funkcje kompozycyjne. Dzięki tej zmianie przekształcamy treść funkcji kompozycyjnej i pozostawiamy stronę wywołania bez zmian (w większości przypadków).
Oznacza to, że większość logiki komunikującej się ze środowiskiem wykonawczym tworzenia odbywa się na początku treści funkcji, a nie w witrynie wywołania.
Powinna to być zmiana zgodną ze źródłem w przypadku całego korzystania z funkcji tworzenia. Dzięki tej zmianie większość użytkowników funkcji tworzenia wiadomości nie będzie musiała aktualizować żadnego kodu.
Aby było to możliwe, zmienił się podpis JVM wszystkich funkcji kompozycyjnych. Funkcja kompozycyjna akceptująca pojedynczy parametr jest przekształcana w funkcję akceptującą 3 parametry. Dodatkowe parametry to funkcja Composer, liczba całkowita w postaci klucza. Liczba całkowita służąca do rozpowszechniania metadanych w wywołaniach.
Tworzenie przekształca teraz również domyślne argumenty w funkcję kompozycyjną. Odbywa się to bez wprowadzania dodatkowego syntetycznego przeciążenia samej funkcji, więc ta zmiana spowoduje definiowanie mniejszej liczby funkcji.
Znane, zamierzone zmiany w zachowaniu wynikające z:
- Niektóre połączenia będą pomijane tam, gdzie wcześniej nie były.
- Wyrażenia kompozycyjne w domyślnych wyrażeniach argumentów są teraz prawidłowo subskrybowane i obsługiwane
W ramach tych prac wprowadziliśmy kilka optymalizacji: 1. Wyniki porównania parametrów są przekazywane na wykresie wywołań do innych funkcji kompozycyjnych. Spowoduje to zmniejszenie liczby porównań w czasie działania, zmniejszenie rozmiaru tabeli przedziałów, a także większą liczbę pominięć funkcji kompozycyjnych, które nie były wcześniej pomijane. 2. Parametry, które są określane jako „statyczne” podczas kompilacji, nie są już porównywane ani przechowywane w środowisku wykonawczym. Zmniejsza to liczbę porównań i rozmiar tabeli przedziałów. 3. Struktura przepływu kontroli w treści funkcji jest używana do zminimalizowania liczby generowanych grup. Zmniejsza to rozmiar tabeli przedziałów i zmniejsza nakład pracy podczas działania środowiska wykonawczego. 4. Nieużywane parametry wysyłki i odbiorcy do funkcji nie są uwzględniane przy określaniu możliwości pominięcia funkcji, jeśli nie są używane w jej treści.
Większość zmian powodujących niezgodność dotyczyła interfejsów API, na które kompilator bezpośrednio kieruje reklamy. Typowe zastosowania metody composeyfikacji nie ulegną zmianie: 1. Usługa Composer::startExpr została usunięta 2. Usunięto narzędzie Composer::endExpr 3. Funkcja Composer::call została wycofana. 4. Przeciążenia inne niż Vararg zostały usunięte z grupy
key
. Od tej pory używaj wersjivararg
. 5. Adnotacja Pivotal została wycofana. Użyj w zamiankey
. 6. Wartość ScopeUpdateScope::updateScope została zmieniona tak, aby oczekiwała właściwości Function3 zamiast Function1. 7. Zaktualizowaliśmy funkcję restartableFunction i restartableFunctionN z dodatkowych parametrów czasu kompilacji (I60756, b/143464846)Dodano argumenty sortWith i deleteRange do obiektu MutableVector (Icccf7).
Dodano implementacje domyślnych metod dla CompositionLifecycleObserver (I24289)
Applier wymaga teraz metody clear() do usuwania kompozycji (Ibe697)
Dodano asMutableList() do MutableVector, aby umożliwić przekazywanie jej do publicznego interfejsu API bez konieczności kopiowania całej listy. (I298df)
Dodano funkcję saveCoroutineScope() w celu uzyskania zarządzanej usługi CoroutineScope w celu uruchamiania zadań w odpowiedzi na zdarzenia. (I0e264)
MutableVector to nowy zbiór, który nie zawiera żadnego standardowego interfejsu kolekcji. Ta kolekcja działa szybciej niż inne wymagania i powinna być wykorzystywana tylko w implementacjach wewnętrznych. (I8ebd6)
Tymczasowo usunięto zasady
StableMutableList
iStableMutableMap
, aby uniknąć problemu w wersji narzędzia Kotlin Compose. Te interfejsy zostaną ponownie wprowadzone, gdy funkcja tworzenia wiadomości zostanie zaktualizowana do wersji Kotlin, w której ten problem nie występuje.Elementy
SnapshotStateList
iSnapshotStateMap
są teraz publiczne, ale zostaną wycofane po przywróceniuStableMutableList
iStableMutableMap
. (Ia7769)dodaj funkcję najwyższego poziomu withFrameNanos do synchronizacji czasu animacji (Ie34c5)
Adnotacja @Nieśledzona została wycofana. Zastąp @ComposableContract(tracked=false) (Id211e).
Nazwa funkcji RestartableFunction i powiązanych z nią interfejsów API została zmieniona na ComposableLambda itp. Te interfejsy API były celem kierowania tylko przez kompilator, więc nie powinno to normalnie wpływać na zgodność na poziomie źródła. Zmiana nazwy została dokonana głównie po to, żeby pokazać, co ta klasa jest lepsza, gdy wyświetla się w zrzutach stosu (I7eb25).
Adnotacja @Composable nie jest już prawidłowa w klasach (Ia5f02)
Ambient<T>
to teraz @Stable, a nie @Immutable (I0b4bb).Przed tą zmianą wtyczka kompilatora compose w łatwy sposób przechwytuje wywołania konstruktorów wewnątrz funkcji @Composable, jeśli istniała ona (I5205a, b/158123804)
Funkcja kompozycyjna ponownie nie jest już przydatną abstrakcją. Większość zmian powinna pojawić się w wyniku przypisania MutableState. W przypadku pozostałych elementów zalecamy użycie funkcji
invalidate
do aktywowania zmiany kompozycji bieżącego zakresu. (Ifc992)Obserwacja nie jest już pożyteczną abstrakcją. Jeśli chcesz ją powielić, możesz to zrobić, tworząc funkcję kompozycyjną, która wykonuje parametr kompozycyjny lambda. Na przykład:
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37).Znacznik @Direct został wycofany i zastąpiony przez @ComposableContract(restartable=false) (If4708)
Dodaliśmy adapter do niedawno wprowadzonego StateFlow, który umożliwia wstępne wypełnienie wartości początkowej, dzięki czemu zwracany stan nie może być wartością null (I61dd8, b/156233789).
Dodano przejściówkę do Flow. Przykład użycia: wartość val value by Flow.collectAsState() (If2198, b/153375923)
[Mutable]Operatorzy delegowani przez władze stanowe zostali przeniesieni do rozszerzeń, aby umożliwić optymalizowanie przekazywania dostępu w Kotlin w wersji 1.4. Aby nadal korzystać z metody
by state { ... }
lubby mutableStateOf(...)
, wywołujące muszą dodać importy. (I5312c)Strona androidx.compose.ViewComposer została przeniesiona do androidx.ui.node.UiComposer androidx.compose.Emittable została usunięta. Komponent ComputeNode był nadmiarowy. androidx.compose.ViewAdapters został usunięty. Nie są już obsługiwane. Atrybut Compose.composeInto został wycofany. Użyj w zamian zasady
setContent
lubsetViewContent
. Parametr Compose.disposeComposition został wycofany. Użyj zamiast tego metodydispose
w obiekcieComposition
zwróconym przezsetContent
. Nazwa androidx.compose.Compose.subcomposeInto została przeniesiona do androidx.ui.core.subcomposeInto KomponentNode#emitInsertAt został zmieniony na KomponentNode#insertAt KomponentNode#emitRemoveAt został zmieniony na KomponentNode#removeAt KomponentNode#emitMode został zmieniony na KomponentNode#emitMode.Zaktualizowano flagę
ComposeFlags.COMPOSER_PARAM
natrue
, co zmieni strategię generowania kodu wtyczki tworzenia wiadomości. Ogólnie rzecz biorąc, funkcje @Composable są generowane z dodatkowym parametrem syntetycznym, który jest przekazywany do kolejnych wywołań funkcji @Composable w celu prawidłowego zarządzania wykonywaniem w środowisku wykonawczym. Jest to znacząca zmiana, która powoduje uszkodzenie kodu binarnego, ale powinna zachować zgodność na poziomie źródła we wszystkich sankcjach dotyczących tworzenia wiadomości. (I7971c)Najważniejsze zmiany w interfejsie API wygaszacza. Szczegółowe informacje znajdziesz w dzienniku i dokumentacji
Ambient<T>
(I4c7ee, b/143769776).Dodano ui-livedata – nowy artefakt z adapterem do LiveData. Przykład użycia: val value by liveData.observeAsState() (Ie9e8c, b/150465596)
Adaptery RX bez podanej wartości początkowej zostały wycofane. Użycie wartości null nie zawsze jest najlepszym ustawieniem, np. jeśli masz listę, lepiej zacząć od pustej listy() lub innej rozsądnej wartości domyślnej (I00025, b/161348384).
Dodano ui-rxjava2 – nowy artefakt z adapterami do RxJava2. Przykład użycia: wartość val by observable.subscribeAsState() (Ifab4b, b/153369097)
savedInstanceState()
może być teraz używany z typami z wartością null (I6847f, b/153532190)Nowe listy SaveSaver() i mapSaver() ułatwiające zapisywanie niestandardowych obiektów oszczędzania (I8cf68, b/152331508)
Nowe funkcje: savedInstanceState() i saveInstanceState(). Są podobne do state() i save(), ale mają wbudowaną obsługę zapisanego stanu instancji (If1987, b/152025209)
Poprawki błędów
- Nazwa etykiety
runOnIdleCompose
została zmieniona narunOnIdle
(I83607) - Utworzono eksperymentalny interfejs API UkładNode (I4f2e9)
- Metody androidx.ui.foundation.TextFieldValue i androidx.ui.input.EditorValue zostały wycofane. Obiekty TextField, FilledTextField i CoreTextField, które korzystają z tego typu, również zostały wycofane. Użyj androidx.ui.input.TextFieldValue (I4066d, b/155211005)
- Usunęliśmy wycofany interfejs DrawBackground API i zastąpiliśmy go w Modifierie interfejsami API rozszerzenia DrawBackground. Zrefaktoryzowano stosowanie kolorów, pędzli i malarstwa do rysowania tła, aby zmniejszyć ścieżki w kodzie, oraz wyeliminowaliśmy konieczność tworzenia modyfikatora w ramach kompozycji. (I0343a)
- Zaktualizowane interfejsy API tworzenia wyższego poziomu, które udostępniają obiekt Canvas na potrzeby korzystania z CanvasScope. Dzięki temu nie muszą oni utrzymywać własnych obiektów Paint. Klienci, którzy nadal potrzebują dostępu do Canvas, mogą użyć metody rozszerzenia pullCanvas, która udostępnia wywołanie zwrotne do wysyłania poleceń rysowania za pomocą bazowego obiektu Canvas. (I80afd)
- Zmieniono interfejs API lambda na końcu WithConstraints. Zamiast 2 parametrów ma zakres odbiornika, który oprócz ograniczeń i układu DirectionDirections udostępnia właściwości minWidth, maxWidth, minHeight i maxHeight w Dp (I91b9a, b/149979702).
- Dodano symetryczny modyfikator dopełnienia. (I39840)
- Zaktualizowano wartości wrapContentWidth i wrapContentHeight, aby uzyskać wyrównanie pionowe lub poziome, a nie wyrównanie. Modyfikator grawitacji został zaktualizowany, aby akceptować wyrównanie w pionie lub poziomie. Wiersze, kolumny i stosy zostały zaktualizowane tak, by umożliwić obsługę niestandardowego ciągłego wyrównywania. (Ib0728)
- Nazwa modułu ui-text została zmieniona na ui-text-core (I57dec)
- Ulepsz interfejs DrawModifier API:
- Utworzono zakres odbiornika pull() ContentDrawScope
- Usunięto wszystkie parametry z funkcji pull()
- DrawScope ma ten sam interfejs co poprzednia wersja CanvasScope
- ContentDrawScope ma metodę pullContent() (Ibaced, b/152919067)
- Interfejs ColoredRect został wycofany. Użyj w zamian zasady
Box(Modifier.preferredSize(width, height).drawBackground(color))
. (I499fa, b/152753731) - Zastąpiono operator plusa z funkcjami rozszerzeń fabrycznych (I225e4).
- Użytkownicy RowScope i ColumnScope są teraz dostępni poza wierszami i kolumnami. (I3a641)
- Zmieniono nazwę UkładuElastycznego na UkładWeight. Zmieniono nazwę ścisłego parametru na wypełnienie. (If4738)
- WithConstraints pobiera parametr UkładDirection (I6d6f7)
- Zmieniono nazwę tła na DrawBackground i ustawiliśmy je jako domyślne (Ia0bd3)
- Zastąpiliśmy element ButtonStyle innymi funkcjami i usunęliśmy przeciążenie tekstu (ciągi). Informacje o wykorzystaniu znajdziesz w zaktualizowanych przykładach. (If63ab, b/146478620, b/146482131)
runOnIdleCompose
irunOnUiThread
to teraz funkcje globalne, a nie metody w ComposeTestRule. (Icbe8f)
Wkład z zewnątrz
- Usuń niepotrzebny interfejs API, taki jak Looper i Handler, z warstwy portingu Compose Runtime (I6847d).
- Wycofaj atrybut
Flow<T>.collectAsState()
bez wartości początkowej. Użyj parametruStateFlow<T>
lub przekaż określoną wartość początkową. (I63f98, b/157674865)