androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshotsZobacz wszystkie pakiety API compose.runtime.snapshots
({11Capshots compose.runtime.rxjava3)
Najnowsza aktualizacja | Wersja stabilna | Kandydat do wydania | Wersja Beta | Wydanie alfa |
---|---|---|---|---|
26 czerwca 2024 r. | 1.6.8 | - | 1.7.0-beta04 | - |
Struktura
Narzędzie Compose to połączenie 7 identyfikatorów grup Maven w ramach usługi androidx
. Każda grupa zawiera docelowy podzbiór funkcji, z których każda ma własny zestaw informacji o wersji.
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 wzbogacać wrażenia użytkowników. |
compose.buildr | Przekształcaj funkcje @Composable i optymalizuj funkcje za pomocą wtyczki kompilatora Kotlin. |
compose.foundation | Twórz aplikacje w Jetpack Compose, używając gotowych do użycia elementów składowych, i rozbuduj podstawy, aby tworzyć własne elementy systemu. |
compose.material, | Twórz interfejsy Jetpack Compose z gotowymi do użycia komponentami Material Design. Jest to punkt wejścia wyższego poziomu w Composer, który ma dostarczać komponenty pasujące do tych opisanych na www.material.io. |
compose.material3, | Twórz interfejsy Jetpack Compose z komponentami Material Design 3, które stanowią kolejną wersję Material Design. Material 3 ma zaktualizowane motywy i komponenty oraz funkcje personalizacji Material You, takie jak dynamiczne kolory, i został zaprojektowany tak, aby był spójny z nowym stylem wizualnym i interfejsem systemu na Androidzie 12. |
compose.runtime, | Podstawowe elementy składowe modelu programowania i zarządzania stanem w Compose oraz podstawowe środowisko wykonawcze, na które ma być kierowana wtyczka kompilatora Compose. |
compose.ui, | Podstawowe elementy 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ść w 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.8" implementation "androidx.compose.runtime:runtime-livedata:1.6.8" implementation "androidx.compose.runtime:runtime-rxjava2:1.6.8" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.14" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.6.8") implementation("androidx.compose.runtime:runtime-livedata:1.6.8") implementation("androidx.compose.runtime:runtime-rxjava2:1.6.8") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.14" } 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 odkryjesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj istniejące problemy w tej bibliotece. Możesz oddać swój głos do istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia do śledzenia problemów.
Wersja 1.0 śledzenia środowiska wykonawczego
Wersja 1.0.0-beta01
29 listopada 2023 r.
Usługa androidx.compose.runtime:runtime-tracing:1.0.0-beta01
została zwolniona. Wersja 1.0.0-beta01 zawiera te zatwierdzenia.
Wersja 1.0.0-alpha05
15 listopada 2023 r.
Usługa androidx.compose.runtime:runtime-tracing:1.0.0-alpha05
została zwolniona. Wersja 1.0.0-alfa05 zawiera te zatwierdzenia.
Poprawki błędów
- Przypięto zależności do najgorszych obsługiwanych wersji stabilnych (np.compose-runtime i tracing-perfetto). Rozwiązano problem, w którym śledzenie procesu tworzenia środowiska wykonawczego skutkowało umieszczeniem w aplikacji nowszej wersji środowiska wykonawczego kompozycji.
Wersja 1.0.0-alpha04
23 sierpnia 2023 r.
Usługa androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
została zwolniona. Wersja 1.0.0-alfa04 zawiera te zatwierdzenia.
Nowe funkcje
- Zgodność z najnowszymi wersjami testów porównawczych i śledzenia Perfetto, umożliwiając obsługę śledzenia kompozycji podczas uruchamiania aplikacji (uruchamianie „na zimno”), np. w AndroidX Benchmark i Android Studio (od wersji Hedgehog Beta 2).
Zmiany interfejsu API
- Nazwa
androidx.tracing.perfetto.Trace
została zmieniona naandroidx.tracing.perfetto.PerfettoSdkTrace
. (I44af8). - Zapewniam spójność interfejsów API śledzenia Perfetto SDK z
android.os.Trace
. (I73ba0, b/282199917) - Wymagania wstępne do śledzenia podczas uruchamiania aplikacji. (IAD890).
- Scalone eksperymentalne i publiczne pliki interfejsu API (I0f2e1, b/278769092)
Wersja 1.0.0-alpha02
8 lutego 2023 r.
Usługa androidx.compose.runtime:runtime-tracing:1.0.0-alpha02
została zwolniona. Wersja 1.0.0-alfa02 zawiera te zatwierdzenia.
Nowe funkcje
- Bez zmian funkcjonalnych. Wiele optymalizacji wydajności w kolejnych zależnościach (
androidx.tracing:tracing-perfetto*
).
Wersja 1.0.0-alpha01
7 września 2022 roku
Usługa androidx.compose.runtime:runtime-tracing:1.0.0-alpha01
została zwolniona. Wersja 1.0.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje
androidx.compose.runtime:runtime-tracing
to biblioteka, która (wraz z obsługiwanymi przez nią narzędziami) umożliwia rozszerzone śledzenie w aplikacji Compose. Ta początkowa wersja to wersja 1.0.0-alfa01.
Wersja 1.7
Wersja 1.7.0-beta04
26 czerwca 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.7.0-beta04
została zwolniona. Wersja 1.7.0-beta04 zawiera te zatwierdzenia.
Wersja 1.7.0-beta03
12 czerwca 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.7.0-beta03
została zwolniona. Wersja 1.7.0-beta03 zawiera te zatwierdzenia.
Wersja 1.7.0-beta02
29 maja 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.7.0-beta02
została zwolniona. Wersja 1.7.0-beta02 zawiera te zatwierdzenia.
Wersja 1.7.0-beta01
14 maja 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.7.0-beta01
została zwolniona. Wersja 1.7.0-beta01 zawiera te zatwierdzenia.
Wersja 1.7.0-alpha08
1 maja 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.7.0-alpha08
została zwolniona. Wersja 1.7.0-alfa08 zawiera te zatwierdzenia.
Wersja 1.7.0-alpha07
17 kwietnia 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.7.0-alpha07
została zwolniona. Wersja 1.7.0-alfa07 zawiera te zatwierdzenia.
Nowe funkcje
- Dodano możliwość dostarczenia lokalnej kompozycji, która jest domyślnie obliczana na podstawie wartości innych lokalnych kompozycji (domyślnie przy użyciu funkcji
compositionLocalWithComputedDefault()
) lub przez podanie funkcji lambda do użycia w celu obliczenia wartości przy użyciu metodyprovidesComputed
zamiastprovides
. - Wartość lokalnej kompozycji można uzyskać za pomocą właściwości
currentValue
kompozycji dostępnej lokalnie z poziomu funkcji lambda i obliczając wartość. Jest ona używana zamiast wartościcurrent
, która jest dostępna tylko w funkcjach@Composable
. (Iadbc0).
Zmiany interfejsu API
- Nowo utworzone obiekty stanu są natychmiast dostępne z innych zrzutów, w tym z zrzutu globalnego, ze swoim stanem początkowym. Żadne kolejne modyfikacje nie będą widoczne, dopóki nie zostanie zastosowany zrzut, w którym utworzono obiekt.
- Początkowy stan obiektu
mutableStateOf()
i jego wersje podstawowe to wartość przekazywana jako parametr do funkcjimutableStateOf()
. Początkowy stan elementówmutableStateListOf()
imutableStateMapOf()
jest pusty. - Dodano obiekty
Snapshot.isInSnapshot
iSnapshot.PreexistingSnapshotId
, które są używane do tego, aby obiekt stanu umożliwiał natychmiastowy dostęp z globalnego zrzutu po jego utworzeniu. - Obiekty stanu niestandardowego mogą obsługiwać natychmiastowy dostęp zgodnie ze wzorcem zmian wprowadzanych do wbudowanych obiektów zrzutu. (I84a17)
Poprawki błędów
- Naprawiono scalanie obiektu
readObserver
w zagnieżdżonych zrzutach. Spowodowało to, że zagnieżdżone stany derywowane nie były nieprawidłowe, gdy były używane w elemenciesnapshotFlow
. (Idf138).
Wersja 1.7.0-alpha06
3 kwietnia 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.7.0-alpha06
została zwolniona. Wersja 1.7.0-alfa06 zawiera te zatwierdzenia.
Poprawki błędów
- Napraw dostarczanie pojedynczych wartości obsługujących
providesDefault
(538f45) - Unikanie zakleszczeń w rekompozytorium podczas uzyskiwania dostępu do zegara ramek (07e5c6)
Wersja 1.7.0-alpha05
20 marca 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.7.0-alpha05
została zwolniona. Wersja 1.7.0-alfa05 zawiera te zatwierdzenia.
Poprawki błędów
- Usuwanie późnych zmian dezaktywowanej kompozycji (5950bc)
Wersja 1.7.0-alpha04
6 marca 2024 roku
Usługa androidx.compose.runtime:runtime-*:1.7.0-alpha04
została zwolniona. Wersja 1.7.0-alfa04 zawiera te zatwierdzenia.
Ulepszenia wydajności
- Wywołaj funkcję
Snapshot.current
raz na ocenę stanu derywowanego (ee7daf) - Odczytaj
currentRecord
raz na obserwację w kompozycji (b882b2) - Usuń przypadkową alokację iteratora w
snapshotFlow
(231e56) - Włącz funkcję
nonSkippingGroupOptimization
w bibliotekach tworzenia wiadomości. Zwiększa to wydajność generowanego kodu wszystkich funkcji kompozycyjnych w Androidzie, których nie można ponownie uruchomić. W przyszłości planujemy włączyć tę funkcję jako domyślną. I(Acbc08)
Wersja 1.7.0-alpha03
21 lutego 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.7.0-alpha03
została zwolniona. Wersja 1.7.0-alfa03 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Przedstaw grupy zastępujące, aby ulepszyć wykrywanie zmian (0941b5)
Ulepszenia wydajności
- Popraw alokację pamięci podczas wykrywania zmian (53e7fd)
- Naprawianie wycieku pamięci w kompozytorze (0e097d)
- Użyj
ScopeMap
, aby podczas ponownego tworzenia wiadomości przekazywać unieważnienia (e19a7e) - Optymalizuj mapę unieważnień, aby zachować tylko stany derywowane (f11c44)
- Zastąp wystąpienia
IdentityArraySet
wartościąScatterSet
(db572e) - Optymalizuj
removeScope
w:ScopeMap
(bb0530)
Wersja 1.7.0-alpha02
7 lutego 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.7.0-alpha02
została zwolniona. Wersja 1.7.0-alfa02 zawiera te zatwierdzenia.
Poprawki błędów
- Unieważnij elementy kompozycyjne lambda w podkompozycjach w tej samej ramce. (98301c)
- Wywołuj wywołanie zwrotne pod numerem
onRelease
w tej samej kolejności jak w przypadku numeruonForgotten
. (2CD790) - Filtruj zmienione stany, których nie zaobserwowano w:
snapshotFlow
. (796B80).
Ulepszenia wydajności
- Zmodyfikuj obserwator zrzutu, gdy jest już przezroczysty. (F60f30)
- Optymalizuj
SnapshotIdSet.lowest()
. (7ae149). - Używaj atrybutu
fold()
bez przydziału w usłudzeSnapshotIdSet
. (532b7d) - Usuń przydział iteracji (83f96b)
Wersja 1.7.0-alpha01
24 stycznia 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.7.0-alpha01
została zwolniona. Wersja 1.7.0-alfa01 zawiera te zatwierdzenia.
Optymalizacje skuteczności
- Dodawanie możliwości tworzenia przedziałów po dodaniu grupy podrzędnej (b5960c)
- Optymalizuj zmiany w rejestrowaniu stanów zrzutów (28c3fe)
- Włącz tryb silnego pomijania (ed1766)
Poprawki błędów
- Weź pod uwagę metatag domyślnego parametru we wbudowanej zapamiętywaniu (096665)
- Ustaw wartość
currentCompoundHashKey
jako unikalną w większej liczbie przypadków (d4a872) - Realizowanie grup po wyjściu z wywołania funkcji wbudowanej (2a90fc)
Wersja 1.6
Wersja 1.6.8
12 czerwca 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.6.8
została zwolniona. Wersja 1.6.8 zawiera te zatwierdzenia.
Wersja 1.6.7
1 maja 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.6.7
została zwolniona. Wersja 1.6.7 zawiera te zatwierdzenia.
Wersja 1.6.6
17 kwietnia 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.6.6
została zwolniona. Brak zmian od ostatniej wersji.
Wersja 1.6.5
3 kwietnia 2024 r.
Usługa 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.
Usługa 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
Usługa 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.
Usługa 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.
Usługa androidx.compose.runtime:runtime-*:1.6.1
została zwolniona. Wersja 1.6.1 zawiera te zatwierdzenia.
Poprawki błędów
- Wywołuj wywołanie zwrotne pod numerem
onRelease
w tej samej kolejności jak w przypadku numeruonForgotten
. (2CD790) - Filtruj zmienione stany, których nie zaobserwowano w:
snapshotFlow
. (796B80).
Wersja 1.6.0
24 stycznia 2024 r.
Usługa androidx.compose.runtime:runtime-*:1.6.0
została zwolniona. Wersja 1.6.0 zawiera te zatwierdzenia.
Ważne zmiany wprowadzone od wersji 1.5.0
Nowe funkcje
- Wyjątki ponownego zgłoszenia, które są odrzucane podczas pętli ponownej kompozycji (4dff9a)
Optymalizacje skuteczności
- Optymalizuj zmiany w rejestrowaniu stanów zrzutów (28c3fe)
- Optymalizacja
rememberSaveable
(f01d79) - Odrocz ponowne odczytywanie stanów derywowanych do momentu zarejestrowania zmian (f38099)
- Poprawienie lokalnych wartości kompozycji (A337ea)
Poprawki błędów
- Napraw wyciek pamięci tabeli przedziałów (73fcfe)
- Pomiń ponowne kompozycje podkomponentów, które zostaną usunięte. (Ieeb99, b/254645321)
- Aktywuj cykl życia
RememberObserver
tylko wtedy, gdy jest on przechowywany w obliczeniach zapamiętywania. (f6b4dc) - Ogranicz przechwytywanie funkcji
$dirty
do wbudowanych lambda. (acfca0) - Popraw ruchomą treść, która czasami otrzymuje niewłaściwe lokalne kompozycja. (035cd6).
Wersja 1.6.0-rc01
10 stycznia 2024 r.
Usługa 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.
Usługa 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.
Usługa 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.
Usługa androidx.compose.runtime:runtime-*:1.6.0-beta01
została zwolniona. Wersja 1.6.0-beta01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Propaguj określone wartości stabilności w adnotacjach. (274a4c)
Poprawki błędów
- Używaj zasady referencyjnej dla stanu lokalnego zakresu kompozycji w kontekście. (83361c)
- Ogranicz przechwytywanie $dirty do wbudowanych lambda. (Acfca0)
- Popraw ruchomą treść, która czasami otrzymuje niewłaściwe lokalne kompozycja. (035cd6)
- Używaj szybszych nieprzydzielonych map haszujących w
RecomposeScopeImpl
. (D79494) - Używaj konta
ObjectIntMap
w aplikacjiDerivedState
. (21862e) - Użyj wartości
IntRef
dla całkowitej wartościSnapshotThreadLocal
w poluDerivedState
. (04eaf4)
Wersja 1.6.0-alpha08
18 października 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.6.0-alpha08
została zwolniona. Wersja 1.6.0-alfa08 zawiera te zatwierdzenia.
Poprawki błędów
- Aktywuj cykl życia
RememberObserver
tylko wtedy, gdy jest on przechowywany w obliczeniach zapamiętywania. (f6b4dc) - Popraw przydziały w sortowaniu listy unieważnień. (954d63)
- Użyj nowych map bez przydziałów w regionie
SnapshotStateObserver
. (4303CE) - Usuń unieważnienia po dezaktywacji kompozycji. (E001be)
Wersja 1.6.0-alpha07
4 października 2023 roku
Usługa androidx.compose.runtime:runtime-*:1.6.0-alpha07
została zwolniona. Wersja 1.6.0-alfa07 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Element
SnapshotStateList
jest teraz oznaczony jakoRandomAccess
, aby można było używać wersji pomocniczej listy do bezpośredniego indeksowania. (I5210c, b/219554654)
Wersja 1.6.0-alpha06
20 września 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.6.0-alpha06
została zwolniona. Wersja 1.6.0-alfa06 zawiera te zatwierdzenia.
Wersja 1.6.0-alpha05
6 września 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.6.0-alpha05
została zwolniona. Wersja 1.6.0-alfa05 zawiera te zatwierdzenia.
Wersja 1.6.0-alpha04
23 sierpnia 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.6.0-alpha04
została zwolniona. Wersja 1.6.0-alfa04 zawiera te zatwierdzenia.
Nowe funkcje
- Wyjątki ponownego zgłoszenia, które są odrzucane podczas pętli ponownej kompozycji (4dff9a)
Zmiany interfejsu API
- Dodano metodę dezaktywacji funkcji
ReusableComposition
, która usuwa obserwacje, ale pozostawia węzły na swoim miejscu. Dezaktywowaną kompozycję można ponownie aktywować, wywołując funkcjęsetContent
. (Ib7f31) - Dodaj interfejs
ReusableComposition
do zarządzania cyklem życia i ponownym używaniem podkompozycji. (I812d1, b/252846775)
Wersja 1.6.0-alpha03
9 sierpnia 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.6.0-alpha03
została zwolniona. Wersja 1.6.0-alfa03 zawiera te zatwierdzenia.
Poprawki błędów
- Napraw nową optymalizację
CompositionLocalProvider
(3118e88) - Popraw sposób demontowania przenoszonych węzłów treści. (5e3d59b)
Wersja 1.6.0-alpha02
26 lipca 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.6.0-alpha02
została zwolniona. Wersja 1.6.0-alfa02 zawiera te zatwierdzenia.
Nowe funkcje i ulepszenia w zakresie wydajności
- Optymalizacja
rememberSaveable
(f01d79) - Odrocz ponowne odczytywanie stanów derywowanych 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 kompozycji lokalnych w przypadku ponownego użycia (782071)
Zmiany interfejsu API
- W przypadku funkcji
CompositionLocalProviders
dodano specjalne nadmiarowe wielkość liter, co pozwala uniknąć narzutu pracochłonnego w celu przyspieszenia przekazywania wielu wartości, ale jest to nadmiarowe w przypadku pojedynczej wartości. (I6d640, b/288169379)
Poprawki błędów
- Napraw wyciek pamięci tabeli przedziałów (73fcfe)
- Rozwiąż problem z przywracaniem wartości
rememberSaveable
, gdy funkcjastateSaver
zwraca wartość null (90748c)
Wersja 1.6.0-alpha01
21 czerwca 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.6.0-alpha01
została zwolniona. Wersja 1.6.0-alfa01 zawiera te zatwierdzenia.
Poprawki błędów
- Pomiń ponowne kompozycje podkomponentów, które zostaną usunięte. (Ieeb99, b/254645321)
- Zmniejszono przydziały podczas stosowania zrzutów. (I65c09)
- Unikaj obliczania wartości
readableHash
wDerivedState
, jeśli zrzut nie został zmodyfikowany (68c565)
Wersja 1.5
Wersja 1.5.4
18 października 2023 r.
Usługa 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 roku
Usługa 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.
Usługa 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.
Usługa 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.
Usługa androidx.compose.runtime:runtime-*:1.5.0
została zwolniona. Wersja 1.5.0 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Usunięto przydziały w zmianie kompozycji, animacjach kolorów i elementach
AndroidComposeView
. (Ib2bfa) - Dodano adnotację
@StateFactoryMarker
do oznaczania funkcji, które tworzą stany i które muszą być uwzględnione w wywołaniuremember
. (I64550) - Dodaj podstawowe wersje State i
MutableState
(fb3d89) - Dodano:
Snapshot.isApplyObserverNotificationPending
(I672a5) - Dodaliśmy podstawowe wersje interfejsu API
State
, dzięki czemu możliwe jest śledzenie wartości Int, Long, Float i Double w obiektachState
bez nałożenia kary za autoboxing. Aby z nich korzystać, użyj nowych metod fabrycznych:mutableIntState(Int)
,mutableFloatStateOf(Float)
itp. (I48e43)
Poprawki błędów
- Pomiń ponowne kompozycje podkomponentów, które zostaną usunięte. (Ieeb99, b/254645321)
- Nie zachowuj odniesienia do zrzutu w:
ComposerImpl
(0206f7) - Nie stosuj kompozycji dwukrotnie (f5791b)
- Sprawdź unieważnienie niezainicjowanych wartości stanu derywowanego (aa2a92)
- Wywołaj
onEndChanges
podczas usuwania kompozycji. (62cc8c) - Rozwiązywanie problemów z przenoszeniem treści do podkompozycji (4beb41)
- Naprawianie potencjalnych blokad wzajemnych (c1a425 i 8edce0)
- Rekompozytor utworzony dla okna Androida będzie teraz blokować wywołania
withFrameNanos
, a nie całą kompozycję, gdy otrzyma powiadomienie ON_STOP. Oznacza to, że okna powiązane z zatrzymanymi działaniami będą nadal ponownie komponować się w przypadku zmian danych, ale animacje lub inne wywołanie elementuwithFrameNanos
będą blokowane. (Id9e7f, b/240975572) - Wykonaj wywołania zwrotne dezaktywacji dla
LayoutNode
przed usunięciem efektów 3784073 - Popraw zmienione flagi ponownie uruchomionej funkcji lambda ea81df9
- Popraw regresję edycji na żywo w przypadku funkcji kompozycyjnej z węzłami 73fd4d8
- Funkcja ON_STOP powinna wstrzymywać transmisje zegara dotyczące klatek zamiast animacji ae276f1.
- Unieważnij zakresy (
SnapshotStateObserver
) dla niezmienionych stanów derywowanych 84d9b1c - Naprawa potencjalnej blokady blokady podczas usuwania kompozycji 28761fc
- Rozwiązywanie problemów z przenoszeniem treści do podkompozycji 92d4156
- Popraw zmienione flagi ponownie uruchomionej funkcji lambda (8a03e9)
- Przed usunięciem efektów wykonaj wywołania zwrotne dezaktywacji dla
LayoutNode
(8b0fa4) - Napraw problem
endToMarker()
podczas kończenia grup węzłów. (D71D980) - Użyj bieżącej grupy
SlotWriter
do sprawdzenia dezaktywacji (a0b518b) - Usuń element
fill
w narzędziuSlotTable.moveSlotGapTo()
i przesuń go do zamknięcia (81f9935) - Rozwiązywanie problemów z brakującymi unieważnieniami podczas przenoszenia treści (1d7c024)
- Naprawianie natychmiastowego unieważniania przeniesionych treści (8676618)
Ulepszenia wydajności
- Unikaj obliczania wartości
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 rejestrów obiektów stanu z niedostępnymi rekordami stanu (c986960)
- Podczas tworzenia grup użyj komponentu kompozytora z prawidłowym zakresem (9a5e5b6)
- Użyj
IdentityArraySet
do przechowywania unieważnionych zrzutów (7f60cca) - Ogranicz przydziały obserwacji na potrzeby zrzutów (5bc535f)
Wersja 1.5.0-rc01
26 lipca 2023 r.
Usługa 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 derywowanych do momentu zarejestrowania zmian (f38099)
Dostępna jest opcjonalna kontrola, która zaleca migrację wywołań
mutableStateOf()
do odpowiednich typów specjalistycznych obiektów podstawowych. Identyfikator linta toAutoboxingStateCreation
. Wcześniej ta kontrola była domyślnie włączona we wszystkich projektach. Aby zobaczyć to ostrzeżenie w edytorze Androida Studio oraz w danych wyjściowych projektu lint, zmień jego wagę z informacyjnej na ostrzeżenie (lub wyższą), zadeklarującwarning "AutoboxingStateCreation"
w konfiguracji build.gradle lub build.gradle.kts, w sposób pokazany poniżej (I34f7e):android { lint { warning "AutoboxingStateCreation" } ... }
Wersja 1.5.0-beta03
28 czerwca 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.5.0-beta03
została zwolniona. Wersja 1.5.0-beta03 zawiera te zatwierdzenia.
Poprawki błędów
- Pomiń ponowne kompozycje podkomponentów, które zostaną usunięte. (Ieeb99, b/254645321)
Wersja 1.5.0-beta02
7 czerwca 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.5.0-beta02
została zwolniona. Wersja 1.5.0-beta02 zawiera te zatwierdzenia.
Ulepszenia wydajności
- Unikaj obliczania wartości
readableHash
wDerivedState
, jeśli zrzut nie został zmodyfikowany. (307102).
Wersja 1.5.0-beta01
24 maja 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.5.0-beta01
została zwolniona. Wersja 1.5.0-beta01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Usunięto alokacje w zmianie kompozycji, animacji kolorów i funkcji
AndroidComposeView
(Ib2bfa). - Dodano adnotację
@StateFactoryMarker
do oznaczania funkcji, które tworzą stany i które muszą być uwzględnione w wywołaniuremember
. (I64550) - Dodaj podstawowe wersje State i
MutableState
(fb3d89) - Dodano:
Snapshot.isApplyObserverNotificationPending
(I672a5)
Poprawki błędów
- Ograniczone przydziały (I65c09, d7ea77, 727974 i 445808)
- Nie zachowuj odniesienia do zrzutu w:
ComposerImpl
(0206f7) - Szybkie anulowanie tworzenia wiadomości
CoroutineScopes
(a55362 i bd382f) - Nie stosuj kompozycji dwukrotnie (f5791b)
- Sprawdź unieważnienie niezainicjowanych wartości stanu derywowanego (aa2a92)
- Wywołaj
onEndChanges
podczas usuwania kompozycji. (62cc8c) - Rozwiązywanie problemów z przenoszeniem treści do podkompozycji (4beb41)
- Naprawianie potencjalnych blokad wzajemnych (c1a425
- Funkcja ON_STOP powinna wstrzymywać transmisje zegara dotyczące klatek zamiast kompozycji (f4a2d1).
- Popraw zmienione flagi ponownie uruchomionej funkcji lambda (8a03e9)
- Przed usunięciem efektów wykonaj wywołania zwrotne dezaktywacji dla
LayoutNode
(8b0fa4)
Treści tłumaczone przez użytkowników zewnętrznych
- Dodano:
Snapshot.isApplyObserverNotificationPending
(I672a5)
Wersja 1.5.0-alpha04
10 maja 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.5.0-alpha04
została zwolniona. Wersja 1.5.0-alfa04 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodaliśmy podstawowe wersje interfejsu API
State
, dzięki czemu możliwe jest śledzenie wartości Int, Long, Float i Double w obiektachState
bez nałożenia kary za autoboxing. Aby z nich korzystać, użyj nowych metod fabrycznych:mutableIntState(Int)
,mutableFloatStateOf(Float)
itp. (I48e43)
Poprawki błędów
Wywołaj
onEndChanges
podczas usuwania kompozycji. Zaznaczenie węzłów usunięte podczasComposition.dispose
subskrybują funkcjęonEndChanges
w celu resetowania zaznaczenia.(03d4a47)Zadbaj o unieważnienie niezainicjowanych wartości stanu derywowanego. Każdy stan derywowany 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 derywowanym, gdy tylko zależność się zmienia. Zmiana zależności jest rejestrowana podczas przechodzenia zrzutu ekranu, co może nastąpić po odczytaniu stanu derywowanego (w wyniku wywołania funkcjiSnapshot.notifyObjectsInitialized()
).Poprzednia logika obserwacji stanu derywowanego stanu w
SnapshotStateObserver
polegała na usunięciu starych zależności i odczytaniu nowej wartości. Doprowadziło to do wystąpienia stanu wyścigu, w którym unieważnienie zależności nie zostało zarejestrowane w stanie oczyszczonym.Ta zmiana zmienia kolejność odczytu stanu deryfonu i czyszczenia zależności, dzięki czemu unieważnianie zawsze odbywa się w prawidłowym stanie. (C472be6)
Wersja 1.5.0-alpha03
19 kwietnia 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.5.0-alpha03
została zwolniona. Wersja 1.5.0-alfa03 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Rekompozytor utworzony dla okna Androida będzie teraz blokować wywołania
withFrameNanos
, a nie całą kompozycję, gdy otrzyma powiadomienie ON_STOP. Oznacza to, że okna powiązane z zatrzymanymi działaniami będą nadal ponownie komponować się w przypadku zmian danych, ale animacje lub inne wywołanie elementuwithFrameNanos
będą blokowane. (Id9e7f, b/240975572)
Poprawki błędów
- Naprawianie potencjalnej blokady zakleszczeń na liście zrzutów i na mapie 5c1a425
- Wykonaj wywołania zwrotne dezaktywacji dla
LayoutNode
przed usunięciem efektów 3784073 - Popraw zmienione flagi ponownie uruchomionej funkcji lambda ea81df9
- Popraw regresję edycji na żywo w przypadku funkcji kompozycyjnej z węzłami 73fd4d8
- Funkcja ON_STOP powinna wstrzymywać transmisje zegara dotyczące klatek zamiast animacji ae276f1.
- Unieważnij zakresy (
SnapshotStateObserver
) dla niezmienionych stanów derywowanych 84d9b1c - Naprawa potencjalnej blokady blokady podczas usuwania kompozycji 28761fc
- Rozwiązywanie problemów z przenoszeniem treści do podkompozycji 92d4156
Wersja 1.5.0-alpha02
5 kwietnia 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.5.0-alpha02
została zwolniona. Wersja 1.5.0-alfa02 zawiera te zatwierdzenia.
Nowe funkcje
- Operator
getValue
Kotlin może teraz być kompozycyjny (f174f6e)
Poprawki błędów i ulepszenie działania aplikacji
- Zastępowanie rejestrów obiektów stanu z niedostępnymi rekordami stanu (c986960)
- Podczas tworzenia grup użyj komponentu kompozytora z prawidłowym zakresem (9a5e5b6).
- Napraw problem
endToMarker()
podczas kończenia grup węzłów. (D71D980) - Użyj bieżącej grupy
SlotWriter
do sprawdzenia dezaktywacji (a0b518b) - Użyj
IdentityArraySet
do przechowywania unieważnionych zrzutów (7f60cca) - Usuń element
fill
w narzędziuSlotTable.moveSlotGapTo()
i przesuń go do zamknięcia (81f9935) - Rozwiązywanie problemów z brakującymi unieważnieniami podczas przenoszenia treści (1d7c024)
- Naprawianie natychmiastowego unieważniania przeniesionych treści (8676618)
- Ogranicz przydziały obserwacji na potrzeby zrzutów (5bc535f)
Wersja 1.5.0-alpha01
22 marca 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.5.0-alpha01
została zwolniona. Wersja 1.5.0-alfa01 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaje dyrektywę
Modifier.Node#coroutineScope
, aby umożliwićModifier.Nodes
uruchamianie współrzędnych (I76ef9) - Pozwól usłudze
Modifier.Nodes
na odczyt elementuCompositionLocals
za pomocą interfejsuCompositionLocalConsumerModifierNode
. (IB44df)
Wersja 1.4
Wersja 1.4.3
3 maja 2023 r.
Pakiet androidx.compose.runtime:runtime-*:1.4.3
został udostępniony bez zmian.
Wersja 1.4.2
19 kwietnia 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.4.2
została zwolniona. Wersja 1.4.2 zawiera te zatwierdzenia.
Poprawki błędów
Naprawianie potencjalnej blokady zakleszczeń na liście zrzutów i na mapie 2eb6570
Dodanie treści do obiektu
SnapshotStateList
lubSnapshotStateMap
może spowodować zakleszczenie, jeśli modyfikacja jest równoległa z bezpośrednim zapisem w rekordzie stanu. W związku ze zmianami wprowadzonymi przez model 93fcae828b, który wykorzystuje bezpośrednie zapisy do udostępniania nieużywanych rekordów, odnotowano znacznie większe prawdopodobieństwo wystąpienia tej sytuacji.Blokady są teraz uporządkowane w taki sposób, że nigdy nie próbowano wykonać blokady migawki, gdy blokada mapy lub listy jest zablokowana.
Wersja 1.4.1
5 kwietnia 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.4.1
została zwolniona. Wersja 1.4.1 zawiera te zatwierdzenia.
Poprawki błędów
- Popraw zasadę
endToMarker()
podczas kończenia grup węzłów. d71d980
Wersja 1.4.0
22 marca 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.4.0
została zwolniona. Wersja 1.4.0 zawiera te zatwierdzenia.
Ważne zmiany wprowadzone od wersji 1.3.0
- Użyj zainicjowanej wartości z pola
LiveData
dla pierwszej kompozycji 3680e25 - Dodaj
ComposeNodeLifecycleCallback
, aby obserwować cykl życia węzłów tworzenia. 8B6a258 - Dodaj usługę
parameterTypes
doComposableMethod
7b6c7ad
Poprawki błędów i ulepszenie działania aplikacji
- Wyczyść oba indeksy zakresów w
SnapshotStateObserver
29f4a3e - Dodaj potrzebne grupy w treści niemożliwych do pominięcia lambda 7d06752
- Poprawa charakterystyki referencyjnej pamięci stanu zrzutu 93fcae8
- Usuwanie pola w lokalnych wyszukiwaniach kompozycji 0875717
- Użyj prawidłowego klucza w przypadku grup węzłów nieprzeznaczonych do wielokrotnego użytku 6388d8d
- Ochrona urządzenia
SnapshotStateObserver
przed rekurencyjnym i równoczesnym stosowaniem 98cb6ba - Dodano sprawdzanie granic indeksu w metodzie „get” funkcji
IdentityArraySet
35a77d3 - Zaktualizuj moduł tworzenia wiadomości, aby używać rozszerzeń
ViewTreeLifecycleOwner
21c2122 - Wyślij powiadomienia o zastosowaniu, gdy Rekomponent zakończy ramkę. 98f2641
- Napraw błąd indeksu poza granicami podczas anulowania Rekompozytora 8f8656f
- Zawsze wymuszaj ponowne kompozycje, jeśli nadrzędni dostawcy kompozycji zmienili wartość 9526fcc
- Tolerancja repozytorium dla anulowanych zadań a55f7ed
- Poprawa obsługi unieważnień w przypadku dużej liczby kompozytorów 9b7ed67
- Rozwiązywanie problemów z generowaniem grup zamykających dla zwrotów nielokalnych b6f590c
Wersja 1.4.0-rc01
8 marca 2023 r.
Usługa 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
androidx.compose.runtime:runtime:1.4.0-beta02
i androidx.compose.runtime:runtime-saveable:1.4.0-beta02
zostały udostępnione. Wersja 1.4.0-beta02 zawiera te zatwierdzenia.
Wersja 1.4.0-beta01
8 lutego 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.4.0-beta01
została zwolniona. Wersja 1.4.0-beta01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodano
ComposeNodeLifecycleCallback
, który umożliwia obserwowanie cyklu życia węzłów tworzenia wiadomości (I3731b) - Do
Composer.disableSourceInformation()
dodano funkcję@TestOnly
, ponieważ tę funkcję można wywoływać tylko w ramach testu. (I896c8)
Poprawki błędów
- Usuń pasy w lokalnych wyszukiwaniach kompozycji (62f66a)
- Poprawa charakterystyki referencyjnej pamięci stanu zrzutu (dfb451)
Wersja 1.4.0-alpha05
25 stycznia 2023 r.
androidx.compose.runtime:runtime:1.4.0-alpha05
i androidx.compose.runtime:runtime-saveable:1.4.0-alpha05
zostały udostępnione. Wersja 1.4.0-alfa05 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Więcej typów i wartości null funkcji wbudowanych/wycofanych (I24f91)
Wersja 1.4.0-alpha04
11 stycznia 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.4.0-alpha04
została zwolniona. Wersja 1.4.0-alfa04 zawiera te zatwierdzenia.
Zmiany interfejsu API
TestMonotonicFrameClock
używa teraz prawidłowej adnotacji do eksperymentu. (I95c9e)
Poprawki błędów
- Ochrona urządzenia
SnapshotStateObserver
przed rekurencyjnym i równoczesnym stosowaniem (d902fb)
Wersja 1.4.0-alpha03
7 grudnia 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.4.0-alpha03
została zwolniona. Wersja 1.4.0-alfa03 zawiera te zatwierdzenia.
Zmiany interfejsu API
- dodanie do klasy
ComposableMethod
nowej metody publicznej analogicznej do klasyjava.lang.reflect.Method#getParameterTypes()
(Iab0c3)
Poprawki błędów
- Powiadomienia o zastosowaniu zrzutu są teraz wysyłane, gdy
Recomposer
zakończy stosowanie zmian. (Iad6c0, b/222093277)
Wersja 1.4.0-alpha02
9 listopada 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.4.0-alpha02
została zwolniona. Wersja 1.4.0-alfa02 zawiera te zatwierdzenia.
Wersja 1.4.0-alpha01
24 października 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.4.0-alpha01
została zwolniona. Wersja 1.4.0-alfa01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- W
SnapshotStateList
iSnapshotStateMap
zostały teraz zaimplementowane z poszanowaniem zasadytoList()
itoMap()
. Te metody zwracają bieżące treści bez wprowadzania kopii, ponieważ zwracają wewnętrzne, stałe dane używane do przechowywania treści. Tej wartości można użyć na przykład do wygenerowania przepływu wartości za pomocą funkcjisnapshotFlow
bez konieczności kopiowania danych. (Ica2bd).
Wersja 1.3
Wersja 1.3.3
11 stycznia 2023 r.
Usługa androidx.compose.runtime:runtime-*:1.3.3
została zwolniona. Wersja 1.3.3 zawiera te zatwierdzenia.
- Brak zmian od wersji 1.3.2
Wersja 1.3.2
7 grudnia 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.3.2
została zwolniona. Wersja 1.3.2 zawiera te zatwierdzenia.
Poprawki błędów
- Zaktualizowano, aby zapewnić obsługę androidx.compose.ui 1.3.2
Wersja 1.3.1
9 listopada 2022 r.
Usługa 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.
Usługa androidx.compose.runtime:runtime-*:1.3.0
została zwolniona. Wersja 1.3.0 zawiera te zatwierdzenia.
Ważne zmiany wprowadzone od wersji 1.2.0
Obsługa wyjątków / pomoc przy edycji na żywo
- Aby zapewnić lepszą obsługę edycji na żywo, dodaliśmy interfejsy API umożliwiające obsługę wyjątków podczas tworzenia.
- Obsługa błędów kompozycji w przypadku ponownego załadowania „gorące”
- Obsługa błędów edycji na żywo podczas zapisywania/przywracania
Śledzenie kompozycji
- Dodaliśmy interfejsy API śledzenia środowiska wykonawczego, aby obsługiwać nowe narzędzia do śledzenia kompozycji
- Generowanie kompozycyjnych wywołań rozpoczęcia i zakończenia zdarzeń śledzenia
- Ponownie dodano ComposerKt.traceEventStart(Int, String)
Interfejsy API Composable Reflection
- Dodaliśmy nowy interfejs API
ComposableMethod
, aby zapewnić bardziej niezawodne oparte na odbiciu wywołania kompozycyjne interfejsy API. - Przenoszenie zasobu BeyondCorpComposable do środowiska wykonawczego
- Interfejs API Rework do wywoływania metody kompozycyjnej
Poprawki dotyczące środowiska wykonawczego
- Naprawianie nieprawidłowego testu zakresu przy sprawdzaniu tabel przedziałów dla znaczników
- Zezwalaj na przenoszenie treści ruchomej do i poza element SubcomposeLayout
- Rozwiązywanie problemów z przenoszeniem treści do nowej zawartości podkompozycji
System zrzutów
- System zrzutów dysku uzyskał różne ulepszenia w zakresie zarządzania pamięcią, wydajności i poprawności.
- Optymalizowanie usuwania zakresu w SnapshotStateObserver
- Pozbądź się zagnieżdżonych zrzutów utworzonych z przezroczystych zrzutów
- Poprawiono warunek wyścigu podczas odczytu stanu ze zrzutu globalnego
- Obsługa DerivedState w zasadzie SnapshotStateObserver
- Zapobiegaj usuwaniu z kompozycji stanu derywowanego, gdy jest on odczytywany w innych zakresach
- Używanie IdentityTrackMap zamiast HashMap w elemencie DerivedState
- Zaktualizuj obserwatorów stanu derywowanego, aby używać wektorów zmiennych
- Zaktualizuj czyszczenie stanu SnapshotStateObserver
- Zastąpienie SnapshotStateObserver.invalidated ustawieniem SlateSet.
- Poprawiono warunek wyścigu podczas odczytu stanu ze zrzutu globalnego
- Poprawianie użycia nieaktualnego rekordu w obliczaniu haszu DerivedState
- Poprawianie warunków wyścigu podczas rozwijania podsumowania globalnego
- Przyspieszanie czyszczenia obserwacji zakresu w SnapshotStateObserver
Wersja 1.3.0-rc01
5 października 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.3.0-rc01
została zwolniona. Wersja 1.3.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Poprawiono parametr
ArrayIndexOutOfBoundsException
pochodzący z tabeli przedziałów (b/249076084).
Wersja 1.3.0-beta03
21 września 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.3.0-beta03
została zwolniona. Wersja 1.3.0-beta03 zawiera te zatwierdzenia.
Wyjątkowa zmiana w działaniu
- Parametr do
remember
irememberCoroutineScope
został zmieniony nacrossinline
. Spowoduje to zgłoszenie błędu przy wczesnych zwrotach zamiast umożliwienia wcześniejszego zwrotu, co spowoduje zgłoszenie późniejszego błędu wewnętrznego. - Ta zmiana może potencjalnie prowadzić do zgłaszania nowych błędów kompilatora, przez co konieczne będzie usunięcie z obiektów lambda przekazywanych do tych funkcji zwracanych wartości nielokalnych. (Ibea62).
Wersja 1.3.0-beta02
7 września 2022 roku
Usługa 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.
Usługa androidx.compose.runtime:runtime-*:1.3.0-beta01
została zwolniona. Wersja 1.3.0-beta01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Do
CompositionData
dodano metodęfind
, aby umożliwić narzędziom deweloperskim korzystającym z tego interfejsu API szybkie znajdowanie podgrupy kompozycji na podstawie jej tożsamości. (I5794f)
Wersja 1.3.0-alfa03
10 sierpnia 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.3.0-alpha03
została zwolniona. Wersja 1.3.0-alfa03 zawiera te zatwierdzenia.
Wersja 1.3.0-alfa02
27 lipca 2022 roku
Usługa androidx.compose.runtime:runtime-*:1.3.0-alpha02
została zwolniona. Wersja 1.3.0-alfa02 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Ponownie dodano atrybut
ComposerKt.traceEventStart(Int, String)
, by zapewnić zgodność wsteczną (I6e6de)
Wersja 1.3.0-alpha01
29 czerwca 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.3.0-alpha01
została zwolniona. Wersja 1.3.0-alfa01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Przeniesienie funkcji narzędziowych do środowiska wykonawczego (I4f729)
Wersja 1.2
Wersja 1.2.1
10 sierpnia 2022 r.
Usługa 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: usunięcie zagnieżdżonych zrzutów utworzonych z przezroczystych zrzutów b/239603305
Wersja 1.2.0
27 lipca 2022 roku
Usługa 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 w wersji 1.2.0 kilka funkcji oraz wiele poprawek błędów stabilizujących. Najważniejszą nową funkcją było wprowadzenie
movableContentOf
interfejsu API, który można wykorzystać do zapewnienia złożonych wrażeń użytkownika, takich jak przejścia wspólnych elementów. Interfejs APImovableContentOf
konwertuje funkcję kompozycyjnej lambda w lambdę, która przenosi jej stan i odpowiadające im węzły do dowolnej nowej lokalizacji. Gdy poprzednie wywołanie opuszcza kompozycję, stan zostaje tymczasowo zachowywany, a jeśli do kompozycji pojawi się nowe wywołanie funkcji lambda, stan wraz z powiązanymi węzłami zostanie przeniesiony do lokalizacji nowego wywołania. Jeśli nie dodasz nowego wywołania, stan zostanie trwale usunięty, a obserwatorzy zostaną o tym powiadomieni.Jeśli funkcja lambda
movableContentOf
zostanie wywołana wiele razy w tej samej kompozycji, dla każdego wywołania tworzony jest nowy stan i węzły. Gdy wywołania opuszczają kompozycję i dochodzą nowe wywołania, stan jest przenoszony z pierwszego opuszczania do wywołań przychodzących w kolejności ich wywołania. Wszystkie stany, które nie zostały objęte nowymi wywołaniami, zostaną trwale usunięte.Oprócz tej i kilku innych nowych funkcji spędziliśmy dużo czasu na stabilizacji środowiska wykonawczego i systemu stanu zrzutu. Usunięto różne wycieki pamięci i zoptymalizowano ścieżki kodu.
Podsumowanie zmian znajdziesz poniżej:
Nowe funkcje w 1.2
- Dodaj zrzut eksperymentalny niebezpiecznyEnter/opcję
- Dodaj eksperymentalny interfejs API Snapshot.asContextElement
- Przedstawienie Snapshot.withoutReadObserwacja
- Pozwalanie na przenoszenie stanu w obrębie kompozycji
- Śledzenie ponownych kompozycji w narzędziu Compose
Skuteczność w: 1.2
- Poprawianie lokalnej kompozycji
- Profile bazowe na potrzeby tworzenia powinny być określane za pomocą 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 z kompozycji stanu derywowanego, gdy jest on odczytywany w innych zakresach
- Efektywniejsze użycie metody removeScope() w metodzie SnapshotStateObserver
- Wyczyść zależności stanów derywowanych w kompozycji
- Naprawa zmiany wartości currentCompositeKeyHash po wewnętrznej ponownej kompozycji wewnątrz treści ruchomej
- Sprzątaj nieprawidłowe kompozycje podczas utylizacji
- Napraw stan pobierania odczytywany podczas ponownej kompozycji
- Naprawianie wycieku pamięci podczas obserwacji obiektów stanu derywowanego
- Poprawiono złożony klucz szyfrowania movableContent dla zachowania spójności
- Napraw narożnik obudowy, w której kompozytor ulegał awarii
- Zapewnianie wymuszonej unieważnienia grupy
- Naprawianie błędu polegającego na tym, że dane wejściowe do zapisania są przywracane w niewłaściwej kolejności
Wersja 1.2.0-rc03
29 czerwca 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.2.0-rc03
została zwolniona. Wersja 1.2.0-rc03 zawiera te zatwierdzenia.
Poprawki błędów
- Uzyskane obserwacje stanu były wcześniej bezwarunkowo usuwane z zakresu ponownego budowania i kompozycji razem, co naruszało inne zakresy, które nadal mogą rejestrować stan odbioru. Ta zmiana spowoduje usunięcie instancji stanu derywowanego tylko wtedy, gdy nie jest już obserwowana przez inne zakresy. (b/236618362)
Wersja 1.2.0-rc02
22 czerwca 2022 r.
Usługa 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.
Usługa androidx.compose.runtime:runtime-*:1.2.0-rc01
została zwolniona. Wersja 1.2.0-rc01 zawiera te zatwierdzenia.
Zmiany interfejsu 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.
Usługa 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.
Usługa 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
Usługa androidx.compose.runtime:runtime-*:1.2.0-beta01
została zwolniona. Wersja 1.2.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
- Pierwsza wersja beta 1.2.
Zmiany interfejsu API
- Dodano eksperymentalną
Snapshot.unsafeEnter/unsafeLeave
(I108f3) - Dodano eksperymentalny interfejs API
Snapshot.asContextElement()
(Iff072) - Adnotacji
@ComposableTarget
i adnotacji oznaczonych przez@ComposableTargetMarker
można teraz używać w zakresie pliku przy użyciu prefiksu@file
. Użycie adnotacji docelowej w zakresie pliku spowoduje, że kompilator przyjmie, że wszystkie funkcje kompozycyjne w pliku są kierowane do powiązanego zastosowania. Na przykład użycie@file:UiComposable
powoduje deklarowanie, że wszystkie funkcje@Composable
są kierowane na aplikację UI tworzenia wiadomości. Funkcja, która musi kierować reklamy na innego dostawcę, musi jawnie dostarczyć adnotację znacznika docelowego miejsca docelowego dla wybranego dostawcy. (I40804)
Wersja 1.2.0-alpha08
20 kwietnia 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.2.0-alpha08
została zwolniona. Wersja 1.2.0-alfa08 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodano
TracingInProgress
do interfejsuCompositionTracer
. (Ic6f12). - Dodaj urządzenie
recomposeScopeIdentity
do usługi Composer (I0C873) - Interfejsy API śledzenia z ograniczeniami (Composer.setTracer) do:
OptIn(InternalComposeTracingApi)
. (I9187F) - Dodano
ResuableContentHost
, który zapewnia większą kontrolę nad okresem tworzenia stanu tworzonego dla treści wielokrotnego użytku. Jeśli na przykład podkompozycja nie jest tymczasowo używana, można zdezaktywować tę treść, co spowoduje zapomnienie wszystkich zapamiętanych stanów kompozycji, np. wszystkie efekty jednorazowe. (I2c0f2, b/220322704)
Wersja 1.2.0-alpha07
6 kwietnia 2022 roku
Usługa androidx.compose.runtime:runtime-*:1.2.0-alpha07
została zwolniona. Wersja 1.2.0-alfa07 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodano nową funkcję
Snapshot.withoutReadObservation { ... }
. Umożliwia użytkownikom uruchamianie przekazywanej funkcji lambda bez subskrybowania zmian wartości stanu odczytywanych podczas tego bloku. Może być przydatna w przypadkach, gdy chcesz skorzystać z bezpiecznego zapisu/odczytu wątków bazujących na zrzutach, ale chcesz mieć możliwość odczytania wartości bez potrzeby niepotrzebnej zmiany kompozycji czy ponownych pomiarów. (I9f365, b/214054486)
Wersja 1.2.0-alpha06
23 marca 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.2.0-alpha06
została zwolniona. Wersja 1.2.0-alfa06 zawiera te zatwierdzenia.
Wersja 1.2.0-alpha05
9 marca 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.2.0-alpha05
została zwolniona. Wersja 1.2.0-alfa05 zawiera te zatwierdzenia.
Treści tłumaczone przez użytkowników zewnętrznych
- Zaktualizowano, aby korzystać z współrzędnych Kotlinx w wersji 1.6.0 (I3366d)
Wersja 1.2.0-alfa04
23 lutego 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.2.0-alpha04
została zwolniona. Wersja 1.2.0-alfa04 zawiera te zatwierdzenia.
Zmiany interfejsu API
Dodano
ComposableTarget
,ComposableTargetMarker
iComposableOpenTarget
, które umożliwiają raportowanie w czasie kompilacji, kiedy funkcja kompozycyjna jest wywoływana pod kątem kierowania na aplikację, która nie została przez nią zaprojektowana.W większości przypadków adnotacje można wywnioskować dzięki wtyczce kompilatora, więc nie można używać ich bezpośrednio . Przypadki, których nie można wywnioskować, to m.in. utworzenie i użycie niestandardowego zastosowania, abstrakcyjnych funkcji kompozycyjnych (np. metod interfejsu), pól lub zmiennych globalnych, które są obiektami kompozycyjnymi (wywnioskowane są lokalne zmienne i parametry) lub podczas korzystania z funkcji
ComposeNode
albo powiązanych funkcji kompozycyjnych.W przypadku zastosowania niestandardowych funkcje kompozycyjne wywołujące funkcję
ComposeNode
lubReusableComposeNode
muszą dodać adnotacjęCompoableTarget
dla funkcji i dowolnych typów parametrów kompozycyjnych lambda. Zalecamy jednak utworzenie adnotacji zawierającej adnotacjęComposableTargetMarker
, a następnie użycie oznaczonej adnotacji zamiast bezpośrednioComposableTarget
. Adnotacja kompozycyjna oznaczona kodemComposableTargetMarker
jest równoważna z adnotacjąComposbleTarget
z pełną i jednoznaczną nazwą klasy atrybutu jako parametrem zastosowania. Przykład użyciaComposableTargetMarker
znajdziesz tutaj:anroidx.compose.ui.UiComposable
. (I38f11)
Wersja 1.2.0-alfa03
9 lutego 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.2.0-alpha03
została zwolniona. Wersja 1.2.0-alfa03 zawiera te zatwierdzenia.
Zmiany interfejsu API
Dodano funkcję
movableContentOf
, która konwertuje funkcję kompozycyjnej lambda w lambdę zmieniającą jej stan i odpowiadające im węzły do dowolnej nowej lokalizacji. Gdy poprzednie wywołanie opuszcza kompozycję, stan zostaje tymczasowo zachowywany, a jeśli do kompozycji pojawi się nowe wywołanie funkcji lambda, stan i powiązane z nim węzły zostaną przeniesione do lokalizacji nowego wywołania. Jeśli nie dodasz nowego wywołania, stan jest trwale usuwany, a obserwatorzy otrzymują powiadomienia.Jeśli funkcja lambda
movableContentOf
zostanie wywołana wielokrotnie z tej samej kompozycji, dla każdego wywołania tworzony jest nowy stan i węzły, a gdy wywołania opuszczają kompozycję i dochodzą nowe wywołania, stan przenoszony jest z pierwszego wyjścia do wywołań przychodzących w kolejności, w jakiej zostały wywołane. Wszystkie stany, które nie zostały objęte nowymi wywołaniami, są usuwane na stałe. (IB4850)Do kompozycji dodaliśmy interfejs API śledzenia, aby umożliwić narzędziom zapewniające bardziej szczegółowe śledzenie funkcji kompozycyjnych. Kompilator generuje teraz wywołania interfejsu API śledzenia, które zawierają informacje o źródle. (Ib0eb5)
Aby usunąć te wywołania i powiązane informacje o źródle z kompilacji wersji, dodaj tę regułę ProGuard:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }
Dodaj atrybut
InternalComposeScope
, który umożliwia narzędziom identyfikowanie utworu kompozycyjnego podczas zmiany kompozycji. (I07a3f)
Wersja 1.2.0-alfa02
26 stycznia 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.2.0-alpha02
została zwolniona. Wersja 1.2.0-alfa02 zawiera te zatwierdzenia.
Wersja 1.2.0-alpha01
12 stycznia 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.2.0-alpha01
została zwolniona. Wersja 1.2.0-alfa01 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Do
CompositionData
dodano poleidentity
do generowania 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.
Usługa androidx.compose.runtime:runtime-*:1.1.1
została zwolniona. Wersja 1.1.1 zawiera te zatwierdzenia.
Poprawki błędów
- Napraw
NullPointerException
pod adresemandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
(aosp/1947059, b/206677462) - Naprawiono błąd spowodowany przez zawartość schowka przy odczytywaniu ze schowka na Androidzie. (I06020, b/197769306)
- Poprawiono RTL w
LazyVerticalGrid
(aosp/1931080, b/207510535)
Wersja 1.1.0
9 lutego 2022 r.
Usługa androidx.compose.runtime:runtime-*:1.1.0
została zwolniona. Wersja 1.1.0 zawiera te zatwierdzenia.
Ważne zmiany wprowadzone od wersji 1.0.0
- Stabilna obsługa efektu przewijania w Androidzie 12.
- Ulepszenia rozmiaru docelowego elementu dotykowego
- Pamiętaj, że w przypadku Compose 1.0 komponenty Material mają rozszerzać obszar układu, aby zapewnić zgodność z wytycznymi dotyczącymi ułatwień dostępu Material Design rozmiar docelowego elementu dotykowego. Na przykład docelowy element dotykowy przycisku zostanie powiększony do minimalnego rozmiaru
48x48dp
, nawet jeśli ustawisz rozmiar przycisku na mniejszy. Dzięki temu interfejs Compose Material ma takie samo zachowanie jak komponenty stylu Material Design, co zapewnia spójne zachowanie w przypadku połączenia widoków i tworzenia wiadomości. Ta zmiana zagwarantuje też, że w przypadku tworzenia UI z użyciem komponentów Compose Material, minimalne wymagania dotyczące ułatwień dostępu docelowych elementów dotykowych będą spełnione. - Stabilna obsługa kolejki nawigacyjnej
- Przeniesienie niektórych wcześniej eksperymentalnych interfejsów API do wersji stabilnej
- pomoc dotycząca nowszych wersji Kotlin,
Wersja 1.1.0-rc03
26 stycznia 2022 r.
Usługa 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 obsługiwała materiał tworzenia wiadomości
1.1.0-rc03
Wersja 1.1.0-rc01
15 grudnia 2021 roku
Usługa androidx.compose.runtime:runtime-*:1.1.0-rc01
została zwolniona. Wersja 1.1.0-rc01 zawiera te zatwierdzenia.
Wersja 1.1.0-beta04
1 grudnia 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.1.0-beta04
została zwolniona. Wersja 1.1.0-beta04 zawiera te zatwierdzenia.
Nowe funkcje
- Zaktualizowano, aby była zgodna z platformą Kotlin
1.6.0
Wersja 1.1.0-beta03
17 listopada 2021 r.
Usługa 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.
Usługa androidx.compose.runtime:runtime-*:1.1.0-beta02
została zwolniona. Wersja 1.1.0-beta02 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Kod zrzutu 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
Usługa androidx.compose.runtime:runtime-*:1.1.0-beta01
została zwolniona. Wersja 1.1.0-beta01 zawiera te zatwierdzenia.
Wersja 1.1.0-alpha06
13 października 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.1.0-alpha06
została zwolniona. Wersja 1.1.0-alfa06 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Z metod narzędzia Composer, które muszą być wywoływane między modułami, usunięto element
InternalCompilerApi
(I1aa0b). - Interfejs
Recomposer.state
został wycofany i zastąpiony przezRecomposer.currentState
, aby zmienić jego typ na StateFlow (Ic2ab3, b/197773820)
Wersja 1.1.0-alpha05
29 września 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.1.0-alpha05
została zwolniona. Wersja 1.1.0-alfa05 zawiera te zatwierdzenia.
Wersja 1.1.0-alfa04
15 września 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.1.0-alpha04
została zwolniona. Wersja 1.1.0-alfa04 zawiera te zatwierdzenia.
Wersja 1.1.0-alfa03
1 września 2021 roku
Usługa androidx.compose.runtime:runtime-*:1.1.0-alpha03
została zwolniona. Wersja 1.1.0-alfa03 zawiera te zatwierdzenia.
Nowe funkcje
- Kompilator Compose obsługuje teraz starsze wersje środowiska wykonawczego Compose (1.0). Przed tą zmianą kompilator był zgodny tylko ze środowiskiem wykonawczym Compose w tej samej wersji lub nowszej. Po tej zmianie kompilator jest zgodny ze starszą wersją środowiska wykonawczego Compose (1.0). (Aosp/1796968).
- Zaktualizowano funkcję Utwórz
1.1.0-alpha03
, aby bazowała na Kotlinie1.5.30
. (I74545)
Wersja 1.1.0-alfa02
18 sierpnia 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.1.0-alpha02
została zwolniona. Wersja 1.1.0-alfa02 zawiera te zatwierdzenia.
Wersja 1.1.0-alpha01
4 sierpnia 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.1.0-alpha01
została zwolniona. Wersja 1.1.0-alfa01 zawiera te zatwierdzenia.
Wersja 1.0
Wersja 1.0.5
3 listopada 2021 r.
Usługa 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 instancjach originStateOf. (Aosp/1792247)
Wersja 1.0.4
13 października 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.0.4
została zwolniona. Wersja 1.0.4 zawiera te zatwierdzenia.
Aktualizacje zależności
- Zaktualizowano na podstawie usługi Kotlin
1.5.31
Wersja 1.0.3
29 września 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.0.3
została zwolniona. Wersja 1.0.3 zawiera te zatwierdzenia.
Aktualizacje zależności
- Zaktualizowano na podstawie usługi Kotlin
1.5.30
Wersja 1.0.2
1 września 2021 roku
Usługa androidx.compose.runtime:runtime-*:1.0.2
została zwolniona. Wersja 1.0.2 zawiera te zatwierdzenia.
Zaktualizowano, aby obsługiwała wersję 1.0.2
Utwórz. Funkcja Compose 1.0.2
jest nadal zgodna z Kotlin 1.5.21
.
Wersja 1.0.1
4 sierpnia 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.0.1
została zwolniona. Wersja 1.0.1 zawiera te zatwierdzenia.
Aktualizacje zależności
- Zaktualizowano w zależności od systemu Kotlin
1.5.21
.
Wersja 1.0.0
28 lipca 2021 roku
Usługa androidx.compose.runtime:runtime-*:1.0.0
została zwolniona. Wersja 1.0.0 zawiera te zatwierdzenia.
Główne funkcje 1.0.0
To jest pierwsza stabilna wersja Compose. Więcej informacji znajdziesz na oficjalnym blogu wersji Compose.
Znane problemy
Jeśli korzystasz z Android Studio Bumblebee Canary 4 lub AGP
7.1.0-alpha04
/7.1.0-alpha05
, może dojść do tej awarii:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
Aby rozwiązać ten problem, tymczasowo zwiększ wartość parametru minSdkVersion w pliku
build.gradle
do wartości 24 lub nowszej. Ten problem zostanie naprawiony w następnej wersji Androida Studio Bumblebee i AGP7.1
. (b/194289155)
Wersja 1.0.0-rc02
14 lipca 2021 roku
Usługa androidx.compose.runtime:runtime-*:1.0.0-rc02
została zwolniona. Wersja 1.0.0-rc02 zawiera te zatwierdzenia.
- Poprawiono warunki wyścigu w SnapshotStateObserver, które powodowały sporadyczne zjawiska NullPointerExceptions. (aosp/1763445, aosp/1758105, b/192677711)
- Rozwiązaliśmy problemy ze zrzutami czasu działania, 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
awarie. (b/193006595, b/192570897)
Wersja 1.0.0-rc01
1 lipca 2021 r.
Usługa 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.
Usługa 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 następujących 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.tekst
- androidx.compose.ui.tekst
- androidx.compose.ui.jednostka
- androidx.compose.ui.util,
Co to są reguły profilu?
Reguły profilu dla biblioteki określa się w pliku tekstowym
baseline-prof.txt
znajdującym się w katalogusrc/main
lub podobnym. Plik określa regułę w każdym wierszu, gdzie reguła w tym przypadku jest wzorcem dopasowywania do metod lub klas w bibliotece. Składnia tych reguł jest elementem nadrzędnym w przypadku czytelnego dla człowieka formatu profilu ART, który jest używany, gdy używaszadb shell profman --dump-classes-and-methods ...
. Reguły te mogą kierować reklamy na metody lub klasy w jednej z dwóch form.Reguła metody będzie miała następujący wzorzec:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
Reguła klasy będzie miała następujący wzorzec:
<CLASS_DESCRIPTOR>
<FLAGS>
to co najmniej jeden ze znakówH
,S
iP
wskazujących, czy ta metoda ma być oznaczona jako „Przebojowa”, „Uruchomienie” lub „Po uruchomieniu”.<CLASS_DESCRIPTOR>
to deskryptor klasy, do której należy wybrana metoda. Na przykład klasaandroidx.compose.runtime.SlotTable
miałaby deskryptorLandroidx/compose/runtime/SlotTable;
.<METHOD_SIGNATURE>
to podpis metody. Zawiera nazwę, typy parametrów i typy zwracanych metod. Na przykład metodafun isPlaced(): Boolean
wLayoutNode
ma podpisisPlaced()Z
.Aby jedna reguła obejmowała wiele metod lub klas, mogą one zawierać symbole wieloznaczne (
**
,*
i?
).
Do czego służą reguły?
Metoda z flagą
H
wskazuje, że jest to metoda „hot” i należy ją skompilować wcześniej.Metoda z flagą
S
wskazuje, że jest ona wywoływana przy uruchamianiu i należy ją skompilować z wyprzedzeniem, by uniknąć kosztów kompilacji i interpretacji podczas uruchamiania.Metoda z flagą
P
wskazuje, że jest to metoda, która jest wywoływana po uruchomieniu.Klasa znajdująca się w tym pliku wskazuje, że jest używana podczas uruchamiania i powinna być wstępnie przydzielona na stercie, aby uniknąć kosztów wczytywania klasy.
Jak to działa?
- Biblioteki mogą definiować reguły, które będą spakowane w artefaktach AAR. Kiedy powstaje aplikacja, która zawiera te artefakty, reguły te są łączone ze sobą, a scalone reguły służą do utworzenia kompaktowego binarnego profilu ART, który jest charakterystyczny dla aplikacji. ART może następnie wykorzystać ten profil, gdy aplikacja jest instalowana na urządzeniach, w celu z wyprzedzeniem skompilowania określonego podzbioru aplikacji w celu zwiększenia jej wydajności, zwłaszcza 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.
Usługa androidx.compose.runtime:runtime-*:1.0.0-beta08
została zwolniona. Wersja 1.0.0-beta08 zawiera te zatwierdzenia.
Zmiany interfejsu API
State<T>
to terazState<out T>
(I69049)ControlledComposition
– zmiana w interfejsie API umożliwiająca ponowne kompilowanie zmian w ramach ponownego tworzenia pojedynczej karty. (Iaafd1, b/184173932)
Wersja 1.0.0-beta07
18 maja 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.0.0-beta07
została zwolniona. Wersja 1.0.0-beta07 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodaliśmy nowe interfejsy API kompilatora, które pozwalają usunąć wygenerowane przez niego informacje o źródle podczas jego minifikacji. (Ia34e6).
Wprowadzamy funkcję
ReusableContent
, która będzie próbować ponownie wykorzystać węzły w swojej treści, zamiast je zastępować po zmianie klucza. Po zmianie klucza poprzednie wartości w tabeli przedziałów dla treści są ignorowane z wyjątkiem wygenerowanych węzłów i wartości używanych do zaktualizowania węzłów.Wprowadza funkcję
ReusableComposeNode
, która będzie ponownie wykorzystywać utworzony węzeł zamiast zastępować go jak w przypadkuComposeNode
. (I1dd86)@ComposeCompilerApi
nie jest już@RequiresOptIn
(Iab690)
Poprawki błędów
- LazyColumn/Row będzie teraz przechowywać do 2 wcześniej widocznych elementów aktywnych (nieusuniętych), nawet jeśli zostały już przewinięte. Dzięki temu komponent może ponownie korzystać z aktywnych kompozycji podrzędnych, gdy trzeba będzie utworzyć nowy element, który usprawnia przewijanie. (IE5555)
Wersja 1.0.0-beta06
5 maja 2021 roku
Usługa androidx.compose.runtime:runtime-*:1.0.0-beta06
została zwolniona. Wersja 1.0.0-beta06 zawiera te zatwierdzenia.
Zmiany interfejsu API
@ComposeCompilerApi
nie jest już@RequiresOptIn
(Iab690)
Wersja 1.0.0-beta05
21 kwietnia 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.0.0-beta05
została zwolniona. Wersja 1.0.0-beta05 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Usunięto
@InternalComposeApi
w przypadku rejestrowania odczytów i zapisów zrzutów (Id134d)
Poprawki błędów
- Pliki AndroidManifest z 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.
Usługa 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ą można było pomijać lokalne funkcje kompozycyjne na podstawie ich parametrów. Po tej zmianie żadne lokalne funkcje kompozycyjne nie zostaną pominięte. Jest to powszechna i oczekiwana sytuacja, w której funkcje lokalne przechwytują parametry z elementu nadrzędnego, a ich pomijanie jest częstym źródłem błędów.
Oto przykład:
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button( onCountChange(count + 1) }) { Text("Increment") } }
Przed tą zmianą funkcja kompozycyjna
ShowCount
zawsze była pomijana, nawet po zaktualizowaniu parametrucount
. Ta informacja jest nieaktualna. (I5648a)Rozwiązaliśmy problem, który powodował, że usługa
rememberSaveable()
przywracała starą wartość w przypadku używania z parametrami wejściowymi (I1b110, b/182403380)
Wersja 1.0.0-beta03
24 marca 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.0.0-beta03
została zwolniona. Wersja 1.0.0-beta03 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Interfejs
DefaultMonotonicFrameClock
został wycofany. WywołaniewithFrameNanos
lubRecomposer.runRecomposeAndApplyChanges
bez numeruMonotonicFrameClock
spowoduje zgłoszenieIllegalStateException
. (I4eb0d).
Wersja 1.0.0-beta02
10 marca 2021 r.
Usługa 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 korzystania z eksperymentalnych interfejsów API (I6aa29, b/174531520)
- Usunięto problem z uszkodzonym kodem
rememberSaveable { mutableStateOf(0) }
występującym w miejscu docelowym w nawigacji. (I1312b, b/180042685, b/180701630)
Wersja 1.0.0-beta01
24 lutego 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.0.0-beta01
została zwolniona. Wersja 1.0.0-beta01 zawiera te zatwierdzenia.
To jest pierwsza wersja beta Compose 1.0.0.
Zmiany interfejsu API
- Dodaj eksperymentalny interfejs API
Recomposer.runRecomposeConcurrentlyAndApplyChanges
do ponownego komponowania unieważnionych kompozycji poza pętlą ramki głównej. (I342d0) - Wszystkie elementy kompozycyjne oznaczone symbolem @ReadOnlyComposable są teraz sprawdzane podczas kompilacji podczas kompilowania, aby zagwarantować, że wywołują wyłącznie inne elementy @ReadOnlyComposables (I58961)
Pole
defaultFactory
dla obiektówcompositionLocalOf
istaticCompositionLocalOf
jest teraz wymagane, a nie opcjonalne.Ta zmiana usuwa potencjalny błąd typu w przypadku typów niedopuszczających wartości null, w których nie podano domyślnej wartości fabrycznej. Wcześniej w przypadku typu niedopuszczającego wartości null konieczne było odniesienie do wartości null.
W przypadku typów dopuszczających wartości null domyślną wartością fabryczną jest
{ null }
.Nie zalecamy używania zasobów lokalnych z typami niezawierającymi wartości null, chyba że można podać rozsądną wartość domyślną. Jeśli nie istnieje rozsądne ustawienie domyślne, funkcja lambda
defaultFactory
powinna zgłosić wyjątek. Zwrócenie wyjątku oznacza jednak, że konsumenci z okolicy są w bezpośrednim stopniu uzależnieni od jego zapewnienia, a system typów nie jest egzekwowany. (Ifbd2a).Wycofane symbole zostały usunięte ze środowiska wykonawczego tworzenia (I3252c)
Wycofana reguła
emptyContent()
została usunięta. Użyj w zamian zasady{}
. (Idb33f, b/179432510)Nazwa dostawców została zmieniona na CompositionLocalProvider
- Konstruktor Kompozycja nie akceptuje już kluczowego parametru i został wycofany.
- Parametr 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.
- Interfejs ComposableLambda został utworzony zamiast konkretnej klasy i nie ma już parametrów typu.
- Interfejs ComposableLambdaN został utworzony zamiast konkretnej klasy i nie ma już parametrów typu.
- Funkcja snapshotFlow została przeniesiona do przestrzeni nazw androidx.compose.runtime
- metoda scalania zasady SnapshotMutationPolicy nie jest już eksperymentalna
- Funkcja @TestOnly najwyższego poziomu clearRoots została usunięta. Już nie jest to konieczne.
- Funkcje keySourceInfoOf i resetSourceInfo zostały usunięte. Nie są już potrzebne.
- Element Composer.collectKeySourceInformation został usunięty. Już nie jest to konieczne.
- Metody isJoinedKey, JoinKeyLeft i joinKeyRight zostały usunięte. Nie są już potrzebne.
- Różne interfejsy API najwyższego poziomu zostały przeniesione i porządkowane w różne pliki. Ze względu na semantykę klas plików Kotlin spowoduje to naruszenie zgodności plików binarnych, ale nie źródła, więc nie powinno stanowić problemu dla większości użytkowników.
- (I99b7d, b/177245490)
SnapshotStateObserver nie jest już funkcją eksperymentalną (Id2e6a)
usunęliśmy niektóre wycofane wcześniej interfejsy API (Ice5da, b/178633932),
W interfejsie Material API wprowadzono te zmiany:
- Do górnego/dolnego paska aplikacji dodano parametr contentPadding, aby umożliwić dostosowanie domyślnego dopełnienia.
- Zmieniono kolejność parametrów w TleDScaffold, aby zachować zgodność z wytycznymi interfejsu API dotyczącymi parametrów, które powinny znajdować się przed parametrami opcjonalnymi.
- Parametr
icon
w elemencie bottomNavigationItem został przeniesiony zaselected
ionClick
. - Nazwa parametru
alwaysShowLabels
w elemencie bottomNavigationItem została zmieniona naalwaysShowLabel
. - Zmieniono nazwę parametrów
bodyContent
niektórych komponentów nacontent
. - Zmieniono kolejność parametrów w kolumnie
ButtonDefaults.buttonColors()
. Należy pamiętać, że ze względu na to, że typ parametrów nie uległ zmianie, nie spowoduje to błędu w kodzie. Upewnij się, że używasz parametrów nazwanych lub ręcznie zaktualizujesz kolejność. W przeciwnym razie kod nie będzie działać tak samo jak poprzednio. - Do grupy reklam
darkColors()
dodano parametrsecondaryVariant
. Ten kolor jest zwykle taki sam jak kolorsecondary
w ciemnym motywie, ale zapewnia spójność i dodatkowe możliwości dostosowania. - Usunięto klasę ElevationDefaults i animmateElevation() z publicznej platformy interfejsu API, ponieważ nie były one powszechnie używane ani przydatne.
- Zmieniono nazwę
onValueChangeEnd
wSlider
naonValueChangeFinished
i ustawiłem ją na wartość null. - Nazwa parametru
text
w komórceSnackbar
została zmieniona nacontent
w celu zachowania spójności. - Dodano parametr
contentPadding
do elementuDropdownMenuItem
, aby umożliwić dostosowanie domyślnego dopełnienia, oraz ustawieniecontent
jako rozszerzenia w witrynieRowScope
. - Nazwa
ModalDrawerLayout
została zmieniona naModalDrawer
. - Nazwa
BottomDrawerLayout
została zmieniona naBottomDrawer
. - (I1cc66).
Wersja 1.0.0-alfa12
10 lutego 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.0.0-alpha12
została zwolniona. Wersja 1.0.0-alfa12 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Usunięto obsługę grup widoków danych z UiApplier. Wycofane elementy kompozycyjne emitView zostały usunięte. (Ifb214).
- Zmieniono nazwę CompositionReference na CompositionContext (I53fcb).
- Element KomponentActivity.setContent został przeniesiony do folderu androidx.activity.compose.setContent w module androidx.activity:activity-compose. (Icf416).
- Zaktualizowaliśmy interfejs Snapshot API, aby zwiększyć spójność z wytycznymi dotyczącymi interfejsu API oraz ukryć wewnętrzne klasy implementacji w publicznym interfejsie API. (Id9e32)
- Zmieniono nazwy Ambientów, aby pasowały do nazwy Ambient -> CompositionLocal. Lokalizatory nosiły wcześniej nazwę AmbientFoo, a teraz CompositionLocals – LocalFoo. (I2d55d)
- Zmieniono nazwę Ambient na CompositionLocal i Ambient of / staticAmbientOf odpowiednio na buildLocalOf / staticCompositionLocalOf. Dzięki tej zmianie staje się on bardziej jasny dla celu użycia funkcji CompositionLocal, czyli mechanizmu podawania / pobierania wartości lokalnych dla kompozycji. Instancje CompositionLocal powinny być poprzedzone ciągiem
Local
, na przykład val LocalFoo = buildLocalOf { Foo() }. (Ia55b6) - Metody getMutableSnapshot i TakeSnapshot stały się teraz metodami towarzyszącymi Snapshot. (I91f19)
Funkcja
@ComposableContract
została wycofana i zastąpiona 3 bardziej szczegółowymi adnotacjami.@ComposableContract(restartable = false)
jest teraz@NonRestartableComposable
@ComposableContract(readonly = true)
jest teraz@ReadOnlyComposable
@ComposableContract(preventCapture = true)
został usunięty z@DisallowComposableCalls
adresu@ComposableContract(tracked = true)
został usunięty. (I60a9D)Narzędzia emptyContent() i (@Composable () -> Unit).orEmpty() zostały wycofane, ponieważ nie mają już one pozytywnego wpływu na wydajność ani wartość (I0484d)
Parametry
snapshotFlow
iwithMutableSnapshot
nie są już eksperymentalne (I6a45f)Rekompozycje można teraz zamknąć. Zamknięte rekompozytory będą kontynuować ponowne komponowanie, dopóki nie zakończą się uzupełniające podrzędne kompozycje. Nazwa polecenia Recomposer.shutDown została zmieniona na anulowanie, aby kontrastować z zamknięciem. (IB6d76)
Artefakt
compose:runtime-dispatch
został wycofany. MonotonicFrameClock znajdziesz teraz w polecenia compose:runtime, a AndroidUiDispatcher – w compose:ui. (IB5c36)Interfejs API, na który kierowana jest wtyczka kompilatora Compose, został przekonwertowany tak, aby wykorzystywał interfejs zamiast konkretnej klasy. Interfejs nie używa już parametru type.
To zmiana wewnętrzna, która nie powinna wpływać na zgodność kodu źródłowego, ale jest zmianą binarnej. (I3b922, b/169406779)
Wprowadzono SnapshotMutableState (Icfd03)
Nazwa DisposableEffectDisposable została zmieniona na DisposaleEffectResult (Ica7c6).
Usunięto element Recomposer.current(). [Abstract]ComposeView teraz domyślnie to stworzone leniwie, ograniczone do okna Rekompozycje, którymi zarządza ViewTreeLifecycleOwner dla okna. Rekompozycja i animacje z FrameNanos są wstrzymywane na czas zatrzymania cyklu życia hosta. (I38e11)
Funkcja Recomposer.runningRecomposers udostępnia teraz globalny przepływ StateFlow tylko do odczytu RecomposerInfo, który umożliwia obserwację bieżącego stanu kompozycji w trakcie tego procesu. Preferuj ten interfejs API przy użyciu interfejsu Recomposer.current(), który jest teraz wycofany. (If8ebe).
Nazwa DisposableEffectDisposable została zmieniona na DisposaleEffectResult (I3ea68).
Wersja 1.0.0-alfa11
28 stycznia 2021 roku
Usługa androidx.compose.runtime:runtime-*:1.0.0-alpha11
została zwolniona. Wersja 1.0.0-alfa11 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Interfejsy onCommit, onDispose i onActive zostały wycofane i zastąpione interfejsami SideEffect i DiposableEffect (If760e).
- Interfejs emit() API i wszystkie przeciążenia zostały wycofane i mają nazwę ComposeNode. Interfejsy API są identyczne, ale mają inną nazwę, aby zachować zgodność z konwencjami nazewnictwa stosowanymi w funkcji tworzenia wiadomości (I4137b).
- Nieprawidłowo i kompozytoryzacja() zostały wycofane. Zastąpiono je odpowiednio recomposeScope i ReminderCompositionReference. (I583a8)
PamiętajObserver, która zastąpiła funkcję CompositionLifecycleObserver, a zasada CompositionLifecycleObserver została wycofana.
Metoda
RememberObserver
zastępuje metodęCompositionLifecycleObserver
ze zmodyfikowaną semantyką i nowymi nazwami. Zmiana na nowy interfejs API można wprowadzić mechanicznie w przypadku obiektów, które są zapamiętane tylko raz, co jest i nadal jest zalecane. Jeśli jednak odniesienie w kompozycji zostało zapamiętane więcej niż raz, funkcjaonRemembered
jest wywoływana dla każdego odwołania, w którym elementonEnter
jest wywoływany tylko raz. FunkcjaonEnter
była wywoływana wiele razy, jeśli obiekt był używany w podkompozycjach, np.WithConstraints
iScaffold
sprawiły, że gwarancja pojedynczego wywołaniaonEnter
była zawodna i został usunięty dlaRememberObserver
.RememberObserver
dodaje elementonAbandoned
, który jest wywoływany, jeśli wystąpienieRememberObserver
jest zwracane z wywołania zwrotnego przekazanego doremember
, ale nie jest zapamiętywane w stanie kompozycji i dlatego nigdy nie zostanie wywołane przezonRemembered
. Może się tak zdarzyć, jeśli wyjątek kończy kompozycję przed ukończeniem lub gdy kompozycja została odrzucona, ponieważ stan produkował kompozycję, która nie jest już aktualna lub nie jest już potrzebna. Jeśli instancjaRememberObserver
zgodnie z powyższą rekomendacją dotyczącą referencji śledzi zasób zewnętrzny (zarównoonForgotten
, jak ionAbandoned
), oznacza to, że zasób nie jest już potrzebny. Jeśli obiekt śledzi rozpoczęte prace lub zasoby przydzielone wonRemembered
, obiektonAbandoned
może zostać zignorowany, ponieważ nie będzie wywoływany po wywołaniu funkcjionRemembered
. (I02c36)Nie oznaczaj funkcji
collectAsState()
jako wbudowanych (Ia73e4)
Poprawki błędów
- Element WithConstraints został przetworzony pod nazwą BoxWithConstraints i przeniesiony do pliku Foundation.layout. (I9420b, b/173387208)
- Wykorzystanie narzędzia TestCoroutineDispatcher w testowaniu (I532b6)
Wersja 1.0.0-alpha10
13 stycznia 2021 r.
Usługa androidx.compose.runtime:runtime-*:1.0.0-alpha10
została zwolniona. Wersja 1.0.0-alfa10 zawiera te zatwierdzenia.
Zmiana niezbędna
Zmiana struktury wewnętrznego interfejsu API kompilatora umożliwia grupowanie zmian w węzłach wygenerowanych w wyniku kompozycji do fazy „wprowadzania zmian” po zakończeniu wszystkich funkcji
@Composable
.Jest to niezgodna z działaniem zmiana, która może mieć wpływ na kod aplikacji, ponieważ węzły nie są już dostępne z wewnętrznych i eksperymentalnych interfejsów API do czasu zastosowania zmian. Zwykle można to obejść, umieszczając kod z takimi zależnościami w kompozycji
SideEffect
, aby opóźnić wykonanie kodu do momentu utworzenia i zainicjowania węzłów. (I018da)
Zmiany interfejsu API
- Dodaliśmy sposób śledzenia, czy redaktor zastosował zmiany. (I1b3e2).
Rozwiń interfejsy API ComposeView, aby umożliwić recykling widoków opartych na ComposeView i usuwanie ich kompozycji w celu późniejszego odtworzenia. Dodaj interfejsy API umożliwiające instalowanie i wykrywanie zasobów Rekompozytorów ograniczonych do okna oraz obiektów CompositionReferences do tworzenia kompozycji podrzędnych.
Dodano funkcję ViewCompositionStrategy, która pozwala skonfigurować strategię usuwania kompozycji w obiektach [Abstract]ComposeViews. Domyślnym działaniem jest usuwanie po odłączeniu okna. (I860ab)
Poprawki błędów
- Rekompozytor udostępnia teraz przepływ w bieżącym stanie, co pozwala monitorować jego aktywność i aktywność powiązanych efektów. (Ifb2b9).
- Dostęp do natywnego zdarzenia keyEvent można teraz uzyskać przez keyEvent.nativeKeyEvent (I87c57, b/173086397)
Wersja 1.0.0-alpha09
16 grudnia 2020 roku
Usługa androidx.compose.runtime:runtime-*:1.0.0-alpha09
została zwolniona. Wersja 1.0.0-alfa09 zawiera te zatwierdzenia.
Zmiany interfejsu API
Usunięto interfejsy SlotTable, SlotReader i SlotWriter z publicznego interfejsu API. Wcześniej były one oznaczone jako InternalComposeAPI. Teraz są one wewnętrzne w module tworzenia wiadomości.
Interfejsy CompositionData i CompositionGroup zostały dodane jako zamiennik interfejsu ui-tooling API, którego można używać do wyodrębniania informacji o kompozycji. Są one publiczne, ale nie są przeznaczone do stosowania poza interfejsem ui-tooling API, ponieważ dostarczają nieprzetworzone informacje interpretowane przez interfejs ui-tooling API (I31a9c)
Klasa aplikacji nie jest już uważana za (Id85b0)
Interfejs
Applier
został zmieniony, aby uprościć tworzenie drzew w widoku od dołu, a nie od góry.Nazwa metody
insert()
została zmieniona nainsertTopDown()
.Dodano nową metodę:
insertBottomUp()
.Stosuje on węzły do edytowanego drzewa przy użyciu funkcji
insertTopDown()
lubinsertBottomUp()
, w zależności od tego, co sprawdza się lepiej.Niektóre drzewa, np.
LayoutNode
iView
, są znacznie efektywniejsze w budowaniu od dołu niż od góry. Przed tą zmianą trzeba było wdrożyć od dołu stos wkładek, który trzeba było kopiować do każdego narzędzia, które wymagało oddolnej struktury w celu zwiększenia skuteczności. W przypadku tej zmiany właściwośćApplier
zastępuje zasadęinsertBottomUp()
, aby utworzyć drzewo od dołu do góry, i zastąpienieinsertTopDown()
, aby utworzyć drzewo od dołu. (Icbdc2)Funkcja tworzenia obsługuje moduły pobierania właściwości, które mogą tworzyć wywołania kompozycyjne. Ta funkcja nie będzie już obsługiwana, ale zmienia się składnia deklarowania metody pobierania właściwości jako typu @Composable.
Wycofana składnia służąca do tego celu polegała na dodaniu adnotacji do samej właściwości:
@Composable val someProperty: Int get() = ...
Prawidłową składnią, aby to zrobić, jest dodanie adnotacji do metody getter właściwości:
val someProperty: Int @Composable get() = ...
Obie składni będą działać przez jakiś czas, ale poprzednia wycofana składnia stanie się w końcu błędem kompilacji. (Id9197).
Poprawki błędów
- AndroidOwner jest wewnętrzny (Ibcad0, b/170296980)
- Parametr subcomposeInto(LayoutNode) został zmieniony na wewnętrzny (Id724a)
Wersja 1.0.0-alpha08
Grudzień 2, 2020
Usługa androidx.compose.runtime:runtime-*:1.0.0-alpha08
została zwolniona. Wersja 1.0.0-alfa08 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodano sprawdzanie nazw i pozycji parametrów kompozycyjnych lambda w celu sprawdzenia spójności z wytycznymi dotyczącymi tworzenia wiadomości.
Zgodnie ze sprawdzaniem lintowania i wskazówkami przenieśliśmy też niektóre interfejsy API z użyciem nazwy
children
jako nazwy końcowej lambdy docontent
. (Iec48e). - Rekompozytor nie akceptuje już klasy EmbeddingContext. Wymagane zależności harmonogramu są pobierane z programu EffectsCoroutineContext. Interfejs FrameManager został wycofany. Integracje z platformą powinny zainicjować własną globalną obsługę zrzutów. (I02369)
- Nazwa funkcji RestorableStateHolder.withRestorableState została zmieniona na RestorableStateProvider (I66640).
Poprawki błędów
- Wycofany komponent Ambient został wycofany z sufiksem
Ambient
i zastąpił je nowymi właściwościami z prefiksem Ambient zgodnie z innymi wytycznymi dotyczącymi interfejsu Ambients i Compose API. (I33440) - Usuń stary moduł testowania interfejsu i jego złącza (I3a7cb)
Wersja 1.0.0-alpha07
11 listopada 2020 roku
Usługa androidx.compose.runtime:runtime-*:1.0.0-alpha07
została zwolniona. Wersja 1.0.0-alfa07 zawiera te zatwierdzenia.
Nowe funkcje
Zmiany interfejsu API
- Adnotacja
@UnionType
została wycofana (I57cde) - Jako alternatywy dla określania ustawień otoczenia dodano metodę ProvideDefault jako alternatywę dla określania otoczenia. Za jej pomocą można określać wartości otoczenia, które będą ustawiane tylko wtedy, gdy nie została jeszcze podana żadna wartość otoczenia. (Id6635, b/171024925)
- Nazwa LaunchedTask została zmieniona na LaunchedEffect, aby zachować spójność z interfejsami API SideEffect i DiposableEffect. Aby zachęcić do stosowania sprawdzonych metod, metoda LaunchedEffect bez parametrów tematu jest niedozwolona. (Ifd3d4).
- Stosujący ma teraz wywołania zwrotne onPoczątekChanges/onEndChanges, które są wywoływane po rozpoczęciu/zakończeniu stosowania zmian w drzewie przez usługę Composer. W razie potrzeby mogą one służyć do zarządzania zasobami wsadowymi. (Icf476).
- Funkcja rekompozycji wymaga teraz CoroutineContext podczas budowy (Ic4610)
- Zmiany w wewnętrznej implementacji SlotTable, które nie powinny mieć wpływu na publiczny interfejs API. (If9828).
- Usunięto wycofane adaptery rxjava2, które nie przyjmują wartości początkowej (Idb72f).
Poprawki błędów
- Foundation.Text została wycofana i zastąpiona materiałem material.Text. Informacje o podstawowym, nieopiniowanym interfejsie API tekstowym, który nie przetwarza wartości z motywu, znajdziesz na stronie androidx.compose.foundation.BasicText. (If64cb).
- Pole BaseTextField zostało wycofane. Użyj w zamian pola BasicTextField. (I896eb)
- Kilka symboli związanych z układem zostało przeniesionych z androidx.compose.ui do androidx.compose.layout.ui. (I0fa98, b/170475424)
Treści tłumaczone przez użytkowników zewnętrznych
- Dodano moduł
runtime-rxjava3
do tworzenia wiadomości. Podobne doruntime-rxjava2
(I02cbf)
Wersja 1.0.0-alpha06
28 października 2020 r.
Usługa androidx.compose.runtime:runtime-*:1.0.0-alpha06
została zwolniona. Wersja 1.0.0-alfa06 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Funkcja Rekompozytor jest teraz elementem CompositionReference oraz prawidłowym elementem nadrzędnym kompozycji. Bezpośrednie przekomponowanie jest teraz wymagane w mniejszej liczbie miejsc. (I4036f)
- Dodano odpowiednik interfejsu DisposableEffect API do SideEffect. W ten sposób uzupełniliśmy rolę „onCommit-with-params”, ale tym, że wymagane jest ustawienie onDispose.
- Dodano interfejs sendUpdatedState API służący do publikowania danych ze zmian kompozycji w procesach trwających lub długotrwałych, takich jak DisposableEffects czy LaunchedTasks.
- (Id50b9).
- MutableVector ma teraz funkcję RandomAccess (I85d73, b/170461551)
- Dodano kompozycję SideEffect do stosowania efektów ubocznych kompozycji do obiektów zarządzanych przez kompozycję. SideEffect ma zastąpić funkcję kompozycyjną onCommit. (Ia77c2).
- Nowa eksperymentalna api RestorableStateHolder. Umożliwia zapisanie stanu zdefiniowanego za pomocą parametrów [savedInstanceState] i [rememberSavedInstanceState] w drzewie podrzędnym przed jego usunięciem, co umożliwi jego ponowne utworzenie następnym razem z przywróconym stanem. (I66884, b/166586419)
Poprawki błędów
- Włącz przejścia w ComposeTestRule. Usuń tę opcję, by włączyć migający kursor z reguły ComposeTestRule. (If0de3).
Wersja 1.0.0-alpha05
14 października 2020 r.
Usługa androidx.compose.runtime:runtime-*:1.0.0-alpha05
została zwolniona. Wersja 1.0.0-alfa05 zawiera te zatwierdzenia.
Zmiany interfejsu API
- eksperymentalny modyfikator zawieszenia danych wejściowych (Ia77d2),
- Wydajność przewijania w przypadku LazyColumn/Row zwiększa się, ponieważ podczas każdego przewijania ma mniej pracy w subkompozycji. Do klasy kompozycji dodano nową metodę hasInvalidations(). Nazwa metody hasPendingChanges() z Recomposer została zmieniona na hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371)
- Dodaj interfejs API ManufacturerState, który umożliwia uruchamianie współrzędnych z kompozycji, które aktualizują pojedynczą wartość
State<T>
w miarę upływu czasu (Id4a57). - updateInComposition zmieniona na LaunchedTask, by zapewnić zgodność z wytycznymi na temat interfejsu Compose API (I99a8e)
- Kolejność wywołań funkcji Place() w układach niestandardowych określa teraz kolejność rysowania elementów podrzędnych (Ibc9f6).
Wersja 1.0.0-alpha04
1 października 2020 roku
Usługa androidx.compose.runtime:runtime-*:1.0.0-alpha04
została zwolniona. Wersja 1.0.0-alfa04 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodano element WłaścicielScope, aby umożliwić gromadzenie zakresów obserwacji układu i rysunków, gdy przestają one działać. (Ic4cf8).
- Dodano interfejs devStateOf API, aby tworzyć obiekty stanu na podstawie obliczeń, które mogą odczytywać inne obiekty State (i z nich korzystać) – If758b.
- Dodano interfejs TestOnly API dla SnapshotStateObserver (I6e2a9).
Poprawki błędów
- Fundament.Box został wycofany. Zamiast niej użyj elementu Foundation.layout.Box. (IE5950, b/167680279)
Wersja 1.0.0-alpha03
16 września 2020 roku
Usługa androidx.compose.runtime:runtime-*:1.0.0-alpha03
została zwolniona. Wersja 1.0.0-alfa03 zawiera te zatwierdzenia.
Zmiany interfejsu API
CompositionCoroutineScope
nie stosuje już metodyMonotonicFrameClock
. Wywołujący metodęwithFrameNanos
powinni bezpośrednio zaimportować funkcję najwyższego poziomu. (Icb642, b/166778123)
Poprawki błędów
- Funkcje testowania globalnego, takie jak
onNode
czywaitForIdle
, zostały wycofane. Zacznij korzystać z ich nowych odpowiedników zdefiniowanych w ComposeTestRule (I7f45a). launchInComposition
nie uruchamia już nierozstrzygniętych kompetencji (Ief6af, b/166486000)
Wersja 1.0.0-alpha02
Wrzesień 2, 2020
Usługa androidx.compose.runtime:runtime-*:1.0.0-alpha02
została zwolniona. Wersja 1.0.0-alfa02 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Dodaj interfejsy API
snapshotFlow
iwithMutableSnapshot
, aby wykorzystywać i tworzyć zmiany w danych Snapshot. (I3e722) Zmieniła się konwencja wywoływania funkcji kompozycyjnych. To jest zmiana binarna, która powoduje niezgodność. Wszystkie biblioteki muszą zostać ponownie skompilowane, aby działały z tą wersją wtyczki kompilatora kompilatora.
Ta zmiana nie powoduje zmiany powodującej niezgodność na poziomie źródła, ponieważ jedynymi interfejsami API, które uległy zmianie, są interfejsy API kompilatora, dla których jednoznacznie wyraziła na to zgodę. (I7afd2, b/158123185)
Usunięto metody planowania z elementu EmbeddingContext (I7b9be).
Interfejs onPreCommit został wycofany. Działanie onCommit działa teraz w ten sposób.
Metody onCommit i onActive działają teraz w tym samym ramce choreografa, w którym kompozycja została zmieniona, a nie na początku kolejnego kadru choreografa. (I70403).
Wersja 1.0.0-alpha01
26 sierpnia 2020 r.
Usługa androidx.compose.runtime:runtime-*:1.0.0-alpha01
została zwolniona. Wersja 1.0.0-alfa01 zawiera te zatwierdzenia.
Wersja 0.1.0-dev
Wersja 0.1.0-dev17
19 sierpnia 2020 r.
Usługa androidx.compose.runtime:runtime-*:0.1.0-dev17
została zwolniona. Wersja 0.1.0-dev17 zawiera te zatwierdzenia.
Zmiany interfejsu API
- Niestandardowe źródła danych mogą teraz zadeklarować, że co najmniej 1 z nich można pominąć i ponownie skomponować niezależnie od emisji. (Ibbd13).
Usunięto wycofane wywołania FrameManager.
Wewnętrzne interfejsy API tworzenia wiadomości zostały zmienione, aby zmniejszyć obciążenie związane ze śledzeniem obiektów stanu, takich jak
mutableStateof()
(I80ba6)Funkcja kompozycyjna
state { ... }
została wycofana i zastąpiła jawne wywołaniaremember { mutableStateOf(...) }
, aby zapewnić przejrzystość. Zmniejsza to ogólną powierzchnię interfejsu API i liczbę pojęć związanych z zarządzaniem stanem. Dopasowanie do wzorcaby mutableStateOf()
w przypadku przekazywania właściwości klas. (IA5727).Flow.collectAsState zamiast domyślnego dyspozytora Dispatchers.Main określa jako domyślnego dyspozytora na podstawie samej kompozycji. (I9c1d9).
Awaria, gdy element zapisujący stan został naprawiony w pętli for. Teraz ten sam klucz jest dozwolony w tabeli savedInstanceState(), więc interfejs API UiSavedStateRegistry jest teraz dostosowany do tego nowego wymogu (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561).
Poprawki błędów
- Interfejs
emitView
został wycofany. Jeśli to możliwe, do przesyłania wyświetleń w funkcji tworzenia wiadomości używaj zamiast tegoAndroidView
. Bezpośrednie tworzenie widoków i grup widoków nie będzie w przyszłości obsługiwane, chyba że będą one pozostawione w drzewie kompozycji (gdy będzie to możliwe w AndroidView). (I29b1e, b/163871221)
Wersja 0.1.0-dev16
5 sierpnia 2020 r.
Usługa androidx.compose.runtime:runtime-*:0.1.0-dev16
została zwolniona. Wersja 0.1.0-dev16 zawiera te zatwierdzenia.
Zmiany interfejsu API
Domyślna zasada mutacji
mutableStateOf()
,ambientOf()
isavedInstanceStateOf()
została zmieniona nastructuralEqualityPolicy()
, a nie nareferentialEqualityPolicy()
.Ustawienie domyślne decydujące o tym, czy nowa wartość przypisana do instancji
mutableStateOf()
jest uznawana za zmianę, teraz domyślnie jest używana wartość==
, a nie===
.Więcej informacji znajdziesz na https://kotlinlang.org/docs/reference/equality.html
ambientOf()
isavedInstanceStateOf()
używają w swoich implementacjachmutableStateOf()
, więc zostały zmienione tak, aby były zgodne z zasadąmutableStateOf()
.Wykorzystanie równości strukturalnej jest ściślej zgodne z oczekiwaniami programistów.
Na przykład
val state = mutableStateOf(1f)
, a po nim:
state.value = 1f
nie będą już uznawane za zmianę w
state
, a zastosowania elementustate
podczas kompozycji nie trzeba będzie już tworzyć.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 ona miała 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 parametr zasady
policy = referentialEqualityPolicy()
do wywołań funkcjimutableStateOf()
,ambientOf()
isavedInstanceStateOf()
. (IC21a7).Row
iColumn
są teraz funkcjami wbudowanymi, więc znacznie zmniejszają wymagania związane z ich używaniem. (I75c10)
Poprawki błędów
- Metoda setViewContent została wycofana. Zamiast niej należy używać parametru setContent. (I7e497, b/160335130)
Dodano MonotonicFrameAnimationClock, który umożliwia użycie MonotonicFrameClock jako funkcji AnimationClockObservable w celu wypełnienia luki między nowymi zegarami opartymi na współprogramach a interfejsami API, które nadal używają starych zegarów opartych na wywołaniach zwrotnych.
Odpowiednikiem MonotonicFrameClock elementu ManualAnimationClock jest teraz ManualFrameClock. (I111c7, b/161247083)
Modifier.stateDraggable został całkowicie przerobiony na Modifier.swipeable. Wprowadzono nową klasę PrzesuńableState, a elementy DrawerState i bottomDrawerState zostały zmodyfikowane tak, aby dziedziczyły z niej elementy. [Modal/bottom]DrawerLayout nie przyjmuje już parametru onStateChange. (I72332, b/148023068)
Interfejs Modifier.plus został wycofany. Użyj interfejsu Modifier.then. Pole „To” daje silniejszy sygnał określający kolejność, ale uniemożliwia też wpisanie słowa
Modifier.padding().background() + anotherModifier
, które przerywa łańcuch i jest trudniejsze do odczytania (Iedd58, b/161529964).Element SubcomposeLayout został dodany. Jest to element podstawowy niskiego poziomu, który umożliwia tworzenie elementów podrzędnych podczas pomiaru, jeśli chcemy użyć niektórych wartości dostępnych dopiero później podczas pomiaru składu drzewa podrzędnego. Na przykład element WithConstraints nie jest implementowany za pomocą metody SubcomposeLayout. (I25cc8)
Nazwa pola Material FilledTextField została zmieniona na TextField, a podstawowy element TextField zmienił się na BaseTextField, by ułatwić znajdowanie i używanie najprostszego interfejsu API (Ia6242, b/155482676).
Nazwa Modifier.drawBackground została zmieniona na Modifier.background (I13677)
Wersja 0.1.0-dev15
22 lipca 2020 r.
Usługa androidx.compose.runtime:runtime-*:0.1.0-dev15
została zwolniona. Wersja 0.1.0-dev15 zawiera te zatwierdzenia.
Aktualizacja zależności
- Aby używać funkcji Compose
0.1.0-dev15
, musisz zaktualizować zależności zgodnie z nowymi fragmentami kodu pokazanymi powyżej w sekcji Deklarowanie zależności.
Zmiany interfejsu API
Adnotacja
@Model
została wycofana. Zamiast nich używaj parametrów state i mutableStateOf. Decyzja o wycofaniu została podjęta po bardzo wnikliwej dyskusji.Uzasadnienie
Uzasadnienie obejmuje m.in.:
- Skraca powierzchnię interfejsu API oraz koncepcje, których trzeba nauczać
- ściślej pasuje do innych podobnych narzędzi (Swift UI, React, Flutter).
- Decyzja odwracalna. Zawsze możemy później przywrócić użytkownika
@Model
. - Nie używa wielkich liter i nie wymaga odpowiedzi na pytania o konfigurację
@Model
jako rzeczy, którymi musimy się zająć. - Klasy danych:
@Model
, równa się, kod numeryczny itp. - Co zrobić, aby niektóre właściwości były „obserwowane”, a inne nie?
- Jak określić równość strukturalną i referencyjną do zastosowania w obserwacji?
- Ogranicza działanie „magii” działania systemu. Zmniejszyłoby prawdopodobieństwo, że ktoś zakłada, że system jest mądrzejszy niż jest (tj. wie, jak porównać listę)
- Zwiększa szczegółowość obserwacji.
- Poprawia refaktoryzację z zmiennej -> właściwości w klasie
- Potencjalnie otwiera możliwości wprowadzenia ręcznych optymalizacji w kontekście poszczególnych stanów.
- Jest ściślej dopasowany do reszty ekosystemu i ogranicza niejasności w odniesieniu do „stałego stanu” lub „akceptowania zmiennego stanu”.
Uwagi dotyczące migracji
Niemal wszystkie dotychczasowe sposoby korzystania z usługi
@Model
są dość proste w użyciu na jeden z 2 sposobów. Przykład poniżej zawiera klasę@Model
z 2 właściwościami i 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, p.x = it } p.y = it } ) }
Opcja 1. Użyj elementu
State<OriginalClass>
i utwórz kopie.To podejście jest łatwiejsze dzięki klasom danych Kotlin. Ogólnie rzecz biorąc, przenieś wszystkie właściwości
var
do właściwościval
klasy danych, a następnie użyjstate
zamiastremember
i przypisz wartość State sklonowanym kopiom oryginału za pomocą wygodnej metody klasy danychcopy(...)
.Pamiętaj, że to podejście działa tylko wtedy, gdy jedyne mutacje w danej klasie zostały wprowadzone w tym samym zakresie co instancja
State
. Jeśli klasa zmienia się wewnętrznie poza zakres użytkowania i polegasz na obserwowaniu tej zmiany, należy zastosować się do kolejnego podejścia.data class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, p = p.copy(x=it) } p = p.copy(y=it) } ) }
Opcja 2: użyj przedstawicieli mutableStateOf i właściwości
Takie podejście jest łatwiejsze dzięki przedstawicielom właściwości Kotlina i interfejsowi API
mutableStateOf
, które 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
właściwościamimutableStateOf
. Ta zaleta polega na tym, że sposób korzystania z klasy nie ulegnie zmianie, a jedynie jego wewnętrzna implementacja. Działanie nie jest jednak całkowicie takie samo jak w przypadku pierwotnego przykładu, ponieważ każda właściwość jest teraz obserwowana/zasubskrybowana osobno, więc zmiany widoczne po tym refaktoryzacji mogłyby być bardziej wąskie (to dobrze).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, p.x = it } p.y = it } ) }
(I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/925
Zmienia strategię generowania kodu w kompilatorze Compose. Przed tą zmianą kompilator komponował przekształcanie wywołań funkcji kompozycyjnych. W wyniku tej zmiany przekształcamy treść funkcji kompozycyjnej i zostajemy bez zmian (w większości przypadków).
Oznacza to, że większość logiki komunikującej się ze środowiskiem wykonawczym tworzenia zachodzi na początku treści funkcji, a nie w lokalizacji wywołania.
Powinna to być zmiana zgodną ze źródłem w przypadku całego korzystania z funkcji tworzenia wiadomości. W związku z tą zmianą większość użytkowników narzędzia do tworzenia wiadomości nie będzie musiała aktualizować żadnego kodu.
Aby ułatwić ten proces, 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 Composer, czyli liczba całkowita „klucz”, czyli liczba całkowita maska bitowa używana do rozpowszechniania metadanych za pomocą wywołań.
Funkcja Utwórz przekształca teraz także domyślne argumenty w funkcję kompozycyjną. Odbywa się to bez dodatkowego syntetycznego przeciążenia samej funkcji, więc ta zmiana spowoduje zdefiniowanie mniejszej liczby funkcji.
Znane, zamierzone zmiany w zachowaniu wynikające z tego:
- Niektóre rozmowy są 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
Wprowadziliśmy kilka optymalizacji: 1. Wyniki porównań parametrów są przekazywane na wykresie wywołań do innych funkcji kompozycyjnych. Zmniejszy to liczbę porównań w czasie działania, zmniejszy rozmiar tabeli przedziałów i będzie więcej pomijać funkcji kompozycyjnych, które nie były wcześniej pomijane2. Parametry, które podczas kompilacji zostaną uznane za „statyczne”, nie są już porównywane ani przechowywane w środowisku wykonawczym. Zmniejsza to liczbę porównań i rozmiar tabeli przedziałów. 3. Kontroluj strukturę przepływu treści funkcji do zminimalizowania liczby generowanych grup. Zmniejsza to rozmiar tabeli przedziałów i zmniejsza ilość pracy środowiska wykonawczego. 4. Nieużywane parametry dyspozytora i odbiorcy w funkcji nie są uwzględniane przy określaniu możliwości pominięcia funkcji, jeśli nie są one używane w jej treści.
Większość zmian powodujących niezgodność dotyczy interfejsów API, na które kompilator jest kierowany bezpośrednio. Nie wpłynie to na typowe użycie funkcji tworzenia wiadomości: 1. Usunięto polecenie Composer::startExpr. 2. Narzędzie Composer::endExpr zostało usunięte. 3. Interfejs Composer::call został wycofany. 4. Przeciążenia inne niż różne (
key
) zostały usunięte. Od tej pory używaj wersjivararg
. 5. Adnotacja przestawna została wycofana. Użyjkey
jako zamiennika. 6. ZakresUpdateScope::updateScope został zmieniony, tak aby obejmował funkcję Function3, a nie Function1. 7. Zaktualizowaliśmy funkcję restartableFunction i restartableFunctionN, aby uwzględnić dodatkowe parametry czasu kompilacji (I60756, b/143464846)Do funkcji MutableVector dodano sortowanie z funkcjami sortWith i deleteRange (Icccf7).
Dodano domyślne implementacje metody dla CompositionLifecycleObserver (I24289).
Aktualizator wymaga teraz metody clear() do usuwania kompozycji (Ibe697)
Do funkcji MutableVector dodano funkcję asMutableList(), która umożliwia przekazywanie jej do publicznego interfejsu API bez konieczności kopiowania całej listy. (I298df)
Dodano funkcję loadCoroutineScope() w celu uzyskania w kompozycji zarządzanej funkcjiCoroutineScope do uruchamiania zadań w odpowiedzi na zdarzenia. (I0e264)
MutableVector to nowy zbiór, w którym nie ma żadnego standardowego interfejsu kolekcji. Ten zbiór zapewnia szybsze działanie niż inne wymagania i jest przeznaczony do użytku tylko wewnętrznie. (I8ebd6).
Tymczasowo usunięto
StableMutableList
iStableMutableMap
, aby uniknąć problemu w wersji wymaganej do tworzenia wiadomości w Kotlin. Te interfejsy zostaną ponownie udostępnione po zaktualizowaniu narzędzia compose do wersji Kotlin, w której nie występuje ten problem.SnapshotStateList
iSnapshotStateMap
są teraz publiczne, ale zostaną wycofane po przywróceniu usługStableMutableList
iStableMutableMap
. (IA7769).dodaj funkcję najwyższego poziomu withFrameNanos do czasu animacji (Ie34c5)
Adnotacja @Nieśledzona została wycofana. Zastąp @ComposableContract(tracked=false) (Id211e).
Nazwa funkcji RestartableFunction i powiązane z nią interfejsy API zostały np. zmienione na ComposableLambda. Te interfejsy API były kierowane tylko przez kompilator, więc nie powinno to normalnie wpływać na zgodność na poziomie źródła. Zmiana nazwy ma na celu przede wszystkim informowanie, co klasa jest lepsza, gdy pojawia się w zrzutach stosu (I7eb25).
Adnotacja @Composable nie jest już prawidłowa w klasach (Ia5f02).
Ambient<T>
to teraz @Stable zamiast @Immutable (I0b4bb)Przed tą zmianą wtyczka kompilatora kompilatora przechwytywała wywołania konstruktorów w funkcji @Composable, jeśli w funkcji @Composable występowało (I5205a, b/158123804).
Funkcja kompozycyjna „Przetwórz ponownie” nie jest już przydatną abstrakcją. Większość zmian kompozycji powinna następować w wyniku przypisań MutableState. W innych przypadkach zalecamy użycie funkcji
invalidate
do aktywowania przekomponowania bieżącego zakresu. (Ifc992).Obserwacja nie jest już przydatna abstrakcja. Jeśli chcesz go zreplikować, możesz zreplikować jego implementację, tworząc funkcję kompozycyjną wykonującą parametr kompozycyjny lambda. Na przykład
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37).Metoda @Direct została wycofana i zastąpiona przez @ComposableContract(restartable=false) (If4708).
Dodaliśmy adapter do niedawno wprowadzonego modelu StateFlow, który umożliwia wstępne wypełnienie wartości początkowej tak, aby zwracany stan nie miał wartości null (I61dd8, b/156233789).
Dodaliśmy adapter do Flow. Przykład użycia: wartość val przez Flow.collectAsState() (If2198, b/153375923)
[Mutable]Operatory delegowania właściwości stanu zostały przeniesione do rozszerzeń, aby obsługiwać optymalizację przekazywania właściwości Kotlin 1.4. Rozmówcy muszą dodać importowanie, aby dalej używać
by state { ... }
lubby mutableStateOf(...)
. (I5312C)Aplikacja androidx.compose.ViewComposer została przeniesiona do androidx.ui.node.UiComposer. androidx.compose.Emittable została usunięta. W przypadku węzła KomponentNode to niepotrzebne narzędzie. Aplikacja androidx.compose.ViewAdapters została usunięta. Nie są już one obsługiwanym przypadkiem użycia. Interfejs Compose.composeInto został wycofany. Użyj interfejsu
setContent
lubsetViewContent
. Metoda Compose.disposeComposition została wycofana. Użyj metodydispose
na obiekcieComposition
zwróconym przezsetContent
. Nazwa androidx.compose.Compose.subcomposeInto została przeniesiona do androidx.ui.core.subcomposeInto. Nazwa węzła #emitInsertAt została zmieniona na KomponentNodeFlaga
ComposeFlags.COMPOSER_PARAM
została zmieniona natrue
, co zmieni strategię generowania kodu dla wtyczki do tworzenia wiadomości. Ogólnie powoduje to generowanie funkcji @Composable z dodatkowym parametrem syntetycznym, który jest przekazywany do kolejnych wywołań @Composable w celu prawidłowego zarządzania wykonaniem w środowisku wykonawczym. Jest to istotna zmiana polegająca na nieprawidłowym działaniu plików binarnych, jednak powinna ona zachować zgodność na poziomie źródła we wszystkich objętych sankcjami użycia funkcji tworzenia wiadomości. (I7971C)Zmiany w interfejsie API nieaktywnym. Szczegóły znajdziesz w logu i dokumentacji
Ambient<T>
(I4c7ee, b/143769776)Dodaliśmy ui-livedata – nowy artefakt z adapterem LiveData. Przykład zastosowania: wartość val by liveData.observeAsState() (Ie9e8c, b/150465596)
Adaptery Rx bez wyraźnej wartości początkowej są wycofane. Użycie wartości null nie zawsze jest najlepszym rozwiązaniem domyślnym. Na przykład jeśli masz listę, lepiej jest zacząć od metody emptyList() lub innej uzasadnionej wartości domyślnej (I00025, b/161348384).
Dodano ui-rxjava2 – nowy artefakt z adapterami do RxJava2. Przykład użycia: wartość wartości przez observable.subscribeAsState() (Ifab4b, b/153369097)
Interfejsu
savedInstanceState()
można teraz używać z typami dopuszczającymi wartości null (I6847f, b/153532190)Nowe funkcje listSaver() i mapSaver() ułatwiające pisanie niestandardowych obiektów Save (I8cf68, b/152331508)
Nowe funkcje: savedInstanceState() i forgotSavedInstanceState(). Są one podobne do state() i Zapamiętaj(), ale mają wbudowaną obsługę zapisanych stanów instancji (If1987, b/152025209).
Poprawki błędów
- Nazwa
runOnIdleCompose
została zmieniona narunOnIdle
(I83607) - Made LayoutNode – eksperymentalny interfejs API (I4f2e9)
- Metody androidx.ui.foundation.TextFieldValue i androidx.ui.input.EditorValue zostały wycofane. Obiekty kompozycyjne TextField, PhlledTextField i CoreTextField, które używają 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ąpienie go interfejsami API rozszerzenia DrawBackground w modyfikatorze. zmodyfikowano implementacje koloru, pędzla i malowania metodą PaintBackground, aby zmniejszyć ścieżki kodu, a także usunąć wymóg tworzenia modyfikatora w ramach kompozycji. (I0343a)
- Zaktualizowano interfejsy API tworzenia wyższego poziomu, które udostępniają obiekt Canvas do wyświetlania obiektu CanvasScope. Dzięki temu konsumenci nie muszą utrzymywać własnych obiektów Paint. Klienci, którzy nadal potrzebują dostępu do obiektu Canvas, mogą skorzystać z metody rozszerzenia dropCanvas, która powoduje wywołanie zwrotne do poleceń rysowania na podstawie obiektu Canvas. (I80afd).
- Zmieniono końcowy interfejs API WithConstraints lambda. Teraz zamiast 2 parametrów ma zakres odbiornika, który oprócz ograniczeń oraz właściwości layoutDirection zapewnia właściwości minWidth, maxWidth, minHeight i maxHeight w Dp (I91b9a, b/149979702)
- Dodano symetryczny modyfikator dopełnienia. (I39840)
- Zaktualizowaliśmy właściwości wrapContentWidth i wrapContentHeight tak, aby można było korzystać z wyrównania w pionie lub poziomie, a nie wyrównania w poziomie. Modyfikator grawitacji został zaktualizowany, aby przyjmował wyrównanie w pionie lub poziomie. Wiersze, kolumny i stos zostały zaktualizowane, aby obsługiwały niestandardowe ciągłe wyrównania. (IB0728)
- Nazwa modułu ui-text została zmieniona na ui-text-core (I57dec).
- Ulepsz interfejs DrawModifier API:
- Zmieniono zakres odbiorcy dla metody Draw() ContentDrawScope
- Usunięto wszystkie parametry z dresz()
- Interfejs DrawScope jest taki sam jak poprzednia wersja CanvasScope
- ContentDrawScope ma metodę DrawContent() (Ibaced, b/152919067)
- Interfejs ColoredRect został wycofany. Użyj w zamian zasady
Box(Modifier.preferredSize(width, height).drawBackground(color))
. (I499fa, b/152753731) - Zastąpienie operatora modyfikatora plus funkcjami rozszerzeń fabrycznych (I225e4).
- Elementy RowScope i ColumnScope są teraz dostępne poza elementami Wiersz i Kolumna. (I3a641)
- Zmieniono nazwę Układ Elastyczny na Układ Weight. Zmieniono nazwę precyzyjnego parametru na wypełnienie. (If4738).
- WithConstraints uzyskała parametr LayoutDirection (I6d6f7)
- Zmieniono nazwę tła na DrawBackground i tak, by było domyślnie zapamiętywane (Ia0bd3)
- Zastąpiliśmy ButtonStyle różnymi funkcjami i usunęliśmy przeciążenie tekstu (ciągami znaków). 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).
Treści tłumaczone przez użytkowników zewnętrznych
- Usuń z warstwy przenoszenia środowiska wykonawczego Compose (I6847d) niepotrzebne interfejsy API, takie jak Looper i Handler
- Wycofano funkcję
Flow<T>.collectAsState()
bez wartości początkowej. Użyj funkcjiStateFlow<T>
lub przekaż konkretną wartość początkową. (I63f98, b/157674865)