Tworzenie środowiska wykonawczego
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(Zobacz dokumentację API wszystkich pakietów Compose)
| Najnowsza aktualizacja | Wersja stabilna | Wersja kandydująca do publikacji | Wersja beta | Wersja alfa |
|---|---|---|---|---|
| 7 października 2026 r. | 1.12.1 | - | 1.13.0-beta01 | - |
Struktura
Compose to połączenie 7 identyfikatorów grup Maven w androidx. Każda grupa zawiera ukierunkowany podzbiór funkcji, a każda z nich ma własny zestaw informacji o wersji.
W tej tabeli znajdziesz grupy i linki do poszczególnych zestawów informacji o wersji.
| Grupa | Opis |
|---|---|
| compose.animation | tworzyć animacje w aplikacjach Jetpack Compose, aby wzbogacać wrażenia użytkowników; |
| compose.compiler | Przekształcanie funkcji z adnotacją @Composable i włączanie optymalizacji za pomocą wtyczki kompilatora Kotlin. |
| compose.foundation | Twórz aplikacje w Jetpack Compose za pomocą gotowych elementów składowych i rozszerzaj podstawy, aby tworzyć własne elementy systemu projektowania. |
| compose.material | Twórz interfejsy Jetpack Compose za pomocą gotowych komponentów Material Design. Jest to punkt wejścia wyższego poziomu w Compose, który ma zapewniać komponenty zgodne z tymi opisanymi na stronie www.material.io. |
| compose.material3 | Twórz interfejsy Jetpack Compose za pomocą komponentów Material Design 3, czyli kolejnej ewolucji Material Design. Material 3 zawiera zaktualizowane motywy i komponenty oraz funkcje personalizacji Material You, takie jak dynamiczny kolor. Jest on spójny z nowym stylem wizualnym Androida 12 i interfejsem systemu. |
| compose.runtime | Podstawowe elementy modelu programowania i zarządzania stanem w Compose oraz podstawowe środowisko wykonawcze, do którego kierowana jest wtyczka kompilatora Compose. |
| compose.ui | Podstawowe komponenty interfejsu Compose potrzebne do interakcji z urządzeniem, w tym układ, rysowanie i dane wejściowe. |
Deklarowanie zależności
Aby dodać zależność od Compose, musisz dodać do projektu repozytorium Maven Google. Więcej informacji znajdziesz w repozytorium Maven Google.
Dodaj zależności dotyczące potrzebnych artefaktów w pliku build.gradle aplikacji lub modułu:
Groovy
plugins { id 'org.jetbrains.kotlin.plugin.compose' } dependencies { implementation "androidx.compose.runtime:runtime:1.12.1" implementation "androidx.compose.runtime:runtime-livedata:1.12.1" implementation "androidx.compose.runtime:runtime-rxjava2:1.12.1" } android { buildFeatures { compose true } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
plugins { kotlin("plugin.compose") } dependencies { implementation("androidx.compose.runtime:runtime:1.12.1") implementation("androidx.compose.runtime:runtime-livedata:1.12.1") implementation("androidx.compose.runtime:runtime-rxjava2:1.12.1") } android { buildFeatures { compose = true } kotlinOptions { jvmTarget = "1.8" } }
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Prześlij opinię
Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową kartę, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz oddać głos na istniejący problem, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 1.13
Wersja 1.13.0-beta01
7 października 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.13.0-beta01 Wersja 1.13.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Biblioteki są teraz przeznaczone dla języka Kotlin 2.2 i wymagają kompilatora kotlinc 2.2 (I82396, b/498369605).
Poprawki błędów
- Usunięto błąd, który powodował, że przekazanie wartości
Float.NaNlubDouble.NaNdo funkcji@Composableuniemożliwiało jej pomijanie ponownej kompozycji, nawet jeśli wszystkie argumenty pozostawały niezmienione. Ten błąd dotyczył funkcji, które otrzymywałyDp.Unspecified, ponieważDp.Unspecifiedjest obsługiwany przezFloat.NaN. (I7a643, b/564569402) - Wartość
CompositionObserverjest teraz obliczana raz na każdą kompozycję. Ustawienie lub zastąpienie go wartościąsetObserverpodczas tworzenia kompozycji zacznie obowiązywać od następnego przebiegu. Wstawianie treści z możliwością przenoszenia raportuje teraz teżonBeginCompositionionEndComposition. (Iad280) - Blok obliczeniowy
computedStateOfjest teraz tylko do odczytu. Zapisywanie stanu w tym bloku spowoduje zgłoszenie wyjątkuIllegalStateException. (Id045f, b/456249371) - Usunęliśmy wyciek pamięci w
LinkComposer, który powodował, że przenoszeniemovableContentzachowywało gniazda grupy opakowującej. (I17af2) - Zależność
androidx.lifecycle:lifecycle-runtimezostała zaktualizowana do wersji 2.10.0. Ta wersja jest wymagana, aby można było uruchamiać kontrole lint w pakiecie czasu działania cyklu życia w przypadku wtyczki Androida do obsługi Gradle w wersji 9.5.0-alpha04 lub nowszej. (I99bfd, b/556807521) - Obsługa używania
ComposeTracerpoza wątkiem głównym. (I139e4)
Wkład zewnętrzny
- Rozwiązaliśmy problem w
computedStateOf, który mógł prowadzić do nieoczekiwanych unieważnień podczas odczytu za pomocąSnapshotStateObserver. (Ie3f8b, b/561372470)
Wersja 1.13.0-alpha03
9 września 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.13.0-alpha03 Wersja 1.13.0-alpha03 zawiera te zmiany.
Wydajność
- Wbudowane
SlotWriter.forAllDataInRememberOrder, aby wyeliminować alokacje (Ie39f6)
Wersja 1.13.0-alpha02
26 sierpnia 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.13.0-alpha02 Wersja 1.13.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano funkcję
withLocalRetainedValuesStore, która umożliwia zwracanie wartości z funkcji lambda treści. (I8e871, b/542168593) - Dodaliśmy wersje funkcji
rememberSerializabledopuszczające wartość null dla typuMutableState. (I77b83, b/543285462)
Wersja 1.13.0-alpha01
12 sierpnia 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.13.0-alpha01 Wersja 1.13.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
Dostosowaliśmy flagę funkcji
LinkTable, aby zmniejszyć ryzyko konfliktów w scalonych zestawach reguł ProGuard i zwiększyć zgodność, gdy aplikacja jest minimalizowana poza Gradle. Składnia ProGuard używana do konfigurowania flagi uległa niewielkiej zmianie. Zapoznaj się z informacjami poniżej i zwróć uwagę na dodany nawias (I419da):-assumevalues public class androidx.compose.runtime.ComposeRuntimeFlags { static boolean isLinkBufferComposerEnabled() return true; }produceState()iFlow.collectAsState()akceptują teraz argumentSnapshotMutationPolicy, który umożliwia kontrolowanie zasad równości i scalania bazowego obiektuState. (I0c167, b/405128869)Ustawiono
@ComposableTargetjako powtarzalne. Więcej informacji znajdziesz w zaktualizowanej dokumentacji. (I99a89, b/481422057)Dodano
RecompositionTracer, aby rejestrować przepływ unieważniania rekompozycji (I1dbc1, Ia991d, b/531813367)Udostępniony obiekt observable
keyswSaveableStateHolder, który upraszcza nawigację i zarządzanie stanem listy wstecznej oraz eliminuje potrzebę zewnętrznego śledzeniakey. Dostęp przezholder.keys; usuń za pomocąremoveState. (I9bbbb, b/398887924)Dodano
staticCompositionLocalWithComputedDefaultOf, aby tworzyćProvidableCompositionLocals, które działają jako statyczne, gdy są podane, lub obliczane, gdy nie są podane. (I844e4)
Poprawki błędów
- Rozwiązaliśmy problem w
GapComposer, który może powodować, że instancjeRememberObserverpo blokuwithCompositionLocalnieprawidłowo wykonują wywołania zwrotne zapominania przedRememberObserverw bloku. (I4d54c) - Rozwiązaliśmy problem z wyjątkiem o małej liczbie wystąpień podczas zapisywania w obiekcie stanu modyfikowalnego. (I48194, b/503110696)
- Rozwiązaliśmy błąd w
SnapshotStateSet.writeToParcel, który powodował, że serializowany był tylko pierwszy wpis. (I64f4c, b/537461421) - Znaki
CancellationExceptionużywane do anulowaniaLaunchedEffecti zapamiętaneCoroutineScopeszostały zmodyfikowane, aby były bardziej czytelne w śladach stosu. (I89840, b/449897855) - Zoptymalizowana inicjalizacja obiektów towarzyszących klas wartości
compose:runtime(ComposeStackTraceMode,GroupKind) za pomocą dynamicznych getterów. (I50640) - Usuń wymaganie dotyczące
compileSdk37 (If78b4)
Wkład zewnętrzny
- Naprawiono problem z brakiem reakcji kompozycji nadrzędnych po usunięciu kompozycji podrzędnej z błędem podczas edycji na żywo. (I3717c)
- Naprawiono przywracanie edycji na żywo po wystąpieniu błędu w kompozycji podrzędnej, dzięki czemu kompozycje nadrzędne nadal obserwują zmiany stanu. (I63fb5)
Wersja 1.12
Wersja 1.12.1
9 września 2026 r.
androidx.compose.runtime:runtime-*:1.12.1 została wydana bez zmian w stosunku do wersji 1.12.0. Wersja 1.12.1 zawiera te zmiany.
Wersja 1.12.0
12 sierpnia 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.12.0 Wersja 1.12.0 zawiera te zmiany.
Ważne zmiany od wersji 1.11.0:
Aktualizacje tabeli pól eksperymentalnych
- Poczyniliśmy postępy w stabilizacji eksperymentalnej implementacji
LinkTablewprowadzonej w wersji 1.11. Nowa implementacja ma na celu poprawę skuteczności rekompozycji, zwłaszcza w przypadku niewielkich losowych zmian. Zachęcamy użytkowników do wypróbowania nowej funkcjiSlotTablei zgłaszania wszelkich napotkanych problemów. Aby dowiedzieć się więcej, przeczytajComposeRuntimeFlags.isLinkBufferComposerEnabled.
Efekt uboczny w przypadku interfejsu API kluczy
- Dodano przeciążenie do funkcji
SideEffect, które akceptuje argumenty klucza. Nowy interfejs API umożliwia wysyłanie jednorazowychSideEffectbez konieczności używaniaLaunchedEffectlubDisposableEffect, których blokiCoroutineScopelubonDisposesą nieużywane. (I528b2, b/476108743)
Wersja 1.12.0-rc01
29 lipca 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.12.0-rc01 Wersja 1.12.0-rc01 zawiera te zmiany.
Wersja 1.12.0-beta02
1 lipca 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.12.0-beta02 Wersja 1.12.0-beta02 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy
ArrayIndexOutOfBoundsExceptionw elemencieLinkComposerpodczas używania zagnieżdżonych elementówMovableContent. (I85daf)
Wersja 1.12.0-beta01
17 czerwca 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.12.0-beta01 Wersja 1.12.0-beta01 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że obserwatorzy zastosowania zrzutu nie otrzymywali powiadomień, jeśli obiekt stanu został utworzony w jednym zrzucie, a następnie zmodyfikowany w równoczesnym zrzucie przed zastosowaniem pierwszego z nich. (Ide27f, b/451479063)
- Usunięto potencjalny wyciek pamięci w sposobie śledzenia wartości
derivedStateOf()w kompozycji. Przekazywanie zapisów do obiektów odczytywanych przez stan pochodny powodowało, że instancjaderivedStateOf()była zachowywana przez kompozycję do momentu jej usunięcia. JeśliderivedStateOf()nie jest prawidłowo zapamiętany, wyciek może być znaczny, ponieważ każda kompozycja może utworzyć nowy. (Ib5d87, b/516904513) - Rozwiązaliśmy problem w
LinkComposer, który mógł powodować pomijanie funkcji kompozycyjnych zamiast ponownego komponowania, gdy były one unieważniane podczas komponowania. (Ie29fe) - Rozwiązaliśmy problem z przeciążeniem funkcji
rememberz argumentami o zmiennej liczbie, który uniemożliwiał unieważnienie zapamiętanej wartości i powodował zwracanie przez funkcję remember nieprawidłowej wartości. Dzieje się tak, gdyrememberjest ponownie tworzony z mniejszej liczby kluczy, które są takie same jak poprzednie klucze, ale bez elementów z końca tablicy. Aby zastosować tę poprawkę, należy ponownie skompilować kod, którego dotyczy problem. (I0736b)
Wkład zewnętrzny
- Dodano szczegółowe śledzenie działania
DisposableEffectiSideEffectw środowisku wykonawczym Compose. (Ie451f)
Wersja 1.12.0-alpha03
19 maja 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.12.0-alpha03 Wersja 1.12.0-alpha03 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy kilka problemów w
LinkTable, w których diagnostyczne zrzuty stosu były puste lub brakowało w nich informacji (I3918c). - Rozwiązaliśmy problem z wewnętrznym typem danych, który w rzadkich przypadkach mógł powodować wyjątek w przypadku treści ruchomych. (Ic478f, b/507724717)
- Rozwiązaliśmy problem z pomijaniem w
LinkComposer, który powodował niespójne działanie w porównaniu zGapComposer, nieoczekiwane ponowne obliczanie argumentów domyślnych i przekroczenie limitu czasu testu. (I783dc)
Wersja 1.12.0-alpha02
6 maja 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.12.0-alpha02 Wersja 1.12.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano przeciążenie do funkcji
SideEffect, które akceptuje argumenty klucza. Nowy interfejs API umożliwia wywoływanie jednorazowychSideEffectsbez konieczności używaniaLaunchedEffectlubDisposableEffect, których blokiCoroutineScopelubonDisposesą nieużywane. (I528b2, b/476108743)
Wersja 1.12.0-alpha01
22 kwietnia 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.12.0-alpha01 Wersja 1.12.0-alpha01 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem w tabeli LinkTable, który mógł powodować nieprawidłowe operacje na węzłach. (I491c3)
- Zaktualizowano compileSdk Compose do interfejsu API 37. Oznacza to, że podczas korzystania z Compose wymagana jest minimalna wersja AGP 9.2.0. (Id45cd, b/413674743)
- Rozwiązaliśmy problem z pamięcią podręczną w tabeli LinkTable, w której wstawianie treści powodujące zmianę rozmiaru mogło prowadzić do odczytywania nieaktualnych wartości, co mogło uniemożliwiać rozwiązanie CompositionLocals. (I8016c)
- Usunęliśmy błąd, który powodował, że
T.writableRecordgenerował niepotrzebneIllegalStateException(Ia778f, b/440975176).
Śledzenie środowiska wykonawczego w wersji 1.7
Wersja 1.7.0-rc01
18 września 2024 r.
Publikacja androidx.compose.runtime:runtime-tracing:1.7.0-rc01 Wersja 1.7.0-rc01 zawiera te zmiany.
Śledzenie środowiska wykonawczego w wersji 1.0
Wersja 1.0.0-beta01
29 listopada 2023 r.
Publikacja androidx.compose.runtime:runtime-tracing:1.0.0-beta01 Wersja 1.0.0-beta01 zawiera te zatwierdzenia.
Wersja 1.0.0-alpha05
15 listopada 2023 r.
Publikacja androidx.compose.runtime:runtime-tracing:1.0.0-alpha05 Wersja 1.0.0-alpha05 zawiera te zatwierdzenia.
Poprawki błędów
- Przypięte zależności do najniższych obsługiwanych stabilnych wersji (np. compose-runtime i tracing-perfetto) – rozwiązanie problemu, który powodował, że compose-runtime-tracing wprowadzał do aplikacji nowszą wersję compose-runtime.
Wersja 1.0.0-alpha04
23 sierpnia 2023 r.
Publikacja androidx.compose.runtime:runtime-tracing:1.0.0-alpha04 Wersja 1.0.0-alpha04 zawiera te zatwierdzenia.
Nowe funkcje
- Zgodność z najnowszymi wersjami narzędzi Benchmark i Tracing Perfetto, które umożliwiają śledzenie kompozycji podczas uruchamiania aplikacji (uruchomienie „na zimno”), np. w AndroidX Benchmark i Android Studio (od wersji Hedgehog Beta 2).
Zmiany w interfejsie API
- Zmieniono nazwę
androidx.tracing.perfetto.Tracenaandroidx.tracing.perfetto.PerfettoSdkTrace. (I44af8) - Ujednolicenie interfejsów API pakietu Tracing Perfetto SDK z interfejsami
android.os.Trace. (I73ba0, b/282199917) - Wymagania wstępne dotyczące śledzenia podczas uruchamiania aplikacji. (Iad890)
- Połączono eksperymentalne i publiczne pliki interfejsu API (I0f2e1, b/278769092)
Wersja 1.0.0-alpha02
8 lutego 2023 r.
Publikacja androidx.compose.runtime:runtime-tracing:1.0.0-alpha02 Wersja 1.0.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
- Brak zmian w funkcjonalności. Wiele optymalizacji wydajności w zależnościach podrzędnych
androidx.tracing:tracing-perfetto*.
Wersja 1.0.0-alpha01
7 września 2022 roku
Publikacja androidx.compose.runtime:runtime-tracing:1.0.0-alpha01 Wersja 1.0.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
androidx.compose.runtime:runtime-tracingto biblioteka, która – w przypadku narzędzi, które ją obsługują (wkrótce) – umożliwia rozszerzone śledzenie w aplikacji Compose. Ta pierwsza wersja to 1.0.0-alpha01.
Wersja 1.11
Wersja 1.11.4
1 lipca 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.11.4 Wersja 1.11.4 zawiera te zmiany.
Wersja 1.11.3
17 czerwca 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.11.3 Wersja 1.11.3 zawiera te zmiany.
Wersja 1.11.2
19 maja 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.11.2 Wersja 1.11.2 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z wewnętrznym typem danych, który w rzadkich przypadkach mógł powodować wyjątek w przypadku treści ruchomych. (Ic478f, b/507724717)
Wersja 1.11.1
6 maja 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.11.1 Wersja 1.11.1 zawiera te zmiany.
Wersja 1.11.0
22 kwietnia 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.11.0 Wersja 1.11.0 zawiera te zmiany.
Ważne zmiany od wersji 1.10.0:
Nowa eksperymentalna tabela slotów
- Przebudowaliśmy
SlotTable, czyli wewnętrzną strukturę danych używaną przez środowisko wykonawcze Compose do śledzenia hierarchii kompozycji, określania zmian spowodowanych przez ponowne utworzenie i przechowywania zapamiętanych wartości. Ta zmiana ma na celu poprawę wydajności rekompozycji, co osiąga się głównie dzięki użyciu znacznie mniejszej liczby operacji kopiowania pamięci niż w przypadku bufora szczelinowegoSlotTable. Niektóre zmiany w hierarchii kompozycji, np. zmiana kolejności długiej listy elementów, mogą być wprowadzane ponad 2 razy szybciej niż w przypadku poprzedniej wersjiSlotTable. Większość pozostałych operacji jest o około 10% szybsza w przypadku nowejSlotTableimplementacji. ImplementacjaSlotTableużywana przez środowisko wykonawcze wpływa na wszystkie metody funkcji kompozycyjnych i nie wymaga ponownej kompilacji. Użycie nowegoSlotTableto zmiana w całej aplikacji, w tym w przypadku zależności. - Ta
SlotTableimplementacja jest nadal eksperymentalna i obecnie domyślnie wyłączona. Można ją włączyć, ustawiając wartośćComposeRuntimeFlags.isLinkBufferComposerEnablednatrue. W wersjach produkcyjnych z włączoną minimalizacją ta wartość jest domyślnie ustawiona na false w pliku proguard-rules.pro dostarczonym z biblioteką wykonawczą. Aby włączyć w wersji produkcyjnej nowy interfejsSlotTable, w plikuproguard-rules.proaplikacji należy zmienić to założenie na wartość true. Więcej informacji znajdziesz w dokumentacji dotyczącejComposeRuntimeFlags.isLinkBufferComposerEnabled.
Lokalne kompozycje domyślne hosta
- Dodano
compositionLocalWithHostDefaultOf, które umożliwia definiowanie elementów CompositionLocals, które w przypadku wartości domyślnych wracają do środowiska hostującego (np. tagówViewna Androidzie).
Bardziej efektywna snapshotFlow obserwacja dzięki SnapshotFlowManager
- Wprowadziliśmy
SnapshotFlowManagerAPI, aby skuteczniej obserwowaćsnapshotFlow. Ponowne użycie tego samegoSnapshotFlowManagerw przypadku wielu instancjisnapshotFlowrejestruje mniej obserwatorów zastosowania zrzutu, co przyspiesza przetwarzanie aktualizacji stanu.
Wersja 1.11.0-rc01
8 kwietnia 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.11.0-rc01 Wersja 1.11.0-rc01 zawiera te zmiany.
Wersja 1.11.0-beta02
25 marca 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.11.0-beta02 Wersja 1.11.0-beta02 zawiera te zmiany.
Poprawki błędów
- Rozwiązuje problem w WASM, który powodował, że kody skrótu tożsamości zawsze zwracały wartość 0 (I9d70c).
- Rozwiązaliśmy problem, który powodował, że stan pochodny elementu nadrzędnego mógł nie zostać prawidłowo unieważniony, gdy zmieniły się zależności zagnieżdżonego stanu pochodnego (Ia7981, b/481750019).
- Rozwiązuje problem w
LinkTable, który może powodować nieprawidłowe zapisy po usunięciu kompozycji. (I5c97a) - Rozwiązuje problem w
LinkTable, który może powodować nieprawidłowe zapisy, gdy rozmiar tabeli zmienia się podczas operacji kopiowania (Ie7edf). - Rozwiązuje problem w
LinkTable, który powoduje nieprawidłową aktualizację przechowywanej wartości węzła (I58a4a). LinkTablejest teraz inicjowany z mniejszą pojemnością, co zapobiega błędom braku pamięci podczas tworzenia wielu podkompozycji na urządzeniach z mniejszymi rozmiarami sterty (I112b9).
Wersja 1.11.0-beta01
11 marca 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.11.0-beta01 Wersja 1.11.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
SnapshotFlowManageri przeciążeniesnapshotFlow, które akceptuje parametrmanager, są teraz oznaczone jako eksperymentalne (I5c1a5, b/486077876, I0de71, b/486077876).
Poprawki błędów
- Naprawienie błędu „Apply is called on deactivated node” w kompozycji z możliwością wstrzymania (I880c0, b/484300733)
- Rozwiązaliśmy problem w
LinkTable, który mógł powodować uszkodzenieArrayIndexOutOfBoundsExceptionslub metadanych podczas korzystania zMovableContent. (I8452b) - Rozwiązaliśmy problem w
LinkTable, który uniemożliwiał prawidłowe wypełnianie śladów diagnostycznych (I59868). - Rozwiązaliśmy problem w nowej tabeli SlotTable, w którym użycie
RememberObserverswMovableContentmogło powodować pętlęOutOfMemoryError/infinitepo usunięciu. (I884e7)
Wersja 1.11.0-alpha06
25 lutego 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.11.0-alpha06 Wersja 1.11.0-alpha06 zawiera te zmiany.
Wersja 1.11.0-alpha05
11 lutego 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.11.0-alpha05 Wersja 1.11.0-alpha05 zawiera te zmiany.
Zmiany w interfejsie API
ComposeRuntimeFlags.isMovingNestedMovableContentEnabled, flaga funkcji środowiska wykonawczego, została usunięta. (I3ee62, b/455588848)- Przekonwertowano
HostDefaultKeyzopen classnainterface. Umożliwia to kluczom implementowanie wielu mechanizmów wyszukiwania (np.ViewTreeHostDefaultKey) bez ograniczeń wynikających z dziedziczenia po jednej klasie, co zwiększa rozszerzalność w przypadku niestandardowych środowisk hostingu. (I917a2) HostDefaultProvideriLocalHostDefaultProviderto terazpublic, co umożliwia niestandardowym środowiskom hostingu definiowanie wartości dla ustawień regionalnych specyficznych dla platformy. (I5bdbe)
Poprawki błędów
- Wyeliminowano możliwość zakleszczenia podczas jednoczesnego uruchamiania 2 funkcji
snapshotFloww 2 wątkach. (Ib4339) - Rozwiązaliśmy problem w tabeli linków, który mógł powodować pomijanie elementów kompozycyjnych w hierarchii przez narzędzia i nieprawidłowe łączenie podkompozycji (I7178e).
Wkład zewnętrzny
- Naprawiono fałszywie dodatni wynik Lint w przypadku używania operatora jednoargumentowego do modyfikowania wartości w bloku produceState (I1c7c9).
Wersja 1.11.0-alpha04
28 stycznia 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.11.0-alpha04 Wersja 1.11.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
- Przebudowaliśmy
SlotTable, czyli wewnętrzną strukturę danych używaną przez środowisko wykonawcze Compose do śledzenia hierarchii kompozycji, określania zmian spowodowanych przez ponowne utworzenie i przechowywania zapamiętanych wartości. Ta zmiana ma na celu poprawę wydajności rekompozycji, co osiąga się głównie dzięki użyciu znacznie mniejszej liczby operacji kopiowania pamięci niż w przypadku bufora szczelinowegoSlotTable. Niektóre zmiany w hierarchii kompozycji, np. zmiana kolejności długiej listy elementów, mogą być wprowadzane ponad 2 razy szybciej niż w przypadku poprzedniej wersjiSlotTable. Większość pozostałych operacji jest o około 10% szybsza w przypadku nowejSlotTableimplementacji. ImplementacjaSlotTableużywana przez środowisko wykonawcze wpływa na wszystkie metody funkcji kompozycyjnych i nie wymaga ponownej kompilacji. Użycie nowegoSlotTableto zmiana w całej aplikacji, w tym w przypadku zależności. - Ta implementacja
SlotTablejest obecnie domyślnie wyłączona. Możesz ją włączyć, ustawiając wartośćComposeRuntimeFlags.isLinkBufferComposerEnablednatrue. - W wersjach produkcyjnych z włączoną minimalizacją ta wartość jest domyślnie ustawiona na
falsew plikuproguard-rules.prodostarczanym z biblioteką wykonawczą. Aby włączyć nową funkcjęSlotTablew wersji produkcyjnej, należy zmienić to założenie natruew plikuproguard-rules.proaplikacji. Więcej informacji znajdziesz w dokumentacji dotyczącejComposeRuntimeFlags.isLinkBufferComposerEnabled. (Ib741d, b/268366116)
Nowe funkcje
- Dodano
compositionLocalWithHostDefaultOf, które umożliwia definiowanieCompositionLocals, które w przypadku wartości domyślnych wracają do środowiska hostingu (np. tagów widoku Androida). (I15b81)
Poprawki błędów
- Zapewniliśmy, że wywołania
Snapshot.sendApplyNotificationsnie mogą być zwracane, dopóki nie zostaną wysłane odpowiednie powiadomienia o zastosowaniu. (I95f20, b/418800424) - Zapobiegaj obniżaniu poziomu śladów stosu informacji o źródle do kluczy grupy w przypadkach, gdy informacje o źródle nie są dostępne w czasie działania programu. (If3712)
- Przedstaw
ComposeToolingFlags. Te flagi mają być trwałe (w przeciwieństwie doComposeRuntimeFlags) i są używane w przypadku funkcji narzędzi, które mają istotny wpływ na wydajność. (I87863)
Wkład zewnętrzny
- Nowy eksperymentalny interfejs API
RecomposerInfo#errorState(I0decc) - Zmień wartość
AnnotationRetentionadnotacjiFunctionKeyMetana „BINARY” (I53495)
Wersja 1.11.0-alpha03
14 stycznia 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.11.0-alpha03 Wersja 1.11.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Wprowadziliśmy klasę
SnapshotFlowManageri dodaliśmy opcjonalny parametrSnapshotFlowManagerdosnapshotFlow, co umożliwia użytkownikom optymalizację liczby zarejestrowanych obserwatorów zastosowania migawki. (I6289b, b/446746211)
Poprawki błędów
- Dodano adnotację śledzenia wstawiania treści, które można przenosić (Ibf176).
Wersja 1.11.0-alpha02
17 grudnia 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.11.0-alpha02 Wersja 1.11.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Flaga
isMovableContentUsageTrackingEnabledzostała usunięta (I71e2b, b/427960130).
Wkład zewnętrzny
- Usunięto błąd w funkcji edycji na żywo, który powodował, że nie można było odzyskać danych po wystąpieniu błędu. (Ieb34f)
Wersja 1.11.0-alpha01
3 grudnia 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.11.0-alpha01 Wersja 1.11.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
- Nazwa
RetainedValuesStore.getExitedValueOrDefaultzostała zmieniona naconsumeExitedValueOrDefaultc7a0929 - Usunięto eksperymentalny interfejs API równoczesnego ponownego komponowania.(c8af15d)
Wersja 1.10
Wersja 1.10.6
25 marca 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.10.6 Wersja 1.10.6 zawiera te zmiany.
Poprawki błędów
- Naprawiono błąd „Nie można wyłączyć ponownego użycia z katalogu głównego, jeśli został spowodowany przez inne grupy” w kompozycji z możliwością wstrzymania (I474b5, b/488433633)
- Naprawienie błędu „Apply is called on deactivated node” w kompozycji z możliwością wstrzymania (I880c0, b/484300733)
Wersja 1.10.5
11 marca 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.10.5 Wersja 1.10.5 zawiera te zmiany.
Wersja 1.10.4
25 lutego 2026 r.
Wersja androidx.compose.runtime:runtime-*:1.10.4 została opublikowana bez zmian w stosunku do wersji 1.10.3. Wersja 1.10.4 zawiera te zatwierdzenia.
Wersja 1.10.3
11 lutego 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.10.3 Wersja 1.10.3 zawiera te zmiany.
Wersja 1.10.2
28 stycznia 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.10.2 Wersja 1.10.2 zawiera te zmiany.
Wersja 1.10.1
14 stycznia 2026 r.
Publikacja androidx.compose.runtime:runtime-*:1.10.1 Wersja 1.10.1 zawiera te zmiany.
Wersja 1.10.0
3 grudnia 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.10.0 Wersja 1.10.0 zawiera te zmiany.
Wersja 1.10.0-rc01
19 listopada 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.10.0-rc01 Wersja 1.10.0-rc01 zawiera te zmiany.
Poprawki błędów
- Ochrona przed modyfikacją ponownego wejścia podczas rejestrowania stanów pochodnych w
SnapshotStateObserver(I7b862, b/435655844, b/456249373, b/402535073) - [Lint] Drobna poprawka błędu, aby detektor prawidłowo ostrzegał o złożonym przypisaniu. (I08319, b/456775556)
Wersja 1.10.0-beta02
5 listopada 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.10.0-beta02 Wersja 1.10.0-beta02 zawiera te zmiany.
Zmiany w interfejsie API
Wprowadziliśmy kilka zmian niezgodnych z interfejsem API, aby uprościć instalację i zarządzanie
RetainedValuesStore. Nie ma to wpływu na obecne połączenia z numeramiretainiRetainedEffect, ale wszystkie niestandardowe numeryRetainedValuesStorebędą wymagać migracji, aby były zgodne z tą wersją. (If3c2f, b/451921682, b/450539803)RetainedValuesStorenie udostępnia już interfejsów API niskiego poziomu do rozpoczynania i zatrzymywania przechowywania. Stan przechowywania jest teraz automatycznie dostosowywany do treści.LocalRetainedValuesStoreProvideroferuje teraz instalacjęRetainedValuesStore. Nie należy podawać bezpośrednio wartościLocalRetainedValuesStore. Więcej informacji o tych zmianach znajdziesz w zaktualizowanej dokumentacji i przykładach.Nazwa
RetainedValuesStoreProviderzostała zmieniona naRetainedValuesStoreRegistry. Ta klasa udostępnia teraz tylko interfejsy API do instalowania i zarządzaniaRetainedValuesStorew kompozycji.ControlledRetainedValuesStorezastępujeManagedRetainedValuesStore.RetainedValuesStorejest teraz interfejsem.
Wcześniej instalacja niestandardowego RetainedValuesStore mogła wyglądać tak:
val retainedValuesStore = retainControlledRetainedValuesStore()
if (active) {
CompositionLocalProvider(LocalRetainedValuesStore provides retainedValuesStore) {
content()
}
val composer = currentComposer
DisposableEffect(retainedValuesStore) {
val cancellationHandle =
if (retainedValuesStore.retainExitedValuesRequestsFromSelf > 0) {
composer.scheduleFrameEndCallback {
retainedValuesStore.stopRetainingExitedValues()
}
} else {
null
}
onDispose {
cancellationHandle?.cancel()
retainedValuesStore.startRetainingExitedValues()
}
}
}
Dzięki tym zmianom w interfejsie API instalację można wyrazić za pomocą tego kodu:
val retainedValuesStore = retainManagedRetainedValuesStore()
if (active) {
LocalRetainedValuesStoreProvider(retainedValuesStore) {
content()
}
}
Poprawki błędów
- Przenosi unieważnienia zakresu w treściach, które można przenosić, zanim przeniesie te treści z tabeli slotów (I9d123, b/451651649).
Wersja 1.10.0-beta01
22 października 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.10.0-beta01 Wersja 1.10.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
RetainedValuesStore.getExitedValueOrDefaultzmieniono naRetainedValuesStore.getExitedValueOrElse(If9653, b/452340613)- Nazwa
isKeepingExitedValueszostała zmieniona naisRetainingExitedValues(I660bf, b/437095756) - Nazwę konta usługi
RetainScopezmieniono naRetainedValuesStore. Nazwa notatnikaRetainScopeHolderzostała zmieniona naRetainedValuesStoreRegistry. Nazwa notatnikaRetainScopeHolder.RetainScopeProviderzostała zmieniona naRetainedValuesStoreRegistry.ProvideChildRetainedValuesStore. (Idf23a, b/437095756)
Poprawki błędów
- Opóźnione inicjowanie
SavedStatewSaveableStateRegistrydo momentu pierwszego użycia. (Ic0a93)
Wersja 1.10.0-alpha05
8 października 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.10.0-alpha05 Wersja 1.10.0-alpha05 zawiera te zmiany.
Poprawki błędów
- Wypełnij zrzut stosu dla
DiagnosticComposeExceptionw trybie wersji. (Ib76cb) - Naprawiono problem ze stanem zrzutu, w którym użycie zasady scalania dla typu mogło powodować nieprawidłowe obliczenie poprzedniej wartości, co skutkowało zwróceniem przyszłej wartości stanu zamiast poprzedniej. Dzieje się tak, gdy oczekują więcej niż 2 zmienne zrzuty i co najmniej jedna z stosowanych wartości ma zasady scalania. (I527b5, b/442791065)
Wersja 1.10.0-alpha04
24 września 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.10.0-alpha04 Wersja 1.10.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano interfejs
RetainScopeHolderAPI do zarządzania kolekcjąRetainScopes. Możesz użyć tej funkcji do wdrożenia zasad przechowywania w przypadku kontenerów i hostów nawigacji, które zawierają wiele elementów podrzędnych o różnym okresie przechowywania. (I10e0f) - Dodano interfejsy API
RetainedContentHostiretainControlledRetainScope, których można używać do tworzenia zarządzanych automatycznieRetainScopesw przypadku znikających treści, takich jak zwijane panele (If81f6). - Wycofano wbudowane przeciążenie funkcji
Updater#set, ponieważ zbyt wiele razy opakowywała ona podaną wartość. Dodano przeciążenie funkcjiUpdater#init, które przyjmuje parametr, dzięki czemu nie wymaga lambdy przechwytującej. (Id679e) - Wprowadza interfejs API
RetainedEffect, który jest podobny do interfejsuDisposableEffect, ale zamiast cyklu życia kompozycji śledzi cykl życia przechowywania. Ten interfejs API jest przeznaczony do efektów związanych z zachowaniem innego obiektu, który nie implementuje lub nie może implementować interfejsuRetainObserver. (I1c61f, b/177562901) - Poprawiliśmy dokumentację dotyczącą
RetainObserver.onRetainedi dodaliśmyRetainObserver.onUnused, które odzwierciedlaRememberObserver.onAbandoned(Ia6fc5).
Poprawki błędów
- Naprawiono zapamiętywanie wysyłania po pierwszej grupie w funkcji (np. wywołaniu funkcji kompozycyjnej) i przed grupą, którą można usunąć (np. instrukcją
if), która mogła wysyłaćonForgottenw nieprawidłowej kolejności. (I453f6, b/346821372) - Unikaj przechodzenia przez kontekst współprogramu podczas inicjowania
LaunchedEffect. (I8d2c3b)
Wersja 1.10.0-alpha03
10 września 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.10.0-alpha03 Wersja 1.10.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Wprowadza ślady stosu Compose oparte na kluczu grupy, które działają w zminimalizowanych aplikacjach. Mapowanie ProGuard dla tych śladów będzie generowane przez wtyczkę Gradle kompilatora Compose od wersji Kotlin 2.3.0. Te ślady stosu są domyślnie wyłączone. Aby je włączyć, użyj
ComposeStackTraceMode.GroupKeys. (Ifbcb5) - Dodaj interfejs:
IdentifiableRecomposeScopedla narzędzi (Idd5e0, b/434194620) - Zapobieganie niepotrzebnym unieważnieniom w kompozycjach z użyciem
CompositionLocalContext(I3fa21, b/412750209)
Poprawki błędów
- W dokumentacji i narzędziach wyjaśniono, że klucze przekazywane do funkcji retain są również zachowywane. Unikaj przekazywania kluczy do zachowania, które prowadzi do wycieku pamięci. (Ib553b, b/177562901)
- Rozwiązaliśmy problem polegający na tym, że gdy funkcja
resume()w zawieszonej kompozycji była wywoływana w innym wątku, stan oczekujących powiadomień mógł ulec zaburzeniu, gdy wątek główny próbował ponownie skomponować kompozycję z możliwością wstrzymania na potrzeby następnej klatki. (Ie5f17, b/442649894) - Wyjątki w logach zarejestrowane w kompozycji. (I47d78, b/432799675, b/436878515, b/359623674, b/400436355)
Wersja 1.10.0-alpha02
27 sierpnia 2025 roku
Publikacja androidx.compose.runtime:runtime-*:1.10.0-alpha02 Wersja 1.10.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano adnotację
@DoNotRetain, której można używać do oznaczania typów, które nie powinny być używane z interfejsemretainAPI, prawdopodobnie dlatego, że mogą powodować wyciek zasobów. (Ie5435) - Projekty wydane w Kotlinie 2.0 wymagają KGP w wersji 2.0.0 lub nowszej. (Idb6b5)
Poprawki błędów
- Naprawiliśmy ruchome treści, aby prawidłowo obliczać operacje dla narzędzia Applier, gdy treść modyfikuje węzeł główny kompozycji. Podczas obliczania zmian w przypadku treści ruchomych wywołanie
up()może pozostać w stanie oczekiwania i nie zostać wysłane do modułu stosującego, co spowoduje nieprawidłowe ustawienie stanu modułu stosującego w przypadku kolejnych użyć. (I7c583), (I47b70) - Oznacza
CheckResultjako przestarzałe, ponieważ nie jest przeznaczone do użycia. (I32934)
Wersja 1.10.0-alpha01
13 sierpnia 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.10.0-alpha01 Wersja 1.10.0-alpha01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Wprowadza interfejs API retain. Podobnie jak
rememberSaveable, funkcja retain może zachowywać i zapisywać zapamiętane wartości, które opuszczają hierarchię kompozycji. Zachowane wartości nie są serializowane i mają krótszy okres istnienia niż zapisane wartości. Działają podobnie doViewModelz biblioteki androidx. Więcej informacji znajdziesz w dokumentacji. (Ia3105, b/177562901) - Dodaliśmy interfejs
awaitOrScheduleNextCompositionEnd()API, który wywołuje wywołanie zwrotne, gdy Recomposer zakończy tworzenie bieżącej klatki. Jeśli Recomposer nie tworzy obecnie klatki, ten interfejs API zawiesza się do momentu zakończenia tworzenia następnej klatki i planuje utworzenie nowej klatki. (Ib873c) - Dodano interfejs API lokalnego dostawcy kompozycji, który nie zwraca jednostki (I22521, b/271871288).
- Dodano flagę funkcji
isMovableContentUsageTrackingEnabled, która umożliwia śledzenie wykorzystania przenośnych treści, aby uniknąć pewnych kosztów początkowego tworzenia treści. Ta flaga funkcji jest obecnie domyślnie wyłączona. (Ia713d)
Poprawki błędów
- Naprawia błąd w ruchomej treści, gdy jest ona przenoszona między podkompozycjami. (I3fa1e, b/436858107)
- Naprawiono błąd polegający na tym, że w przypadku wielu zagnieżdżonych subkompozycji brakowało części zrzutu stosu kompozycji. (I98c6f)
- Przeniesienie domyślnego minSdk z API 21 na API 23 (Ibdfca, b/380448311, b/435705964, b/435705223)
- Naprawiono sytuację wyścigu, gdy stan wewnętrzny kompozycji z możliwością wstrzymania był aktualizowany z wielu wątków. (I03895)
- Aktualizuje obserwatora rejestracji kompozycji, aby był wywoływany przed początkową kompozycją. (I4adca, b/430600932)
- Drobna poprawka błędu, aby zapewnić zgodność
AutoboxingStateValuePropertyDetectorz K1 i K2. (Ie81c1)
Wkład zewnętrzny
- Udostępnij artefakt runtime-rxjava2 na wielu platformach i dodaj JVM jako obsługiwany cel. (I5409e)
- Udostępnij artefakt runtime-rxjava3 na wielu platformach i dodaj JVM jako obsługiwany cel. (I97e84)
Wersja 1.9
Wersja 1.9.5
19 listopada 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.9.5 Wersja 1.9.5 zawiera te zatwierdzenia.
Poprawki błędów
- Przenosi unieważnienia zakresu w przenośnych treściach przed przeniesieniem tych treści z tabeli slotów (I9d123, b/451651649).
Wersja 1.9.4
22 października 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.9.4 Wersja 1.9.4 zawiera te zatwierdzenia.
Wersja 1.9.3
8 października 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.9.3 Wersja 1.9.3 zawiera te zatwierdzenia.
Wersja 1.9.2
24 września 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.9.2 Wersja 1.9.2 zawiera te zatwierdzenia.
Wersja 1.9.1
10 września 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.9.1 Wersja 1.9.1 zawiera te zatwierdzenia.
Poprawki błędów
- Unikaj ponownego komponowania kompozycji, które są w trakcie komponowania. (Iacb01)
- Zapobiegać dwukrotnemu wstrzymywaniu zakresów ponownego komponowania. (I060b2, b/431584881)
Wersja 1.9.0
13 sierpnia 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.9.0 Wersja 1.9.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.8.0
- Sprawdzanie kodu za pomocą narzędzia Lint w Compose wymaga teraz minimalnej wersji AGP 8.8.2. Jeśli nie możesz uaktualnić AGP, możesz zamiast tego uaktualnić Lint, używając w pliku gradle.properties wersji
android.experimental.lint.version=8.8.2lub nowszej. Aby uruchamiać sprawdzanie kodu Compose w IDE, musisz mieć Android Studio Ladybug lub nowsze. - Utworzono nową bibliotekę adnotacji w czasie działania. Zawiera definicje adnotacji bez zależności od środowiska wykonawczego Compose, dzięki czemu można go używać w modułach innych niż Compose.
@Stable,@Immutablei@StableMarkerzostały przeniesione do adnotacji czasu działania, aby umożliwić dodawanie adnotacji do modułów innych niż Compose.- Użytkownicy
@FrequentlyChangingValuei@RememberInCompositionzostali dodani do adnotacji czasu działania.@FrequentlyChangingValueoznacza deklaracje, które mogą powodować częste ponowne komponowanie, a@RememberInCompositionoznacza deklaracje, które powinny być zapamiętywane w kompozycji. Odpowiednie testy lint ostrzegają przed nieprawidłowym użyciem.
androidx.compose.runtime:runtimebędzie teraz obsługiwać dodatkowe platformy. Obsługa platformy komputerowej, iOS i platform natywnych została przeniesiona z projektu Compose Multiplatform firmy JetBrains i będzie udostępniana w Google Maven. Nie ma to wpływu na inne artefakty Compose.
Wersja 1.9.0-rc01
30 lipca 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.9.0-rc01 Wersja 1.9.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Aktualizuje obserwatora rejestracji kompozycji, aby był wywoływany przed początkową kompozycją. (I4adca, b/430600932)
Wersja 1.9.0-beta03
16 lipca 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.9.0-beta03 Wersja 1.9.0-beta03 zawiera te zatwierdzenia.
Wersja 1.9.0-beta02
2 lipca 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.9.0-beta02 Wersja 1.9.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Zmniejszono referencyjny czas życia wartości w tabeli slotów między kompozycjami. W niektórych przypadkach odwołanie w tabeli slotów może trwać o 1 klatkę dłużej niż jest to konieczne. (I49e74, b/418516940)
- Usuń Kotlin mangle dla metod gorącego przeładowania. (Ic56a3, b/426871325)
Wersja 1.9.0-beta01
18 czerwca 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.9.0-beta01 Wersja 1.9.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodaliśmy interfejs API narzędzi do analizowania informacji o źródle dodanych przez kompilator Compose. (Iceaf9, b/408492167)
SnapshotStateSetimplementuje terazParcelablena Androidzie, więc można go używać w ramachrememberSaveable { ... }. (I755dd, b/378623803)SnapshotStateListimplementuje terazParcelablena Androidzie, więc można go używać w ramachrememberSaveable { ... }. (Id18be, b/378623803)movableContentOf()jest teraz oznaczony adnotacją@RememberInComposition, która umożliwia narzędziu lint wykrywanie nieprawidłowych zastosowań (I2738d).- Zaktualizowano eksperymentalny interfejs API obserwatorów kompozycji, aby umożliwić bardziej kompleksową obserwację przyczyn ponownej kompozycji (I32b6a).
- Zmień
setDiagnosticStackTraceEnabledna eksperymentalne, aby uwzględnić przyszły rozwój tej funkcji. (I11db3) - Środowisko wykonawcze
currentCompositeKeyHashzostało wycofane. Użyj w zamian zasadycurrentCompositeKeyHashCode. Zastępczy interfejs API koduje ten sam ciąg za pomocą większej liczby bitów, co wykładniczo zmniejsza prawdopodobieństwo, że 2 losowe, niezwiązane ze sobą grupy w hierarchii kompozycji będą miały ten sam klucz ciągu. (I4cb6a, b/177562901) - Projekty wydane w Kotlinie 2.0 wymagają użycia KGP w wersji 2.0.0 lub nowszej (Idb6b5).
- Adnotacje
@Stable,@Immutablei@StableMarkerzostały przeniesione do adnotacji czasu działania (w sposób zgodny). Jeśli chcesz używać tych adnotacji z bibliotek, które nie zależą od Compose, możesz teraz polegać na adnotacjach w czasie działania. (I23a16) - Zmieniono nazwę przeciążenia
rememberSaveable, które akceptujeKSerializer, narememberSerializable. Ta zmiana wyjaśnia, że jest ona przeznaczona do używania zkotlinx.serialization. Obsługa ogólnych klaskotlinx.Serializablebezpośrednio wrememberSaveablewymagałaby parametru typureified, co spowodowałoby utratę zgodności kodu źródłowego, ponieważ wszystkie miejsca wywołania musiałyby dostarczać informacje o typie w czasie kompilacji. (Idb875, I38627, b/376028110)
Poprawki błędów
- Kompozycje, w których ustawiono treści z możliwością wstrzymania, a które zostały anulowane, muszą zostać usunięte. Jest to teraz sprawdzane przez kompozycję i w przypadku ponownego użycia zgłasza błąd. (I2daa5, b/406792785)
- Naprawiono kompozycję z możliwością wstrzymania, aby po jej usunięciu nie wysyłała już fałszywego sygnału
onForgottendo obserwatorów.RememberObserversw anulowanej kompozycji z możliwością wstrzymania powinna otrzymać tylko wywołanie onAbandoned. (I26f54) - Rozwiązaliśmy problem z przenośną treścią, który polegał na tym, że unieważnienia docierające na późnych etapach przetwarzania przenośnej treści były dodawane do kompozytora, ale nie były aktualizowane po przeniesieniu treści, co powodowało ponowne komponowanie treści w niewłaściwym miejscu. (Icd2fa, b/409439507)
- Rozwiązaliśmy problem, który powodował unieważnienie przenośnych treści po ich utworzeniu, ale przed przeniesieniem. (I99eac, b/229001114)
- Wywołanie funkcji
remove()iteratora listy utworzonego przez funkcjęSnapshotStateListpo wywołaniu funkcjiprevious()mogło spowodować usunięcie z listy niewłaściwego elementu i nie odpowiadało działaniu funkcjiArrayListw przypadku tej samej sekwencji wywołań. (I05ab7, b/417493222) - Rozwiązaliśmy problem z kolejnością wysyłania
onForgotton, który mógł na przykład powodować wykonywanieonDisposeefektów jednorazowych w nieprawidłowej kolejności. (Ic1c91, b/417450712) - Poprawka umożliwiająca ponowne wykorzystanie obsługi stanu w kompozycji z możliwością wstrzymania (Ife96e, b/404058957)
- Naprawiono ponowne używanie stanu, gdy kompozycja została wstrzymana i ponownie uruchomiona, ale niektóre wcześniej wstrzymane stany musiały zostać ponownie skomponowane, ponieważ niektóre odczytane stany uległy zmianie podczas wstrzymania kompozycji. (I441d1, b/416209738)
- Ukończono poprawkę dotyczącą zapamiętywania wysyłania kompozycji z możliwością wstrzymania w przypadku problemu b/404058957. Poprzednia poprawka była niekompletna. (I1afd4, b/404058957)
OffsetApplierprawidłowo zastępuje terazapply(), które zostało wprowadzone w ramach kompozycji z możliwością wstrzymania. Brak tej funkcji może spowodować, że kompozycja z możliwością wstrzymania zgłosi wyjątek podczas aktualizowania węzłów wirtualnych. (Idbf31, b/409291131)- Rozwiązaliśmy problem z zakleszczeniem, który mógł występować u użytkowników Molecule, gdy zawieszone połączenie z
FrameClock.withFrameNanosbyło anulowane podczas wysyłania ramki. (I89cab, b/407027032) - Recomposer może przejść w stan bezczynności z ruchomą treścią (Ie5416, b/409267170)
- Kolejność, w jakiej
onReuseionDeactivatemogą zostać odwrócone podczas kompozycji z możliwością wstrzymania. Teraz gwarantujemy, że będą one występować w kolejnościonDeactivate/onReuse. (I996e4, b/404058957) - Naprawiono wysyłanie obserwatorów zapamiętanych w kompozycji z możliwością wstrzymania, aby uniknąć wysyłania zapamiętanych/zapomnianych w ramach tej samej aplikacji (I570b2, b/404645679, b/407931790).
- Przełączono
LifecycleRegistryna tryb niebezpieczny w Compose Multiplatform, aby wyłączyć sprawdzanieMainThreadi rozwiązać problemy z wątkami. Więcej informacji znajdziesz w artykule CMP-8227. (Icee87)
Wkład zewnętrzny
- Naprawiliśmy błąd, który występował u użytkowników Molecule i powodował, że użycie
RecompositionMode.Immediatemogło skutkować pominięciem ponownych kompozycji. (I9f3a9, b/419527812) - Udostępnione metody pobierające
PausableCompositionisAppliediisCancelled, które umożliwiają sprawdzanie stanuPausableComposition. (I994aa) - Dodano
AnnotationTarget.FUNCTIONdo adnotacjiFunctionKeyMeta. (I08021)
Wersja 1.9.0-alpha04
4 czerwca 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.9.0-alpha04 Wersja 1.9.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
SnapshotStateSetimplementuje teraz interfejs Parcelable na Androidzie, więc można go używać jako częścirememberSaveable { ... }. (I755dd, b/378623803)SnapshotStateListimplementuje teraz interfejs Parcelable na Androidzie, więc można go używać jako częścirememberSaveable { ... }. (Id18be, b/378623803)movableContentOf()jest teraz oznaczony adnotacją@RememberInComposition, która umożliwia narzędziu lint wykrywanie nieprawidłowych zastosowań (I2738d).- Zaktualizowano eksperymentalny interfejs API obserwatorów kompozycji, aby umożliwić bardziej kompleksową obserwację przyczyn ponownej kompozycji (I32b6a).
Poprawki błędów
- Rozwiązaliśmy problem z kolejnością wysyłania
onForgotton, który mógł na przykład powodować wykonywanieonDisposeefektów jednorazowych w nieprawidłowej kolejności. (Ic1c91, b/417450712) - Poprawka umożliwiająca ponowne wykorzystanie obsługi stanu w kompozycji z możliwością wstrzymania (Ife96e, b/404058957)
- Drobna poprawka, która sprawia, że wykrywanie kolekcji modyfikowalnych jest zgodne z K1 i K2 (Ie4878)
- Drobna poprawka błędu, która sprawia, że wyszukiwanie adnotacji w przypadku zastąpionych akcesorów właściwości jest zgodne zarówno z K1, jak i K2 (I9900d).
Wkład zewnętrzny
- Naprawiliśmy błąd wpływający na użytkowników Molecule, w przypadku których użycie
RecompositionMode.Immediatemogło powodować pominięcie ponownego komponowania. (I9f3a9, b/419527812) - Udostępnia gettery
PausableCompositionisApplied iisCancelled, które umożliwiają sprawdzanie stanuPausableComposition. (I994aa)
Wersja 1.9.0-alpha03
20 maja 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.9.0-alpha03 Wersja 1.9.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Zmień
setDiagnosticStackTraceEnabledna eksperymentalne, aby uwzględnić przyszły rozwój tej funkcji. (I11db3)
Poprawki błędów
- Naprawiono ponowne używanie stanu, gdy kompozycja została wstrzymana i ponownie uruchomiona, ale niektóre wcześniej wstrzymane stany musiały zostać ponownie skomponowane, ponieważ niektóre odczytane stany uległy zmianie podczas wstrzymania kompozycji. (I441d1, b/416209738)
- Poprawiono problem z funkcją zapamiętywania wysyłania kompozycji z możliwością wstrzymania (b/404058957). Poprzednia poprawka była niepełna. (I1afd4, b/404058957)
SaveableStateHolder.SaveableStateProviderudostępnia terazLocalSavedStateRegistryOwnerdo swoich treści za pomocą kompozycji. (Ia2761, b/413108878)androidx.compose.runtime.saveablezależy teraz odandroidx.lifecycle.runtime.compose. (I53228, b/413108878)
Wersja 1.9.0-alpha02
7 maja 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.9.0-alpha02 Wersja 1.9.0-alpha02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Wycofany
rememberSaveablez niestandardowym parametrem „key”. Pomija zakres pozycyjny, co prowadzi do błędów stanu i niespójnego działania (np. niezamierzonego udostępniania lub utraty stanu, problemów w zagnieżdżonych elementachLazyLayouts). Aby używać zakresu pozycyjnego w celu zapewnienia spójnego stanu o zakresie lokalnym, usuń parametr „key”. Więcej informacji znajdziesz w pełnej treści komunikatu o zatwierdzeniu. (I5e6ff, b/357685851)
Poprawki błędów
OffsetApplierprawidłowo zastępuje terazapply(), które zostało wprowadzone w ramach kompozycji z możliwością wstrzymania. Brak tej funkcji może spowodować, że kompozycja z możliwością wstrzymania zgłosi wyjątek podczas aktualizowania węzłów wirtualnych. (Idbf31, b/409291131)- Rozwiązaliśmy problem z zakleszczeniem, który mógł występować u użytkowników Molecule, gdy zawieszone połączenie z
FrameClock.withFrameNanosbyło anulowane podczas wysyłania ramki. (I89cab, b/407027032) - Komponent Recomposer może przejść w stan bezczynności, a stan przenośnych treści nadal będzie oczekiwać na odrzucenie. Zwykle nie występuje to zjawisko, ponieważ stan przenośnych treści jest odrzucany w głównej pętli kompozytora. Może się to jednak zdarzyć w przypadku kompozycji z możliwością wstrzymania, gdy ruchome treści zostaną odrzucone podczas
resume()(Ie5416, b/409267170). - Kolejność, w jakiej
onReuseionDeactivatemogą zostać odwrócone podczas kompozycji z możliwością wstrzymania. Są one teraz gwarantowane w kolejnościonDeactivate/onReuse. (I996e4, b/404058957)
Wersja 1.9.0-alpha01
23 kwietnia 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.9.0-alpha01 Wersja 1.9.0-alpha01 zawiera te zatwierdzenia.
Zmiany w zachowaniu
- Sprawdzanie kodu za pomocą narzędzia Lint w Compose wymaga teraz minimalnej wersji AGP 8.8.2. Jeśli nie możesz uaktualnić AGP, możesz zamiast tego uaktualnić Lint, używając wersji
android.experimental.lint.version=8.8.2(lub nowszej) w plikugradle.properties. Aby uruchamiać sprawdzanie kodu Compose w IDE, musisz mieć Androida Studio w wersji Ladybug lub nowszej.
Zmiany w interfejsie API
- Środowisko wykonawcze
currentCompositeKeyHashzostało wycofane. Użyj w zamian zasadycurrentCompositeKeyHashCode. Zastępczy interfejs API koduje ten sam ciąg za pomocą większej liczby bitów, co wykładniczo zmniejsza prawdopodobieństwo, że 2 losowe, niezwiązane ze sobą grupy w hierarchii kompozycji będą miały ten sam klucz ciągu. (I4cb6a, b/177562901) - Projekty wydane w Kotlinie 2.0 wymagają użycia KGP 2.0.0 lub nowszego (Idb6b5).
- Adnotacje
@Stable,@Immutablei@StableMarkerzostały przeniesione do adnotacji czasu działania (w sposób zgodny). Jeśli chcesz używać tych adnotacji z bibliotek, które nie zależą od Compose, możesz teraz polegać na adnotacjach w czasie działania. (I23a16) - Usuwa
onCreatingionDisposing, ponieważ zostały wycofane i zmieniono ich nazwy naonPreCreateionPreDispose. Ta zmiana kończy proces zmiany nazwy. (I97461) - Udostępniać lokalną kompozycję, która umożliwia dołączenie śladu stosu kompozycji na podstawie lokalizacji węzła kompozycji w kompozycji. (Ie0bda, b/354163858)
- Wprowadzenie diagnostycznych śladów stosu Compose na podstawie informacji o źródle przechowywanych w kompozycji. (I3db9f, b/354163858)
- Wycofanie
runWithTimingDisabledna rzeczrunWithMeasurementDisabled, które dokładniej opisuje działanie – wszystkie dane są wstrzymane. Dodatkowo udostępnij superklasęMicrobenchmarkScope, ponieważ ponowne zadeklarowanie funkcjirunWithMeasurementDisabledw celu otwartego dostępu nie jest możliwe, ponieważ jest ona wstawiana. (I9e23b, b/389149423, b/149979716) - Dodaje adnotację
@FrequentlyChangingValue, która może oznaczać funkcje i gettery właściwości, aby wskazać, że nie należy ich wywoływać bezpośrednio w kompozycji, ponieważ może to powodować częste ponowne komponowanie. Może to być np. pozycja przewijania lub wartości animacji. Ostrzeżenia są generowane przez odpowiednią kontrolę lint. (I83630, b/234042500) - Dodaje
@RememberInComposition: adnotację, która może oznaczać konstruktory, funkcje i metody pobierające właściwości, aby wskazać, że nie można ich wywoływać bezpośrednio w kompozycji bez zapamiętywania. Błędy będą zgłaszane przez odpowiednie sprawdzanie kodu. Tej adnotacji można używać do oznaczania deklaracji, które zwracają obiekty stanowe lub modyfikowalne, obiekty, których tożsamość jest ważna w różnych kompozycjach, lub obiekty, których tworzenie jest kosztowne i które powinny być buforowane w różnych kompozycjach. (Ie7db0) - Dodano nowy przeciążony operator
rememberSaveable, który obsługujeKSerializerw przypadku bezpiecznego pod względem typów utrwalania stanu za pomocą serializacji KotlinX. Obecny interfejs API oparty naSaverjest nadal obsługiwany. (Iea4ab, b/376028110)
Poprawki błędów
- Naprawiono wysyłanie zapamiętanych obserwatorów w kompozycji z możliwością wstrzymania, aby uniknąć wysyłania zapamiętanych/zapomnianych w ramach tej samej aplikacji (I570b2, b/404645679, b/407931790)
- Zmieniliśmy nazwy metod
SnapshotObservernaCreating naonPreCreateionDisposingnaonPreDispose, aby były zgodne z wytycznymi dotyczącymi interfejsu API. Poprzednie metody zostały wycofane, a nowe domyślnie wywołują stare, więc istniejące implementacje tego interfejsu będą nadal działać, dopóki metody nie zostaną usunięte. Te metody zostaną usunięte w wersji 1.9.0 alpha w kolejnej zmianie, która zostanie przesłana wkrótce po tej. Zostaną one usunięte z wersji 1.8 beta przed wersją 1.8 stabilną. (I6d753) - Rozwiązaliśmy problem, który powodował, że zapamiętane wartości mogły zostać nieprawidłowo zapomniane i ponownie obliczone podczas ponownego tworzenia pominiętej grupy, która pojawia się po grupie ruchomej (I62cab, b/383769314).
- Dodaliśmy obsługę tworzenia śladów stosu w
LaunchedEffectirememberCoroutineScope(I705c0, b/354163858) - Sprawdzanie kodu w Compose wymaga teraz minimalnej wersji AGP 8.8.2 w wierszu poleceń i co najmniej Androida Studio Ladybug w przypadku obsługi IDE. Jeśli używasz starszej wersji AGP, możesz ustawić
android.experimental.lint.version=8.8.2w pliku gradle.properties, aby uaktualnić wersję Lint bez wpływu na AGP. (I6f2a8)
Wkład zewnętrzny
- Dodano
AnnotationTarget.FUNCTIONdo adnotacjiFunctionKeyMeta. (I08021)
Wersja 1.8
Wersja 1.8.3
18 czerwca 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.3 Wersja 1.8.3 zawiera te zatwierdzenia.
Wersja 1.8.2
20 maja 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.2 Wersja 1.8.2 zawiera te zatwierdzenia.
Wersja 1.8.1
7 maja 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.1 Wersja 1.8.1 zawiera te zatwierdzenia.
Wersja 1.8.0
23 kwietnia 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0 Wersja 1.8.0 zawiera te zatwierdzenia.
Wersja 1.8.0-rc03
9 kwietnia 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0-rc03 Wersja 1.8.0-rc03 zawiera te zmiany.
Wersja 1.8.0-rc02
26 marca 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0-rc02 Wersja 1.8.0-rc02 zawiera te zmiany.
Wersja 1.8.0-rc01
12 marca 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0-rc01 Wersja 1.8.0-rc01 zawiera te zmiany.
Zmiany w interfejsie API
- Zmieniliśmy nazwy metod
SnapshotObservernaCreating naonPreCreateionDisposingnaonPreDispose, aby były zgodne z wytycznymi dotyczącymi interfejsu API. Poprzednie metody zostały wycofane, a nowe domyślnie wywołują stare, więc istniejące implementacje tego interfejsu będą nadal działać, dopóki metody nie zostaną usunięte. Te metody zostaną usunięte w wersji 1.9.0 alpha w kolejnej zmianie, która zostanie przesłana wkrótce po tej. Zostaną one usunięte z wersji beta 1.8 przed wersją stabilną 1.8. (I6d753)
Wersja 1.8.0-beta03
26 lutego 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0-beta03 Wersja 1.8.0-beta03 zawiera te zmiany.
Wersja 1.8.0-beta02
12 lutego 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0-beta02 Wersja 1.8.0-beta02 zawiera te zmiany.
Poprawki błędów
- Ponowne zgłaszanie wykrytego wyjątku w kompozycji z możliwością wstrzymania .(384486d)
Wersja 1.8.0-beta01
29 stycznia 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0-beta01 Wersja 1.8.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Rozwiązuje problem, który powodował, że zgłoszenie podczas kompozycji wyjątku, który nie rozszerza klasy Exception, mogło prowadzić do błędu „Pending composition has not been applied” (Oczekująca kompozycja nie została zastosowana). (I356be, b/382094412)
Wersja 1.8.0-alpha08
15 stycznia 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0-alpha08 Wersja 1.8.0-alpha08 zawiera te zmiany.
Wersja 1.8.0-alpha07
11 grudnia 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0-alpha07 Wersja 1.8.0-alpha07 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano interfejs API narzędzi, który pomaga inspektorowi układu korelować podkompozycje z kompozycją nadrzędną w przypadkach, gdy węzeł nie jest używany do łączenia kompozycji. (I4ce3d)
- Ustawiliśmy stałe arytmetyczne i specjalne dla
SnapshotIdjako wewnętrzne zamiast publicznych. W razie potrzeby można wykonywać działania arytmetyczne na wartościSnasphotId, przekształcając ją w wartośćIntlubLongza pomocą odpowiednio funkcjitoInt()lubtoLong(). (Ic3a57)
Wkład zewnętrzny
- Optymalizacja miejsca na dane pod kątem parametrów
movableContentOf. (ed87177)
Wersja 1.8.0-alpha06
13 listopada 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0-alpha06 Wersja 1.8.0-alpha06 zawiera te zmiany.
Zmiany w interfejsie API
- Zmiany w interfejsie
PausableCompositionAPI. Te zmiany powodujące niezgodność z poprzednimi wersjami 1.8.0-alpha (od wersji 1.8.0-alpha02) nie są wstecznie zgodne, ponieważ interfejsy API są nadal w wersji alfa. (I39819) - Dodaje interfejsy API narzędzi do obserwowania tworzenia nowych kompozycji w Recomposerze (Iaeb7e).
- Dodano element
snapshotIdtypuLongdo elementuSnapshoti wycofano elementid. Identyfikator migawki został zmieniony zIntnaLong, aby uniknąć przepełnienia identyfikatora migawki w systemach o bardzo wysokiej liczbie klatek na sekundę i długotrwałych animacjach. Typ został zmieniony na expect/actual, aby na platformach, które nie mają natywnego typuLong, mógł być typemIntlub innym. Platformy, które nie mają natywnego typuLong, np. JavaScript, powinny unikać wysokich wartości FPS (powyżej 1000), ponieważ powoduje to przepełnienie typuIntco około 24 dni. (I38ac3, b/374821679)
Poprawki błędów
- Stała kwota
providesDefaultza pojedynczyprovides. (aosp/3318540 b/374263387) - Optymalizacja
ChangeList(3318538)
Wersja 1.8.0-alpha05
30 października 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0-alpha05 Wersja 1.8.0-alpha05 zawiera te zmiany.
Poprawki błędów
- Naprawiono przepełnienie stosu podczas dodawania elementu
Int.MAX_VALUEdo elementuSnapshotIdSet. (b/370536104, Ic4179f6) - Mikrooptymalizacje w czasie działania (I50c60)
- Zezwalaj R8 na usuwanie wywołań funkcji runtimeCheck (I8c44)
- Zmień
compoundKeyOfz rekurencyjnego na iteracyjny (I5817f)
Wkład zewnętrzny
- Implementowanie stosów z listami kolekcji (I7d47c)
Wersja 1.8.0-alpha04
16 października 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0-alpha04 Wersja 1.8.0-alpha04 zawiera te zmiany.
Ulepszenia wydajności
- Podawanie identyfikatora zrzutu w przypadku rekordów stanu w konstruktorze (85c00f)
- Refaktoryzacja
SnapshotState***, aby uniknąć błędów weryfikacji klasy (6ee4a6) - Popraw reguły R8, aby zapobiec wstawianiu kodu throw (5beb92)
- Mikrooptymalizacja operacji (d73c5c)
- Optymalizacja przydziałów
SynchronizedObjectw JVM (2b043f)
Wersja 1.8.0-alpha03
2 października 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0-alpha03 Wersja 1.8.0-alpha03 zawiera te zmiany.
Ulepszenia wydajności
- Lazy create child context for
rememberCoroutineScope(f61464)rememberCoroutineScopesłuży zwykle do uruchamiania korutyn w odpowiedzi na zdarzenia, które mają miejsce po utworzeniu kompozycji. W niektórych przypadkach te zdarzenia mogą nigdy nie wystąpić, co prowadzi do dodatkowych kosztów tworzenia i anulowania zadań bez żadnych korzyści.- Spraw, aby zakres zwracany przez
rememberCoroutineScopetworzył swójcoroutineContextleniwie podczas uzyskiwania do niego dostępu, całkowicie unikając tworzenia i anulowania zadań, jeśli zakres nigdy nie jest używany.
Wersja 1.8.0-alpha02
18 września 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0-alpha02 Wersja 1.8.0-alpha02 zawiera te zmiany.
Nowe funkcje
- Dodano
PausableComposition, co umożliwia tworzenie podkompozycji, którą można wstrzymać podczas kompozycji i zastosować asynchronicznie do kompozycji. Wstrzymywanie wymaga obsługi kompilatora, która jest obecnie w trakcie opracowywania. (I3394b)
Wersja 1.8.0-alpha01
4 września 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.8.0-alpha01 Wersja 1.8.0-alpha01 zawiera te zmiany.
Wersja 1.7
Wersja 1.7.8
12 lutego 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.8 Wersja 1.7.8 zawiera te zmiany.
Wersja 1.7.7
29 stycznia 2025 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.7 Brak zmian w porównaniu z wersją 1.7.6.
Publikacja androidx.compose.runtime:runtime-*:1.7.6 Wersja 1.7.6 zawiera te zmiany.
Wersja 1.7.5
30 października 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.5 Wersja 1.7.5 zawiera te zmiany.
Wersja 1.7.4
16 października 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.4 Wersja 1.7.4 zawiera te zmiany.
Wersja 1.7.3
2 października 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.3 Wersja 1.7.3 zawiera te zmiany.
Wersja 1.7.2
18 września 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.2 Wersja 1.7.2 zawiera te zmiany.
Wersja 1.7.1
10 września 2024 r.
- Brak zmian w artefaktach Androida. Usunięto
-desktopartefaktów, a dodano-jvmStubsi-linuxx64Stubs. Żaden z tych celów nie jest przeznaczony do użycia. Są to tylko symbole zastępcze, które mają pomóc w pracach nad Jetbrains Compose.
Wersja 1.7.0
4 września 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0 Wersja 1.7.0 zawiera te zmiany.
Ważne zmiany od wersji 1.6.0
- Dodano możliwość podania lokalizacji kompozycji, która jest obliczana na podstawie wartości innych lokalizacji kompozycji domyślnie za pomocą
compositionLocalWithComputedDefault()lub przez podanie lambdy do obliczenia wartości za pomocąprovidesComputedzamiastprovides. - Wartość lokalnego komponentu można uzyskać za pomocą właściwości
currentValuelokalnego komponentu dostępnego w funkcji lambda obliczającej wartość. Jest to używane zamiastcurrent, do którego można uzyskać dostęp tylko w funkcjach@Composable. (Iadbc0) - Nowo utworzone obiekty stanu są natychmiast dostępne z innych zrzutów, w tym z globalnego zrzutu, w swoim stanie początkowym. Wszelkie późniejsze modyfikacje nie są widoczne, dopóki nie zostanie zastosowany zrzut, w którym utworzono obiekt.
- Stan początkowy
mutableStateOf(), a także jego wersji pierwotnych, to wartość przekazana jako parametr domutableStateOf(). Początkowy stanmutableStateListOf()imutableStateMapOf()jest pusty. - Dodano atrybuty
Snapshot.isInSnapshotiSnapshot.PreexistingSnapshotId, które umożliwiają natychmiastowy dostęp do obiektu stanu z globalnego zrzutu po jego utworzeniu. - Obiekty stanu niestandardowego mogą być od razu dostępne, jeśli będą zgodne ze wzorcem zmian wprowadzonych w wbudowanych obiektach zrzutów. (I84a17)
- Włącz
nonSkippingGroupOptimizationw bibliotekach Compose. Dzięki temu wygenerowany kod wszystkich funkcji kompozycyjnych w androidx, których nie można ponownie uruchomić, jest bardziej wydajny. W przyszłości planujemy włączyć tę opcję domyślnie. I(acbc08) - Unieważnianie funkcji lambda z możliwością komponowania w podkompozycjach w tej samej ramce. (98301c)
- Wywołaj wywołanie zwrotne
onReleasew tej samej kolejności coonForgotten. (2cd790) - Włącz tryb szybkiego pomijania (ed1766)
- Zwiększanie unikalności
currentCompoundHashKeyw większej liczbie przypadków (d4a872)
Wersja 1.7.0-rc01
21 sierpnia 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-rc01 Wersja 1.7.0-rc01 zawiera te zmiany.
Wersja 1.7.0-beta07
7 sierpnia 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-beta07 Wersja 1.7.0-beta07 zawiera te zmiany.
Wersja 1.7.0-beta06
24 lipca 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-beta06 Wersja 1.7.0-beta06 zawiera te zmiany.
Wersja 1.7.0-beta05
10 lipca 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-beta05 Wersja 1.7.0-beta05 zawiera te zmiany.
Wersja 1.7.0-beta04
26 czerwca 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-beta04 Wersja 1.7.0-beta04 zawiera te zmiany.
Wersja 1.7.0-beta03
12 czerwca 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-beta03 Wersja 1.7.0-beta03 zawiera te zmiany.
Wersja 1.7.0-beta02
29 maja 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-beta02 Wersja 1.7.0-beta02 zawiera te zmiany.
Wersja 1.7.0-beta01
14 maja 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-beta01 Wersja 1.7.0-beta01 zawiera te zmiany.
Wersja 1.7.0-alpha08
1 maja 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-alpha08 Wersja 1.7.0-alpha08 zawiera te zmiany.
Wersja 1.7.0-alpha07
17 kwietnia 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-alpha07 Wersja 1.7.0-alpha07 zawiera te zmiany.
Nowe funkcje
- Dodano możliwość podania lokalizacji kompozycji, która jest obliczana na podstawie wartości innych lokalizacji kompozycji domyślnie za pomocą
compositionLocalWithComputedDefault()lub przez podanie lambdy do obliczenia wartości za pomocąprovidesComputedzamiastprovides. - Wartość lokalnego komponentu można uzyskać za pomocą właściwości
currentValuelokalnego komponentu dostępnego w funkcji lambda obliczającej wartość. Jest to używane zamiastcurrent, do którego można uzyskać dostęp tylko w funkcjach@Composable. (Iadbc0)
Zmiany w interfejsie API
- Nowo utworzone obiekty stanu są natychmiast dostępne z innych zrzutów, w tym ze zrzutu globalnego, w swoim stanie początkowym. Wszelkie późniejsze modyfikacje nie są widoczne, dopóki nie zostanie zastosowany zrzut, w którym utworzono obiekt.
- Stan początkowy
mutableStateOf(), a także jego wersji pierwotnych, to wartość przekazana jako parametr domutableStateOf(). Początkowy stanmutableStateListOf()imutableStateMapOf()jest pusty. - Dodano atrybuty
Snapshot.isInSnapshotiSnapshot.PreexistingSnapshotId, które umożliwiają natychmiastowy dostęp do obiektu stanu z globalnego zrzutu po jego utworzeniu. - Obiekty stanu niestandardowego mogą być od razu dostępne, jeśli będą zgodne ze wzorcem zmian wprowadzonych w wbudowanych obiektach zrzutów. (I84a17)
Poprawki błędów
- Naprawiono scalanie
readObserverw zagnieżdżonych zrzutach. Powodowało to nieprawidłowe unieważnianie zagnieżdżonych stanów pochodnych, gdy były używane w komponenciesnapshotFlow. (Idf138)
Wersja 1.7.0-alpha06
3 kwietnia 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-alpha06 Wersja 1.7.0-alpha06 zawiera te zmiany.
Poprawki błędów
- Poprawiono obsługę podawania pojedynczych wartości
providesDefault(538f45) - Unikanie zakleszczenia w przypadku dostępu Recomposera do zegara klatek (07e5c6)
Wersja 1.7.0-alpha05
20 marca 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-alpha05 Wersja 1.7.0-alpha05 zawiera te zmiany.
Poprawki błędów
- Usuwanie późnych zmian w dezaktywowanej kompozycji (5950bc)
Wersja 1.7.0-alpha04
6 marca 2024 roku
Publikacja androidx.compose.runtime:runtime-*:1.7.0-alpha04 Wersja 1.7.0-alpha04 zawiera te zmiany.
Ulepszenia wydajności
- Wywołanie
Snapshot.currentraz na ocenę stanu pochodnego (ee7daf) - Odczyt
currentRecordraz na obserwację w kompozycji (b882b2) - Usuwanie przypadkowej alokacji iteratora w
snapshotFlow(231e56) - Włącz
nonSkippingGroupOptimizationw bibliotekach Compose. Dzięki temu wygenerowany kod wszystkich funkcji kompozycyjnych w androidx, których nie można ponownie uruchomić, jest bardziej wydajny. W przyszłości planujemy włączyć tę opcję domyślnie. I(acbc08)
Wersja 1.7.0-alpha03
21 lutego 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-alpha03 Wersja 1.7.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Wprowadzenie zastępowania grup w celu ulepszenia wykrywania zmian (0941b5)
Ulepszenia wydajności
- Poprawiono alokację pamięci podczas wykrywania zmian (53e7fd)
- Naprawiono wyciek pamięci w edytorze (0e097d)
- Użyj
ScopeMap, aby przekazywać unieważnienia podczas ponownego komponowania (e19a7e) - Optymalizacja mapy unieważnień, aby zachować tylko stany pochodne (f11c44)
- Zastąp użycia elementu
IdentityArraySetelementemScatterSet(db572e) - Optymalizacja
removeScopewScopeMap(bb0530)
Wersja 1.7.0-alpha02
7 lutego 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-alpha02 Wersja 1.7.0-alpha02 zawiera te zatwierdzenia.
Poprawki błędów
- Unieważnianie funkcji lambda z możliwością komponowania w podkompozycjach w tej samej ramce. (98301c)
- Wywołaj wywołanie zwrotne
onReleasew tej samej kolejności coonForgotten. (2cd790) - Filtr zmienił stany, które nie są obserwowane w
snapshotFlow. (796b80)
Ulepszenia wydajności
- Modyfikowanie obserwatora migawki w miejscu, w którym jest już przezroczysty. (f60f30)
- Optymalizacja
SnapshotIdSet.lowest()(7ae149) - Użyj bezpłatnego konta
fold()w usłudzeSnapshotIdSet. (532b7d) - Usuwanie alokacji iteratora (83f96b)
Wersja 1.7.0-alpha01
24 stycznia 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.7.0-alpha01 Wersja 1.7.0-alpha01 zawiera te zatwierdzenia.
Optymalizacje skuteczności
- Dodano możliwość tworzenia przedziałów po dodaniu grupy podrzędnej (b5960c).
- Optymalizacja rejestrowania modyfikacji stanów zrzutów (28c3fe)
- Włącz tryb szybkiego pomijania (ed1766)
Poprawki błędów
- Konto dla domyślnych metadanych parametru w pamięci wewnętrznej (096665)
- Zwiększanie unikalności
currentCompoundHashKeyw większej liczbie przypadków (d4a872) - Realizuj grupy podczas wychodzenia z wywołania funkcji wbudowanej (2a90fc)
Wersja 1.6
Wersja 1.6.8
12 czerwca 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.8 Wersja 1.6.8 zawiera te zmiany.
Wersja 1.6.7
1 maja 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.7 Wersja 1.6.7 zawiera te zmiany.
Wersja 1.6.6
17 kwietnia 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.6 Brak zmian od ostatniej wersji.
Wersja 1.6.5
3 kwietnia 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.5 Wersja 1.6.5 zawiera te zmiany.
Wersja 1.6.4
20 marca 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.4 Wersja 1.6.4 zawiera te zmiany.
Wersja 1.6.3
6 marca 2024 roku
Publikacja androidx.compose.runtime:runtime-*:1.6.3 Wersja 1.6.3 zawiera te zmiany.
Wersja 1.6.2
21 lutego 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.2 Wersja 1.6.2 zawiera te zatwierdzenia.
Wersja 1.6.1
7 lutego 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.1 Wersja 1.6.1 zawiera te zatwierdzenia.
Poprawki błędów
- Wywołaj wywołanie zwrotne
onReleasew tej samej kolejności coonForgotten. (2cd790) - Filtr zmienił stany, które nie są obserwowane w
snapshotFlow. (796b80)
Wersja 1.6.0
24 stycznia 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.0 Wersja 1.6.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.5.0
Nowe funkcje
- Ponowne zgłaszanie wyjątków, które zostały pominięte w pętli rekompozycji (4dff9a)
Optymalizacje skuteczności
- Optymalizacja rejestrowania modyfikacji stanów zrzutów (28c3fe)
- Optymalizacja
rememberSaveable(f01d79) - Odroczenie ponownego odczytu stanów pochodnych do momentu zarejestrowania zmian (f38099)
- Ulepszanie dostarczania lokalnych wartości kompozycji (a337ea)
Poprawki błędów
- Naprawiono wyciek pamięci w tabeli slotów (73fcfe)
- Pomiń ponowne komponowanie podkompozycji, które zostaną usunięte. (Ieeb99, b/254645321)
- Wywołuj cykle życia
RememberObservertylko wtedy, gdy są one przechowywane w pamięci obliczeń. (f6b4dc) - Ogranicz przechwytywanie
$dirtydo wyrażeń lambda wbudowanych. (acfca0) - Naprawiono problem z czasami nieprawidłowym przypisywaniem lokalizacji do treści, które można przenosić. (035cd6)
Wersja 1.6.0-rc01
10 stycznia 2024 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.0-rc01 Wersja 1.6.0-rc01 zawiera te zatwierdzenia.
Wersja 1.6.0-beta03
13 grudnia 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.0-beta03 Wersja 1.6.0-beta03 zawiera te zatwierdzenia.
Wersja 1.6.0-beta02
29 listopada 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.0-beta02 Wersja 1.6.0-beta02 zawiera te zatwierdzenia.
Wersja 1.6.0-beta01
15 listopada 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.0-beta01 Wersja 1.6.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Przekazywanie niektórych wartości stabilności w adnotacji. (274a4c)
Poprawki błędów
- Użyj zasady referencyjnej dla stanu lokalnego zakresu kompozycji w kontekście. (83361c)
- Ogranicz przechwytywanie $dirty do funkcji lambda wbudowanych. (acfca0)
- Naprawiono problem z czasami nieprawidłowym przypisywaniem lokalizacji do treści, które można przenosić. (035cd6)
- Używaj szybszych map skrótów bez przydzielania pamięci w
RecomposeScopeImpl. (d79494) - Używaj konta
ObjectIntMapw aplikacjiDerivedState. (21862e) - Użyj
IntRefdla liczby całkowitejSnapshotThreadLocalwDerivedState. (04eaf4)
Wersja 1.6.0-alpha08
18 października 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.0-alpha08 Wersja 1.6.0-alpha08 zawiera te zatwierdzenia.
Poprawki błędów
- Wywołuj cykle życia
RememberObservertylko wtedy, gdy są one przechowywane w pamięci obliczeń. (f6b4dc) - Ulepszanie przydziałów w sortowaniu listy unieważnień. (954d63)
- Używaj nowych map bez przydzielania w
SnapshotStateObserver. (4303ce) - Usuwanie unieważnień po dezaktywacji kompozycji. (e001be)
Wersja 1.6.0-alpha07
4 października 2023 roku
Publikacja androidx.compose.runtime:runtime-*:1.6.0-alpha07 Wersja 1.6.0-alpha07 zawiera te zatwierdzenia.
Zmiany w interfejsie API
SnapshotStateListjest teraz oznaczony jakoRandomAccess, aby można było używać wersji pomocników list z indeksowaniem bezpośrednim. (I5210c, b/219554654)
Wersja 1.6.0-alpha06
20 września 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.0-alpha06 Wersja 1.6.0-alpha06 zawiera te zatwierdzenia.
Wersja 1.6.0-alpha05
6 września 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.0-alpha05 Wersja 1.6.0-alpha05 zawiera te zatwierdzenia.
Wersja 1.6.0-alpha04
23 sierpnia 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.0-alpha04 Wersja 1.6.0-alpha04 zawiera te zatwierdzenia.
Nowe funkcje
- Ponowne zgłaszanie wyjątków, które zostały pominięte w pętli rekompozycji (4dff9a)
Zmiany w interfejsie API
- Dodaliśmy metodę dezaktywacji
ReusableComposition, która usuwa obserwacje, ale pozostawia węzły na miejscu. Dezaktywowaną kompozycję można ponownie aktywować, wywołując funkcjęsetContent. (Ib7f31) - Dodaj interfejs
ReusableCompositiondo zarządzania cyklem życia i ponownym wykorzystywaniem podkompozycji. (I812d1, b/252846775)
Wersja 1.6.0-alpha03
9 sierpnia 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.0-alpha03 Wersja 1.6.0-alpha03 zawiera te zatwierdzenia.
Poprawki błędów
- Poprawka nowej optymalizacji
CompositionLocalProvider(3118e88) - Poprawne rozkładanie ruchomych węzłów treści. (5e3d59b)
Wersja 1.6.0-alpha02
26 lipca 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.0-alpha02 Wersja 1.6.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje i ulepszenia skuteczności
- Optymalizacja
rememberSaveable(f01d79) - Odroczenie ponownego odczytu stanów pochodnych do momentu zarejestrowania zmian (f38099)
- Ulepszanie dostarczania lokalnych wartości kompozycji (a337ea)
SideEffectjest oznaczony jako@ExplicitGroupsComposable, aby uniknąć wygenerowania grupy. (I74815)- Unikaj porównywania lokalnych map kompozycji w przypadku ponownego użycia (782071)
Zmiany w interfejsie API
- Dodano specjalny przypadek przeciążenia dla
CompositionLocalProviders, który pozwala uniknąć narzutu związanego z szybszym podawaniem wielu wartości, ale jest narzutem w przypadku podawania pojedynczej wartości. (I6d640, b/288169379)
Poprawki błędów
- Naprawiono wyciek pamięci w tabeli slotów (73fcfe)
- Poprawiliśmy sposób przywracania wartości
rememberSaveable, gdy funkcjastateSaverzwraca wartość null (90748c).
Wersja 1.6.0-alpha01
21 czerwca 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.6.0-alpha01 Wersja 1.6.0-alpha01 zawiera te zatwierdzenia.
Poprawki błędów
- Pomiń ponowne komponowanie podkompozycji, które zostaną usunięte. (Ieeb99, b/254645321)
- Zmniejszone przydziały podczas stosowania zrzutów. (I65c09)
- Unikaj obliczania
readableHashwDerivedState, jeśli zrzut nie został zmodyfikowany (68c565)
Wersja 1.5
Wersja 1.5.4
18 października 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.5.4 Wersja 1.5.4 zawiera te zatwierdzenia.
Wersja 1.5.3
4 października 2023 roku
Publikacja androidx.compose.runtime:runtime-*:1.5.3 Wersja 1.5.3 zawiera te zatwierdzenia.
Wersja 1.5.2
27 września 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.5.2 Wersja 1.5.2 zawiera te zatwierdzenia.
Wersja 1.5.1
6 września 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.5.1 Wersja 1.5.1 zawiera te zatwierdzenia.
Wersja 1.5.0
9 sierpnia 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.5.0 Wersja 1.5.0 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Usunięto alokacje w rekompozycji, animacjach kolorów i
AndroidComposeView. (Ib2bfa) - Dodano adnotację
@StateFactoryMarker, aby oznaczać funkcje, które tworzą stany i muszą być opakowane w wywołanieremember. (I64550) - Dodanie wersji pierwotnych stanu i
MutableState(fb3d89) - Dodano
Snapshot.isApplyObserverNotificationPending(I672a5) - Dodano wersje pierwotne interfejsu
StateAPI, które umożliwiają śledzenie wartości Int, Long, Float i Double w obiektachStatebez ponoszenia kar za automatyczne pakowanie. Aby z nich korzystać, użyj nowych metod fabrycznychmutableIntState(Int),mutableFloatStateOf(Float)itp. (I48e43)
Poprawki błędów
- Pomiń ponowne komponowanie podkompozycji, które zostaną usunięte. (Ieeb99, b/254645321)
- Nie zachowuj odniesienia do zrzutu w
ComposerImpl(0206f7) - Nie stosuj kompozycji dwukrotnie (f5791b)
- Zapewnij unieważnienie wartości stanu pochodnego, które nie zostały zainicjowane (aa2a92)
- Wywołanie
onEndChangespodczas usuwania kompozycji. (62cc8c) - Naprawianie przenoszenia treści do podkompozycji (4beb41)
- Rozwiązywanie potencjalnych zakleszczeń (c1a425 i 8edce0)
- Recomposer utworzony dla okna Androida będzie teraz blokować tylko wywołania
withFrameNanoszamiast całej kompozycji, gdy otrzyma powiadomienie ON_STOP. Oznacza to, że okna powiązane z zatrzymanymi aktywnościami będą nadal ponownie komponowane w przypadku zmian danych, ale animacje lub inne wywołania funkcjiwithFrameNanosbędą blokowane. (Id9e7f, b/240975572) - Wykonaj wywołania zwrotne dezaktywacji dla
LayoutNodeprzed usunięciem efektów 3784073 - Naprawianie zmienionych flag w przypadku ponownie uruchomionych funkcji Lambda ea81df9
- Naprawianie regresji edycji na żywo w przypadku komponentów z węzłami 73fd4d8
- ON_STOP powinien wstrzymywać transmisje zegara klatek zamiast kompozycji ae276f1
- Unieważnianie zakresów
SnapshotStateObserverw przypadku niezmienionych stanów pochodnych 84d9b1c - Naprawiono potencjalny zakleszczenie podczas usuwania kompozycji 28761fc
- Naprawianie przenoszenia treści do podkompozycji 92d4156
- Poprawka dotycząca zmienionych flag w przypadku ponownie uruchomionych funkcji Lambda (8a03e9)
- Wykonanie wywołań zwrotnych dezaktywacji dla
LayoutNodeprzed usunięciem efektów (8b0fa4) - Naprawiono problem z symbolem
endToMarker()podczas kończenia grup węzłów. (d71d980) - Użyj bieżącej grupy
SlotWriterdo sprawdzenia dezaktywacji (a0b518b) - Usuń znak
fillzSlotTable.moveSlotGapTo()i przenieś 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, które można przenosić (8676618)
Ulepszenia wydajności
- Unikaj obliczania wartości
readableHashwDerivedState, jeśli zrzut nie został zmodyfikowany. (307102) - Zmniejszone przydziały (I65c09, d7ea77, 727974 i 445808)
- Szybkie anulowanie tworzenia wiadomości
CoroutineScopes(a55362 i bd382f) - Zastępowanie rekordów obiektów stanu rekordami stanu, do których nie ma dostępu (c986960)
- Podczas tworzenia grup używaj kompozytora o odpowiednim zakresie (9a5e5b6).
- Użyj
IdentityArraySetdo przechowywania unieważnień zrzutów (7f60cca) - Zmniejsz przydziały dla obserwacji zrzutów (5bc535f)
Wersja 1.5.0-rc01
26 lipca 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.5.0-rc01 Wersja 1.5.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
Odroczenie ponownego odczytu stanów pochodnych do momentu zarejestrowania zmian (f38099)
Dostępna jest opcjonalna inspekcja, która zaleca migrację wywołań
mutableStateOf()do odpowiednich typów specjalistycznych dla typów prostych. Identyfikator lintu toAutoboxingStateCreation. Wcześniej ta kontrola była domyślnie włączona we wszystkich projektach. Aby zobaczyć to ostrzeżenie w edytorze Androida Studio i w wynikach lintowania projektu, zmień jego ważność z informacyjnej na ostrzeżenie (lub wyższą), deklarującwarning "AutoboxingStateCreation"w konfiguracji build.gradle lub build.gradle.kts modułu, jak pokazano poniżej (I34f7e):android { lint { warning "AutoboxingStateCreation" } ... }
Wersja 1.5.0-beta03
28 czerwca 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.5.0-beta03 Wersja 1.5.0-beta03 zawiera te zatwierdzenia.
Poprawki błędów
- Pomiń ponowne komponowanie podkompozycji, które zostaną usunięte. (Ieeb99, b/254645321)
Wersja 1.5.0-beta02
7 czerwca 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.5.0-beta02 Wersja 1.5.0-beta02 zawiera te zatwierdzenia.
Ulepszenia wydajności
- Unikaj obliczania wartości
readableHashwDerivedState, jeśli zrzut nie został zmodyfikowany. (307102)
Wersja 1.5.0-beta01
24 maja 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.5.0-beta01 Wersja 1.5.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Usunięto alokacje w przypadku rekompozycji, animacji kolorów i
AndroidComposeView(Ib2bfa) - Dodano adnotację
@StateFactoryMarker, aby oznaczać funkcje, które tworzą stany i muszą być opakowane w wywołanieremember. (I64550) - Dodanie wersji pierwotnych stanu i
MutableState(fb3d89) - Dodano
Snapshot.isApplyObserverNotificationPending(I672a5)
Poprawki błędów
- Zmniejszone 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)
- Zapewnij unieważnienie wartości stanu pochodnego, które nie zostały zainicjowane (aa2a92)
- Wywołanie
onEndChangespodczas usuwania kompozycji. (62cc8c) - Naprawianie przenoszenia treści do podkompozycji (4beb41)
- Rozwiązywanie potencjalnych zakleszczeń (c1a425
- ON_STOP powinien wstrzymywać transmisje zegara klatek zamiast kompozycji (f4a2d1)
- Poprawka dotycząca zmienionych flag w przypadku ponownie uruchomionych funkcji Lambda (8a03e9)
- Wykonanie wywołań zwrotnych dezaktywacji dla
LayoutNodeprzed usunięciem efektów (8b0fa4)
Wkład zewnętrzny
- Dodano
Snapshot.isApplyObserverNotificationPending(I672a5)
Wersja 1.5.0-alpha04
10 maja 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.5.0-alpha04 Wersja 1.5.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano wersje pierwotne interfejsu
StateAPI, które umożliwiają śledzenie wartości Int, Long, Float i Double w obiektachStatebez ponoszenia kar za automatyczne pakowanie. Aby z nich korzystać, użyj nowych metod fabrycznychmutableIntState(Int),mutableFloatStateOf(Float)itp. (I48e43)
Poprawki błędów
Wywołanie
onEndChangespodczas usuwania kompozycji. Węzły ostrości usunięte podczasComposition.disposesubskrybująonEndChanges, aby zresetować ostrość.(03d4a47)Zapewnij unieważnienie wartości stanu pochodnego, które nie zostały zainicjowane. Każdy stan pochodny jest powiązany z listą zależności w
SnapshotStateObserver, która służy do unieważniania zakresów powiązanych ze stanem pochodnym, gdy tylko zmieni się zależność. Zmiana zależności jest rejestrowana podczas przejścia zrzutu, co może nastąpić po odczytaniu stanu pochodnego (z powodu wywołania funkcjiSnapshot.notifyObjectsInitialized()).Poprzednia logika obserwacji stanu pochodnego w
SnapshotStateObserverusuwała stare zależności, a potem odczytywała nową wartość. Spowodowało to sytuację wyścigu, w której unieważnienie nastąpiło w stanie oczyszczonym, w którym nie zarejestrowano unieważnienia zależności.Ta zmiana zmienia kolejność odczytu stanu pochodnego i czyszczenia zależności, dzięki czemu unieważnienie zawsze następuje w prawidłowym stanie. (c472be6)
Wersja 1.5.0-alpha03
19 kwietnia 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.5.0-alpha03 Wersja 1.5.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Recomposer utworzony dla okna Androida będzie teraz blokować tylko wywołania
withFrameNanoszamiast całej kompozycji, gdy otrzyma powiadomienie ON_STOP. Oznacza to, że okna powiązane z zatrzymanymi aktywnościami będą nadal ponownie komponowane w przypadku zmian danych, ale animacje lub inne wywołania funkcjiwithFrameNanosbędą blokowane. (Id9e7f, b/240975572)
Poprawki błędów
- Naprawianie potencjalnego zakleszczenia na liście zrzutów i mapie 5c1a425
- Wykonaj wywołania zwrotne dezaktywacji dla
LayoutNodeprzed usunięciem efektów 3784073 - Naprawianie zmienionych flag w przypadku ponownie uruchomionych funkcji Lambda ea81df9
- Naprawianie regresji edycji na żywo w przypadku komponentów z węzłami 73fd4d8
- ON_STOP powinien wstrzymywać transmisje zegara klatek zamiast kompozycji ae276f1
- Unieważnianie zakresów
SnapshotStateObserverw przypadku niezmienionych stanów pochodnych 84d9b1c - Naprawiono potencjalny zakleszczenie podczas usuwania kompozycji 28761fc
- Naprawianie przenoszenia treści do podkompozycji 92d4156
Wersja 1.5.0-alpha02
5 kwietnia 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.5.0-alpha02 Wersja 1.5.0-alpha02 zawiera te zatwierdzenia.
Nowe funkcje
- Operator
getValuew Kotlinie może być teraz kompozycyjny (f174f6e)
Poprawki błędów i ulepszenia wydajności
- Zastępowanie rekordów obiektów stanu rekordami stanu, do których nie ma dostępu (c986960)
- Podczas tworzenia grup używaj kompozytora o odpowiednim zakresie (9a5e5b6).
- Naprawiono problem z symbolem
endToMarker()podczas kończenia grup węzłów. (d71d980) - Użyj bieżącej grupy
SlotWriterdo sprawdzenia dezaktywacji (a0b518b) - Użyj
IdentityArraySetdo przechowywania unieważnień zrzutów (7f60cca) - Usuń znak
fillzSlotTable.moveSlotGapTo()i przenieś 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, które można przenosić (8676618)
- Zmniejsz przydziały dla obserwacji zrzutów (5bc535f)
Wersja 1.5.0-alpha01
22 marca 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.5.0-alpha01 Wersja 1.5.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
- Dodaje
Modifier.Node#coroutineScope, aby umożliwićModifier.Nodesuruchamianie korutyn (I76ef9). - Zezwól aplikacji
Modifier.Nodesna odczytywanieCompositionLocalsprzez zaimplementowanie interfejsuCompositionLocalConsumerModifierNode. (Ib44df)
Wersja 1.4
Wersja 1.4.3
3 maja 2023 r.
androidx.compose.runtime:runtime-*:1.4.3 jest publikowany bez zmian.
Wersja 1.4.2
19 kwietnia 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.4.2 Wersja 1.4.2 zawiera te zatwierdzenia.
Poprawki błędów
Naprawiono potencjalny zakleszczenie na liście zrzutów i mapie 2eb6570
Dodawanie treści do
SnapshotStateListlubSnapshotStateMapmoże spowodować zakleszczenie, jeśli modyfikacja jest wykonywana równocześnie z bezpośrednim zapisem w rekordzie stanu. W wyniku zmian wprowadzonych przez 93fcae828b, które wykorzystują bezpośrednie zapisywanie do zwalniania nieużywanych rekordów, prawdopodobieństwo wystąpienia tego problemu znacznie wzrosło.Blokady są teraz uporządkowane w taki sposób, że blokada migawki nigdy nie jest podejmowana, gdy jest aktywna blokada mapy lub listy.
Wersja 1.4.1
5 kwietnia 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.4.1 Wersja 1.4.1 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono błąd
endToMarker()podczas kończenia grup węzłów. d71d980
Wersja 1.4.0
22 marca 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.4.0 Wersja 1.4.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.3.0
- Użyj zainicjowanej wartości z
LiveDataw przypadku pierwszej kompozycji 3680e25 - Dodaj
ComposeNodeLifecycleCallback, aby obserwować cykl życia węzłów kompozycji. 8b6a258 - Dodawanie usługi
parameterTypesdo kontaComposableMethod7b6c7ad
Poprawki błędów i ulepszenia w zakresie wydajności
- Wyczyść oba indeksy zakresu w
SnapshotStateObserver29f4a3e - Dodaj grupy potrzebne w treści niepomijalnych funkcji lambda 7d06752
- Poprawienie charakterystyki odwołań do pamięci stanu zrzutu 93fcae8
- Usuwanie opakowania w przypadku lokalnych wyszukiwań w kompozycjach 0875717
- Używanie prawidłowego klucza w przypadku grup węzłów niepodlegających ponownemu użyciu 6388d8d
- Ochrona
SnapshotStateObserverprzed rekursywnym i równoczesnym stosowaniem 98cb6ba - Dodano sprawdzanie indeksu w metodzie „get” w
IdentityArraySet35a77d3 - Aktualizacja modułu tworzenia wiadomości w celu korzystania z rozszerzeń
ViewTreeLifecycleOwner21c2122 - Wysyłaj powiadomienia o zastosowaniu po zakończeniu klatki przez Recomposer. 98f2641
- Naprawiono błąd indeksu poza zakresem podczas anulowania ponownego komponowania 8f8656f
- Zawsze wymuszaj ponowne komponowanie, jeśli zmienią się nadrzędni dostawcy kompozycji 9526fcc
- Tolerancja ponownego komponowania w przypadku anulowanych zadań a55f7ed
- Ulepszono obsługę unieważnień w przypadku dużej liczby kompozytorów 9b7ed67
- Naprawianie generowania grup zamykających dla zwrotów innych niż lokalne b6f590c
Wersja 1.4.0-rc01
8 marca 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.4.0-rc01 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 opublikowane. Wersja 1.4.0-beta02 zawiera te zatwierdzenia.
Wersja 1.4.0-beta01
8 lutego 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.4.0-beta01 Wersja 1.4.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano
ComposeNodeLifecycleCallback, co umożliwia obserwowanie cyklu życia węzłów Compose (I3731b). - Dodano
@TestOnlydoComposer.disableSourceInformation(), ponieważ tę funkcję można bezpiecznie wywoływać tylko w teście. (I896c8)
Poprawki błędów
- Usuwanie boksu w lokalnych wyszukiwaniach kompozycji (62f66a)
- Poprawienie charakterystyki odwołań do pamięci w stanie 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 opublikowane. Wersja 1.4.0-alpha05 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Więcej typów i dopuszczalności wartości null dla funkcji wbudowanych i ukrytych (I24f91)
Wersja 1.4.0-alpha04
11 stycznia 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.4.0-alpha04 Wersja 1.4.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
TestMonotonicFrameClockużywa teraz prawidłowej adnotacji eksperymentalnej. (I95c9e)
Poprawki błędów
- Ochrona
SnapshotStateObserverprzed rekursywnym i równoczesnym stosowaniem (d902fb)
Wersja 1.4.0-alpha03
7 grudnia 2022 roku
Publikacja androidx.compose.runtime:runtime-*:1.4.0-alpha03 Wersja 1.4.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- dodanie nowej metody publicznej do klasy
ComposableMethodanalogicznej dojava.lang.reflect.Method#getParameterTypes()(Iab0c3);
Poprawki błędów
- Powiadomienia o zastosowaniu migawki są teraz wysyłane po zakończeniu wprowadzania zmian przez
Recomposer. (Iad6c0, b/222093277)
Wersja 1.4.0-alpha02
9 listopada 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.4.0-alpha02 Wersja 1.4.0-alpha02 zawiera te zatwierdzenia.
Wersja 1.4.0-alpha01
24 października 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.4.0-alpha01 Wersja 1.4.0-alpha01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
SnapshotStateListiSnapshotStateMapmają teraz odpowiednio wyraźne implementacjetoList()itoMap(). Te metody zwracają bieżącą zawartość bez kopiowania, ponieważ zwracają wewnętrzne niezmienne dane używane do przechowywania zawartości. Tej wartości można użyć np. do wygenerowania przepływu wartości za pomocą funkcjisnapshotFlowbez konieczności kopiowania danych. (Ica2bd)
Wersja 1.3
Wersja 1.3.3
11 stycznia 2023 r.
Publikacja androidx.compose.runtime:runtime-*:1.3.3 Wersja 1.3.3 zawiera te zatwierdzenia.
- Brak zmian od wersji 1.3.2
Wersja 1.3.2
7 grudnia 2022 roku
Publikacja androidx.compose.runtime:runtime-*:1.3.2 Wersja 1.3.2 zawiera te zatwierdzenia.
Poprawki błędów
- Zaktualizowano obsługę androidx.compose.ui w wersji 1.3.2
Wersja 1.3.1
9 listopada 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.3.1 Wersja 1.3.1 zawiera te zatwierdzenia.
Wersja 1.3.0
24 października 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.3.0 Wersja 1.3.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.2.0
Obsługa wyjątków / edycja na żywo
- Aby lepiej obsługiwać edycję na żywo, dodaliśmy interfejsy API umożliwiające obsługę wyjątków podczas komponowania.
- Obsługa błędów kompozycji podczas gorącego przeładowania
- Obsługa błędów edycji na żywo podczas zapisywania lub przywracania
Śledzenie składu
- Dodaliśmy interfejsy API śledzenia w czasie działania, aby obsługiwać nowe narzędzia do śledzenia kompozycji.
- Generowanie wywołań początkowych i końcowych zdarzeń śledzenia, które można łączyć
- Ponowne dodanie funkcji ComposerKt.traceEventStart(Int, String)
Interfejsy API do kompozycyjnego odbicia
- Dodaliśmy nowy interfejs API
ComposableMethod, który umożliwia bardziej niezawodne wywoływanie interfejsów API z możliwością komponowania na podstawie odbicia. - Przeniesienie invokeComposable do środowiska wykonawczego Compose
- Zmiana interfejsu API w celu wywoływania metody kompozycyjnej
Poprawki w czasie działania
- Naprawianie wadliwego testu zakresu dla tabeli slotów sprawdzającej znaczniki
- Zezwalanie na przenoszenie treści do i z SubcomposeLayout
- Naprawianie przenoszenia treści do nowych treści w kompozycji podrzędnej
System zrzutów
- System migawek został ulepszony pod względem zarządzania pamięcią, wydajności i dokładności.
- Optymalizacja usuwania zakresu w SnapshotStateObserver
- Usuwanie zagnieżdżonych zrzutów utworzonych na podstawie zrzutów przezroczystych
- Naprawiono sytuację wyścigu podczas odczytywania stanu z globalnej migawki
- Obsługa DerivedState w SnapshotStateObserver
- Zapobieganie usuwaniu stanu pochodnego z kompozycji, gdy jest on odczytywany w innych zakresach
- Używanie klasy IdentityArrayMap zamiast HashMap w DerivedState
- Aktualizowanie obserwatorów stanu pochodnego w celu używania wektora modyfikowalnego
- Aktualizacja czyszczenia stanu SnapshotStateObserver
- Zastąpienie SnapshotStateObserver.invalidated elementem ArraySet
- Naprawiono sytuację wyścigu podczas odczytywania stanu z globalnej migawki
- Naprawianie użycia nieaktualnego rekordu w obliczeniach haszu DerivedState
- Naprawianie sytuacji wyścigu podczas przesuwania globalnego zrzutu
- Przyspieszenie czyszczenia obserwacji zakresu w SnapshotStateObserver
Wersja 1.3.0-rc01
5 października 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.3.0-rc01 Wersja 1.3.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono
ArrayIndexOutOfBoundsExceptionpochodzące z tabeli slotów (b/249076084)
Wersja 1.3.0-beta03
21 września 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.3.0-beta03 Wersja 1.3.0-beta03 zawiera te zatwierdzenia.
Zmiana powodująca niezgodność w działaniu
- Parametry
rememberirememberCoroutineScopezostały zmienione nacrossinline. W przypadku wcześniejszych zwrotów zgłosi błąd zamiast zezwolić na wcześniejszy zwrot, co spowoduje zgłoszenie późniejszego błędu wewnętrznego. - Ta zmiana może spowodować zgłaszanie nowych błędów kompilatora, co będzie wymagać usunięcia z funkcji lambda przekazywanych do tych funkcji instrukcji return, które nie są lokalne. (Ibea62)
Wersja 1.3.0-beta02
7 września 2022 roku
Publikacja androidx.compose.runtime:runtime-*:1.3.0-beta02 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.
Publikacja androidx.compose.runtime:runtime-*:1.3.0-beta01 Wersja 1.3.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Do interfejsu
CompositionDatadodano metodęfind, która umożliwia narzędziom dla programistów korzystającym z tego interfejsu API szybkie znajdowanie podgrupy kompozycji na podstawie jej tożsamości. (I5794f)
Wersja 1.3.0-alpha03
10 sierpnia 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.3.0-alpha03 Wersja 1.3.0-alpha03 zawiera te zatwierdzenia.
Wersja 1.3.0-alpha02
27 lipca 2022 roku
Publikacja androidx.compose.runtime:runtime-*:1.3.0-alpha02 Wersja 1.3.0-alpha02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Ponownie dodano
ComposerKt.traceEventStart(Int, String)w celu zapewnienia zgodności wstecznej (I6e6de)
Wersja 1.3.0-alpha01
29 czerwca 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.3.0-alpha01 Wersja 1.3.0-alpha01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Przeniesienie funkcji narzędziowych do środowiska wykonawczego (I4f729)
Wersja 1.2
Wersja 1.2.1
10 sierpnia 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.2.1 Wersja 1.2.1 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono wyciek pamięci: usuwanie zagnieżdżonych zrzutów utworzonych z przezroczystych zrzutów b/239603305
Wersja 1.2.0
27 lipca 2022 roku
Publikacja androidx.compose.runtime:runtime-*:1.2.0 Wersja 1.2.0 zawiera te zatwierdzenia.
Ważne zmiany od 1.1.0
W wersji 1.2.0 środowiska wykonawczego Compose wprowadzono kilka funkcji i poprawiono wiele błędów. Najważniejszą nową funkcją było wprowadzenie
movableContentOfinterfejsu API, który umożliwia tworzenie złożonych interfejsów, np. przejść między elementami. Interfejs APImovableContentOfprzekształca funkcję lambda z możliwością komponowania w funkcję lambda, która przenosi swój stan i odpowiednie węzły do nowej lokalizacji, w której jest wywoływana. Gdy poprzednie połączenie opuści kompozycję, stan jest tymczasowo zachowywany. Jeśli do kompozycji dołączy nowe połączenie z funkcją lambda, stan i powiązane z nim węzły zostaną przeniesione do lokalizacji nowego połączenia. Jeśli nie dodasz nowego połączenia, stan zostanie trwale usunięty, a obserwatorzy pamięci otrzymają powiadomienie.Jeśli
movableContentOflambda jest wywoływana wiele razy w tej samej kompozycji, dla każdego wywołania tworzony jest nowy stan i węzły. Gdy wywołania opuszczają kompozycję, a nowe wywołania do niej wchodzą, stan jest przenoszony z pierwszych wywołań opuszczających kompozycję do wywołań wchodzących w kolejności, w jakiej są wywoływane. Wszystkie stany nieodebrane przez nowe połączenia są trwale usuwane.Oprócz tego i kilku innych nowych funkcji poświęciliśmy dużo czasu na ustabilizowanie systemu stanu środowiska wykonawczego i zrzutów. Usunięto różne wycieki pamięci i zoptymalizowano ścieżki kodu.
Poniżej znajdziesz podsumowanie zmian:
Nowe funkcje w 1.2
- Dodawanie eksperymentalnego zdjęcia unsafeEnter/Leave
- Dodanie eksperymentalnego interfejsu API Snapshot.asContextElement
- Wprowadzenie Snapshot.withoutReadObservation
- Zezwalanie na przenoszenie stanu w kompozycji
- Śledzenie ponownych kompozycji w Compose
Skuteczność w 1.2
- Zwiększanie skuteczności kompozycji w lokalnych wynikach wyszukiwania
- Profile podstawowe dla funkcji Compose powinny być tworzone na podstawie testów porównawczych
Poprawki błędów w 1.2
- Usuwanie informacji o śledzeniu z zakresów ponownego komponowania wersji
- Zapobieganie usuwaniu stanu pochodnego z kompozycji, gdy jest on odczytywany w innych zakresach
- Używanie bardziej wydajnej funkcji removeScope() w SnapshotStateObserver
- Usuwanie zależności stanu pochodnego w kompozycji
- Naprawianie zmiany wartości currentCompositeKeyHash po wewnętrznej rekompozycji w treściach ruchomych
- Zwalnianie miejsca po unieważnionych kompozycjach podczas usuwania
- Rozwiązywanie problemów z odczytem stanu pochodnego podczas ponownego komponowania
- Naprawiono wyciek pamięci podczas obserwowania obiektów stanu pochodnego
- Ujednolicenie klucza kompozytowego movableContent
- Naprawiono problem, w którym kompozytor ulegał awarii
- Zapewnienie, że wymuszone unieważnienie grupy wymusza ponowne komponowanie
- Naprawianie błędu polegającego na przywracaniu w niewłaściwej kolejności funkcji rememberSaveable z danymi wejściowymi
Wersja 1.2.0-rc03
29 czerwca 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.2.0-rc03 Wersja 1.2.0-rc03 zawiera te zatwierdzenia.
Poprawki błędów
- Obserwacje stanu pochodnego były wcześniej bezwarunkowo usuwane z zakresu ponownego komponowania i kompozycji, co powodowało przerwanie innych zakresów, które mogły nadal obserwować stan pochodny. Ta zmiana usuwa wystąpienia stanu pochodnego tylko wtedy, gdy nie są już obserwowane przez inne zakresy. (b/236618362)
Wersja 1.2.0-rc02
22 czerwca 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.2.0-rc02 Wersja 1.2.0-rc02 zawiera te zatwierdzenia.
Wersja 1.2.0-rc01
15 czerwca 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.2.0-rc01 Wersja 1.2.0-rc01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Interfejsy w bibliotekach Compose są teraz tworzone przy użyciu domyślnych metod interfejsu jdk8 (I5bcf1).
Wersja 1.2.0-beta03
1 czerwca 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.2.0-beta03 Wersja 1.2.0-beta03 zawiera te zatwierdzenia.
Wersja 1.2.0-beta02
18 maja 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.2.0-beta02 Wersja 1.2.0-beta02 zawiera te zmiany.
Wersja 1.2.0-beta01
11 maja 2022 roku
Publikacja androidx.compose.runtime:runtime-*:1.2.0-beta01 Wersja 1.2.0-beta01 zawiera te zatwierdzenia.
Nowe funkcje
- To pierwsza wersja beta 1.2.
Zmiany w interfejsie API
- Dodano eksperymentalną funkcję
Snapshot.unsafeEnter/unsafeLeave(I108f3) - Dodano eksperymentalny interfejs API
Snapshot.asContextElement()(Iff072) - Adnotacji
@ComposableTargeti adnotacji oznaczonych symbolem@ComposableTargetMarkermożna teraz używać w zakresie pliku za pomocą prefiksu@file. Użycie adnotacji docelowej w zakresie pliku spowoduje, że kompilator założy, że wszystkie funkcje kompozycyjne w pliku są przeznaczone do powiązanego narzędzia do stosowania. Na przykład użycie@file:UiComposabledeklaruje, że wszystkie funkcje@Composablesą kierowane na aplikację Compose UI. Funkcja, która ma być kierowana na innego aplikatora, musi jawnie podać adnotację znacznika docelowego dla wybranego aplikatora. (I40804)
Wersja 1.2.0-alpha08
20 kwietnia 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.2.0-alpha08 Wersja 1.2.0-alpha08 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano
TracingInProgressdo interfejsuCompositionTracer. (Ic6f12) - Dodawanie
recomposeScopeIdentitydo usługi Composer (I0c873) - Ograniczone interfejsy API śledzenia (Composer.setTracer) do
OptIn(InternalComposeTracingApi). (I9187f) - Dodano
ResuableContentHost, co pozwala lepiej kontrolować okres istnienia stanu utworzonego dla treści wielokrotnego użytku. Jeśli na przykład podkompozycja nie jest tymczasowo używana, można ją dezaktywować. Spowoduje to zapomnienie całego zapamiętanego stanu w kompozycji, co może wywołać np. wszystkie efekty jednorazowe. (I2c0f2, b/220322704)
Wersja 1.2.0-alpha07
6 kwietnia 2022 roku
Publikacja androidx.compose.runtime:runtime-*:1.2.0-alpha07 Wersja 1.2.0-alpha07 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano nową funkcję
Snapshot.withoutReadObservation { ... }. Umożliwia użytkownikom uruchamianie przekazanej funkcji lambda bez subskrybowania zmian wartości stanu odczytanych w tym bloku. Może to być przydatne w przypadkach, gdy chcesz korzystać z bezpiecznych dla wątków odczytów i zapisów opartych na zrzutach, ale chcesz mieć możliwość odczytania wartości bez powodowania niepotrzebnego ponownego komponowania lub ponownego pomiaru. (I9f365, b/214054486)
Wersja 1.2.0-alpha06
23 marca 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.2.0-alpha06 Wersja 1.2.0-alpha06 zawiera te zmiany.
Wersja 1.2.0-alpha05
9 marca 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.2.0-alpha05 Wersja 1.2.0-alpha05 zawiera te zmiany.
Wkład zewnętrzny
- Zaktualizowano do korzystania ze współprogramów Kotlinx w wersji 1.6.0 (I3366d)
Wersja 1.2.0-alpha04
23 lutego 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.2.0-alpha04 Wersja 1.2.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
Dodano adnotacje
ComposableTarget,ComposableTargetMarkeriComposableOpenTarget, które umożliwiają zgłaszanie w czasie kompilowania sytuacji, w których funkcja typu „composable” jest wywoływana z kierowaniem na applier, do którego nie została zaprojektowana.W większości przypadków adnotacje te mogą być wywnioskowane przez wtyczkę kompilatora Compose, więc bezpośrednie używanie tych adnotacji powinno być rzadkie . Nie można wywnioskować przypadków tworzenia i używania niestandardowego aplikatora, abstrakcyjnych funkcji kompozycyjnych (takich jak metody interfejsu), pól lub zmiennych globalnych, które są kompozycyjnymi wyrażeniami lambda (zmienne lokalne i parametry są wywnioskowane), ani podczas używania
ComposeNodelub powiązanych funkcji kompozycyjnych.W przypadku niestandardowych funkcji stosujących funkcje kompozycyjne, które wywołują
ComposeNodelubReusableComposeNode, należy dodać adnotacjęCompoableTargetdo funkcji i wszystkich typów parametrów lambda kompozycyjnych. Zalecamy jednak utworzenie adnotacji oznaczonej symbolemComposableTargetMarker, a następnie użycie jej zamiast symboluComposableTarget. Adnotacja kompozycyjna oznaczona symbolemComposableTargetMarkerjest równoważna adnotacjiComposbleTargetz pełną i jednoznaczną nazwą klasy atrybutu jako parametrem stosującym. Przykład użycia elementuComposableTargetMarkerznajdziesz w sekcjianroidx.compose.ui.UiComposable. (I38f11)
Wersja 1.2.0-alpha03
9 lutego 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.2.0-alpha03 Wersja 1.2.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
Dodano funkcję
movableContentOf, która przekształca funkcję lambda z kompozycją w funkcję lambda przenoszącą jej stan i odpowiednie węzły do nowej lokalizacji, w której jest wywoływana. Gdy poprzednie połączenie opuści kompozycję, stan jest tymczasowo zachowywany, a jeśli do kompozycji dołączy nowe połączenie z funkcją Lambda, stan i powiązane węzły zostaną przeniesione do lokalizacji nowego połączenia. Jeśli nie zostanie dodane nowe połączenie, stan zostanie trwale usunięty, a obserwatorzy zostaną o tym powiadomieni.Jeśli funkcja lambda
movableContentOfjest wywoływana wiele razy w tej samej kompozycji, dla każdego wywołania tworzony jest nowy stan i węzły. Gdy wywołania opuszczają kompozycję, a nowe wywołania do niej wchodzą, stan jest przenoszony z pierwszych wywołań, które opuszczają kompozycję, do wywołań, które do niej wchodzą, w kolejności, w jakiej są wywoływane. Wszystkie stany nieużywane przez nowe połączenia są trwale usuwane. (Ib4850)Dodaliśmy do kompozycji interfejs API śledzenia, aby narzędzia mogły zapewniać bardziej szczegółowe śledzenie funkcji typu „composable”. Kompilator generuje teraz wywołania interfejsu API śledzenia, które zawierają informacje o źródle. (Ib0eb5)
Aby usunąć te wywołania i powiązane z nimi informacje o źródle z kompilacji do publikacji, dodaj tę regułę Proguard:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }Dodaj
InternalComposeScope, co umożliwi narzędziom identyfikowanie funkcji kompozycyjnych podczas ponownego komponowania. (I07a3f)
Wersja 1.2.0-alpha02
26 stycznia 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.2.0-alpha02 Wersja 1.2.0-alpha02 zawiera te zmiany.
Wersja 1.2.0-alpha01
12 stycznia 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.2.0-alpha01 Wersja 1.2.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano pole
identitydoCompositionDatana potrzeby generowania niezmiennych identyfikatorów w narzędziu Layout Inspector. (Ic116e)
Aktualizacje zależności
- Teraz zależy od Kotlin
1.6.10.
Wersja 1.1
Wersja 1.1.1
23 lutego 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.1.1 Wersja 1.1.1 zawiera te zatwierdzenia.
Poprawki błędów
- Poprawka
NullPointerExceptionwandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList(aosp/1947059, b/206677462) - Rozwiązaliśmy problem z awarią spowodowaną przez zawartość schowka podczas odczytu ze schowka na urządzeniu z Androidem. (I06020, b/197769306)
- Poprawiono RTL w
LazyVerticalGrid(aosp/1931080, b/207510535)
Wersja 1.1.0
9 lutego 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.1.0 Wersja 1.1.0 zawiera te zmiany.
Ważne zmiany 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 rozszerzą swój obszar układu, aby spełnić wytyczne dotyczące ułatwień dostępu w interfejsie Material w zakresie rozmiaru obszaru klikalnego. Na przykład docelowy element dotykowy przycisku rozszerzy się do minimalnego rozmiaru
48x48dp, nawet jeśli ustawisz mniejszy rozmiar przycisku. Dzięki temu biblioteka Compose Material zachowuje się tak samo jak komponenty Material Design, co zapewnia spójne działanie w przypadku łączenia widoków i elementów Compose. Ta zmiana zapewnia też, że podczas tworzenia interfejsu za pomocą komponentów Compose Material spełnione zostaną minimalne wymagania dotyczące dostępności docelowych elementów dotykowych. - Stabilna obsługa kolumny nawigacji
- Przekształcenie kilku eksperymentalnych interfejsów API w stabilne
- Obsługa nowszych wersji języka Kotlin
Wersja 1.1.0-rc03
26 stycznia 2022 r.
Publikacja androidx.compose.runtime:runtime-*:1.1.0-rc03 Wersja 1.1.0-rc03 zawiera te zatwierdzenia.
Poprawki błędów
- Zaktualizowano, aby obsługiwać Compose Material
1.1.0-rc03
Wersja 1.1.0-rc01
15 grudnia 2021 roku
Publikacja androidx.compose.runtime:runtime-*:1.1.0-rc01 Wersja 1.1.0-rc01 zawiera te zmiany.
Wersja 1.1.0-beta04
1 grudnia 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.1.0-beta04 Wersja 1.1.0-beta04 zawiera te zmiany.
Nowe funkcje
- Zaktualizowano, aby była zgodna z Kotlinem w wersji
1.6.0
Wersja 1.1.0-beta03
17 listopada 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.1.0-beta03 Wersja 1.1.0-beta03 zawiera te zmiany.
Wersja 1.1.0-beta02
3 listopada 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.1.0-beta02 Wersja 1.1.0-beta02 zawiera te zmiany.
Zmiany w interfejsie API
- Kod migawki 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 r.
Publikacja androidx.compose.runtime:runtime-*:1.1.0-beta01 Wersja 1.1.0-beta01 zawiera te zmiany.
Wersja 1.1.0-alpha06
13 października 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.1.0-alpha06 Wersja 1.1.0-alpha06 zawiera te zmiany.
Zmiany w interfejsie API
- Usunięto
InternalCompilerApiz metod kompozytora, które muszą być wywoływane w różnych modułach (I1aa0b). Recomposer.statezostało wycofane i zastąpione przezRecomposer.currentState, aby zmienić jego typ na StateFlow (Ic2ab3, b/197773820).
Wersja 1.1.0-alpha05
29 września 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.1.0-alpha05 Wersja 1.1.0-alpha05 zawiera te zmiany.
Wersja 1.1.0-alpha04
15 września 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.1.0-alpha04 Wersja 1.1.0-alpha04 zawiera te zmiany.
Wersja 1.1.0-alpha03
1 września 2021 roku
Publikacja androidx.compose.runtime:runtime-*:1.1.0-alpha03 Wersja 1.1.0-alpha03 zawiera te zmiany.
Nowe funkcje
- Kompilator Compose obsługuje teraz starsze wersje środowiska wykonawczego Compose (1.0). Przed tą zmianą kompilator Compose był zgodny tylko ze środowiskiem wykonawczym Compose w tej samej lub nowszej wersji. Po tej zmianie kompilator Compose jest zgodny ze starszą wersją środowiska wykonawczego Compose (1.0). (aosp/1796968)
- Zaktualizowano bibliotekę Compose
1.1.0-alpha03, aby była zależna od języka Kotlin1.5.30. (I74545)
Wersja 1.1.0-alpha02
18 sierpnia 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.1.0-alpha02 Wersja 1.1.0-alpha02 zawiera te zmiany.
Wersja 1.1.0-alpha01
4 sierpnia 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.1.0-alpha01 Wersja 1.1.0-alpha01 zawiera te zmiany.
Wersja 1.0
Wersja 1.0.5
3 listopada 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.5 Wersja 1.0.5 zawiera te zatwierdzenia.
Poprawki błędów
- Rozwiązaliśmy problem z awarią śledzenia instancji derivedStateOf. (aosp/1792247)
Wersja 1.0.4
13 października 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.4 Wersja 1.0.4 zawiera te zatwierdzenia.
Aktualizacje zależności
- Zaktualizowano, aby zależał od wersji
1.5.31języka Kotlin
Wersja 1.0.3
29 września 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.3 Wersja 1.0.3 zawiera te zatwierdzenia.
Aktualizacje zależności
- Zaktualizowano, aby zależał od wersji
1.5.30języka Kotlin
Wersja 1.0.2
1 września 2021 roku
Publikacja androidx.compose.runtime:runtime-*:1.0.2 Wersja 1.0.2 zawiera te zatwierdzenia.
Zaktualizowano, aby obsługiwać wersję 1.0.2 Compose. Compose 1.0.2 jest nadal zgodny z Kotlinem 1.5.21.
Wersja 1.0.1
4 sierpnia 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.1 Wersja 1.0.1 zawiera te zatwierdzenia.
Aktualizacje zależności
- Zaktualizowano zależność od Kotlina
1.5.21.
Wersja 1.0.0
28 lipca 2021 roku
Publikacja androidx.compose.runtime:runtime-*:1.0.0 Wersja 1.0.0 zawiera te zatwierdzenia.
Główne funkcje wersji 1.0.0
To pierwsza stabilna wersja Compose. Więcej informacji znajdziesz na oficjalnym blogu Compose Release.
Znane problemy
Jeśli używasz Android Studio Bumblebee Canary 4 lub AGP
7.1.0-alpha04/7.1.0-alpha05, może wystąpić ten błąd:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"Aby rozwiązać ten problem, tymczasowo zwiększ wartość parametru minSdkVersion do 24 lub wyższej w pliku
build.gradle. Ten problem zostanie rozwiązany w kolejnej wersji Androida Studio Bumblebee i wtyczki Androida do obsługi Gradle7.1. (b/194289155)
Wersja 1.0.0-rc02
14 lipca 2021 roku
Publikacja androidx.compose.runtime:runtime-*:1.0.0-rc02 Wersja 1.0.0-rc02 zawiera te zatwierdzenia.
- Naprawiliśmy warunki wyścigu w obserwatorze SnapshotStateObserver, które powodowały sporadyczne wyjątki NullPointerException. (aosp/1763445, aosp/1758105, b/192677711)
- Rozwiązaliśmy problemy z migawkami czasu działania, które powodowały awarie
java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied. (b/193006595, b/192570897)
Wersja 1.0.0-rc01
1 lipca 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-rc01 Wersja 1.0.0-rc01 zawiera te zatwierdzenia.
Wersja 1.0.0-beta09
16 czerwca 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-beta09 Wersja 1.0.0-beta09 zawiera te zatwierdzenia.
Dodane reguły profilu
Ta wersja dodaje reguły profilu do tych modułów kompozycji (I14ed6):
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
Czym są reguły profilu?
Reguły profilu dla biblioteki są określone w pliku tekstowym
baseline-prof.txtznajdującym się w katalogusrc/mainlub w odpowiednim katalogu. Plik zawiera regułę w każdym wierszu. W tym przypadku reguła jest wzorcem dopasowywanym do metod lub klas w bibliotece. Składnia tych reguł jest nadzbiorem formatu profilu ART czytelnego dla człowieka, który jest używany podczas korzystania zadb shell profman --dump-classes-and-methods .... Te reguły przyjmują jedną z 2 form, aby kierować reklamy na metody lub klasy.Reguła metody będzie mieć ten wzorzec:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>Reguła klasy będzie miała następujący wzorzec:
<CLASS_DESCRIPTOR>W tym przypadku
<FLAGS>to co najmniej jeden z tych znaków:H,SiP. Wskazuje on, czy ta metoda powinna być oznaczona jako „Hot”, „Startup” lub „Post Startup”.Symbol
<CLASS_DESCRIPTOR>to deskryptor klasy, do której należy docelowa metoda. Na przykład klasaandroidx.compose.runtime.SlotTablebędzie miała deskryptorLandroidx/compose/runtime/SlotTable;.<METHOD_SIGNATURE>to sygnatura metody, która zawiera jej nazwę, typy parametrów i typy zwracanych wartości. Na przykład metodafun isPlaced(): BooleanwLayoutNodema sygnaturęisPlaced()Z.Wzorce mogą zawierać symbole wieloznaczne (
**,*i?), dzięki czemu jedna reguła może obejmować wiele metod lub klas.
Do czego służą reguły?
Metoda z flagą
Hoznacza, że jest to „gorąca” metoda, która powinna zostać skompilowana z wyprzedzeniem.Metoda oznaczona flagą
Sjest wywoływana podczas uruchamiania i powinna być skompilowana z wyprzedzeniem, aby uniknąć kosztów kompilacji i interpretacji w momencie uruchamiania.Metoda oznaczona flagą
Pjest wywoływana po uruchomieniu.Klasa obecna w tym pliku wskazuje, że jest używana podczas uruchamiania i powinna być wstępnie przydzielona w stercie, aby uniknąć kosztów ładowania klasy.
Jak to działa?
- Biblioteki mogą definiować te reguły, które będą pakowane w artefakty AAR. Gdy aplikacja zawierająca te artefakty zostanie skompilowana, reguły zostaną połączone, a połączone reguły zostaną użyte do utworzenia kompaktowego binarnego profilu ART, który jest specyficzny dla aplikacji. ART może następnie użyć tego profilu, gdy aplikacja jest instalowana na urządzeniach, aby skompilować z wyprzedzeniem określony podzbiór aplikacji i poprawić jej wydajność, zwłaszcza podczas pierwszego uruchomienia. Pamiętaj, że nie będzie to miało wpływu na aplikacje, które można debugować.
Wersja 1.0.0-beta08
2 czerwca 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-beta08 Wersja 1.0.0-beta08 zawiera te zatwierdzenia.
Zmiany w interfejsie API
State<T>to terazState<out T>(I69049)ControlledCompositionZmiana interfejsu API umożliwiająca ponowne komponowanie zmian w jednym przebiegu. (Iaafd1, b/184173932)
Wersja 1.0.0-beta07
18 maja 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-beta07 Wersja 1.0.0-beta07 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano nowe interfejsy API kompilatora Compose, które umożliwiają usuwanie informacji o źródle wygenerowanych przez kompilator podczas minifikacji kodu źródłowego. (Ia34e6)
Wprowadza
ReusableContent, który przy zmianie klucza będzie próbował ponownie wykorzystać węzły w swojej treści zamiast je zastępować. Gdy klucz zostanie zmieniony, poprzednie wartości w tabeli slotów dla treści są ignorowane z wyjątkiem wygenerowanych węzłów i wartości użytych do ich zaktualizowania.Wprowadza
ReusableComposeNode, która ponownie wykorzystuje wyemitowany węzeł zamiast go zastępować, jak to ma miejsce w przypadkuComposeNode. (I1dd86)@ComposeCompilerApinie jest już@RequiresOptIn(Iab690)
Poprawki błędów
- Komponenty LazyColumn i LazyRow będą teraz utrzymywać aktywność (nie będą usuwać) maksymalnie 2 wcześniej widocznych elementów, nawet jeśli zostały już przewinięte. Dzięki temu komponent może ponownie wykorzystywać aktywne podkompozycje, gdy będziemy musieli utworzyć nowy element, co poprawia wydajność przewijania. (Ie5555)
Wersja 1.0.0-beta06
5 maja 2021 roku
Publikacja androidx.compose.runtime:runtime-*:1.0.0-beta06 Wersja 1.0.0-beta06 zawiera te zatwierdzenia.
Zmiany w interfejsie API
@ComposeCompilerApinie jest już@RequiresOptIn(Iab690)
Wersja 1.0.0-beta05
21 kwietnia 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-beta05 Wersja 1.0.0-beta05 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Usunięto
@InternalComposeApiw 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.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-beta04 Wersja 1.0.0-beta04 zawiera te zatwierdzenia.
Poprawki błędów
Przed tą zmianą lokalne funkcje kompozycyjne można było pominąć na podstawie ich parametrów. Po tej zmianie żadne lokalne funkcje kompozycyjne nie będą pomijane. Ta zmiana została wprowadzona, ponieważ funkcje lokalne często i zgodnie z oczekiwaniami przechwytują parametry z funkcji nadrzędnej, a ich pomijanie jest częstym źródłem błędów.
Podsumowując, rozważmy przykład:
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }Przed tą zmianą funkcja
ShowCountzawsze była pomijana, nawet po zaktualizowaniu parametrucount. Ta informacja jest nieaktualna. (I5648a)Rozwiązaliśmy problem z przywracaniem przez funkcję
rememberSaveable()starej wartości w przypadku używania jej z parametrami wejściowymi (I1b110, b/182403380).
Wersja 1.0.0-beta03
24 marca 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-beta03 Wersja 1.0.0-beta03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Interfejs
DefaultMonotonicFrameClockzostał wycofany. Wywołanie funkcjiwithFrameNanoslubRecomposer.runRecomposeAndApplyChangesbezMonotonicFrameClockspowoduje teraz zgłoszenie błęduIllegalStateException. (I4eb0d)
Wersja 1.0.0-beta02
10 marca 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-beta02 Wersja 1.0.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Wymuszanie ograniczeń dotyczących publicznego korzystania z eksperymentalnych interfejsów API (I6aa29, b/174531520)
- Poprawka błędu
rememberSaveable { mutableStateOf(0) }, który występował w miejscu docelowym navigation-compose. (I1312b, b/180042685, b/180701630)
Wersja 1.0.0-beta01
24 lutego 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-beta01 Wersja 1.0.0-beta01 zawiera te zatwierdzenia.
To pierwsza wersja Compose 1.0.0 Beta.
Zmiany w interfejsie API
- Dodano
Recomposer.runRecomposeConcurrentlyAndApplyChangeseksperymentalny interfejs API do ponownego komponowania unieważnionych kompozycji poza główną pętlą klatek. (I342d0) - Wszystkie funkcje kompozycyjne oznaczone adnotacją @ReadOnlyComposable są teraz weryfikowane w czasie kompilacji, aby mieć pewność, że wywołują tylko inne funkcje kompozycyjne oznaczone adnotacją @ReadOnlyComposable (I58961).
defaultFactoryw przypadkucompositionLocalOfistaticCompositionLocalOfjest teraz wymagane zamiast opcjonalnego.Ta zmiana usuwa potencjalny błąd typu w przypadku typów, które nie mogą mieć wartości null, a dla których nie podano domyślnej funkcji fabrycznej. Wcześniej w przypadku typu, który nie dopuszcza wartości null, zwracana była wartość null.
W przypadku typów dopuszczających wartość null rozważ podanie wartości
{ null }jako domyślnej wartości fabrycznej.Nie zalecamy używania zmiennych lokalnych z typami, które nie dopuszczają wartości null, chyba że można podać rozsądną wartość domyślną. Jeśli nie ma sensownej wartości domyślnej, funkcja lambda
defaultFactorypowinna zgłosić wyjątek. Jednak zgłoszenie wyjątku oznacza, że konsumenci lokalnego będą mieli niejawną zależność od jego dostarczenia, która nie jest wymuszana przez system typów. (Ifbd2a)Wycofane symbole zostały usunięte z środowiska wykonawczego Compose (I3252c).
Wycofany element
emptyContent()został usunięty. Użyj w zamian zasady{}. (Idb33f, b/179432510)Nazwa Providers została zmieniona na CompositionLocalProvider
- Konstruktor Composition nie akceptuje już parametru key i został wycofany.
- currentCompositeKeyHash został przekształcony w właściwość najwyższego poziomu typu „composable”, a nie w funkcję najwyższego poziomu typu „composable”.
- Klasy CompositionData i CompositionGroup zostały przeniesione do przestrzeni nazw androidx.compose.runtime.tooling.
- Funkcja ComposableLambda stała się interfejsem zamiast klasy konkretnej i nie ma już parametrów typu.
- ComposableLambdaN stał się interfejsem zamiast klasy konkretnej i nie ma już parametrów typu.
- Funkcja snapshotFlow została przeniesiona do przestrzeni nazw androidx.compose.runtime
- metoda scalania SnapshotMutationPolicy nie jest już eksperymentalna;
- Usunięto funkcję clearRoots najwyższego poziomu @TestOnly. Nie jest już potrzebne.
- Funkcje keySourceInfoOf i resetSourceInfo zostały usunięte. Nie są już potrzebne.
- Funkcja Composer.collectKeySourceInformation została usunięta. Nie jest już potrzebne.
- Usunęliśmy metody isJoinedKey, joinedKeyLeft i joinedKeyRight. Nie są już potrzebne.
- Różne interfejsy API najwyższego poziomu zostały przeniesione i zreorganizowane w różnych plikach. Ze względu na semantykę klasy plików w Kotlinie spowoduje to utratę zgodności binarnej, ale nie źródłowej, więc nie powinno stanowić problemu dla większości użytkowników.
- (I99b7d, b/177245490)
SnapshotStateObserver nie jest już eksperymentalny (Id2e6a)
Usunięto niektóre wcześniej wycofane interfejsy API (Ice5da, b/178633932)
Wprowadziliśmy te zmiany w interfejsie Material API:
- Dodano parametr contentPadding do komponentów TopAppBar i BottomAppBar, aby umożliwić dostosowywanie domyślnego dopełnienia.
- Zmieniono kolejność parametrów w komponencie BackdropScaffold, aby była zgodna z wytycznymi interfejsu API, zgodnie z którymi parametry wymagane powinny występować przed parametrami opcjonalnymi.
- Parametr
iconw elemencie BottomNavigationItem został przeniesiony i jest teraz po parametrachselectedionClick. - Zmieniono nazwę parametru
alwaysShowLabelsw elemencie BottomNavigationItem naalwaysShowLabel. - Zmieniliśmy nazwy parametrów
bodyContentw kilku komponentach nacontent. - Zmieniono kolejność parametrów w
ButtonDefaults.buttonColors(). Pamiętaj, że typ parametrów nie uległ zmianie, więc nie spowoduje to błędu w kodzie. Upewnij się, że używasz parametrów nazwanych lub ręcznie zaktualizuj kolejność, w przeciwnym razie kod nie będzie działać tak jak wcześniej. - Dodano parametr
secondaryVariantdo elementudarkColors(). Ten kolor jest zwykle taki sam jaksecondaryw ciemnym motywie, ale dodajemy go, aby zapewnić spójność i umożliwić dalsze dostosowywanie. - Usunięto ElevationDefaults i animateElevation() z publicznego interfejsu API, ponieważ nie były one powszechnie używane ani przydatne.
- Zmieniono nazwę
onValueChangeEndwSlidernaonValueChangeFinishedi ustawiono ją jako dopuszczającą wartość null. - Zmieniono nazwę parametru
textwSnackbarnacontent, aby zachować spójność. - Dodano parametr
contentPaddingdoDropdownMenuItem, aby umożliwić dostosowywanie domyślnego dopełnienia, acontentstał się rozszerzeniemRowScope. - Zmieniono nazwę
ModalDrawerLayoutnaModalDrawer. - Zmieniono nazwę
BottomDrawerLayoutnaBottomDrawer. - (I1cc66)
Wersja 1.0.0-alpha12
10 lutego 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-alpha12 Wersja 1.0.0-alpha12 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Usunięto obsługę ViewGroups z UiApplier. Usunięto wycofane funkcje emitView. (Ifb214)
- Zmiana nazwy CompositionReference na CompositionContext (I53fcb)
- Funkcja ComponentActivity.setContent została przeniesiona do pakietu androidx.activity.compose.setContent w module androidx.activity:activity-compose. (Icf416)
- Interfejs Snapshot API został zaktualizowany, aby był bardziej zgodny z wytycznymi dotyczącymi interfejsów API, a także aby ukryć klasy implementacji wewnętrznej przed publicznym interfejsem API. (Id9e32)
- Zmieniono nazwy elementów Ambients, aby pasowały do zmiany nazwy Ambient -> CompositionLocal. Wcześniej zmienne środowiskowe miały nazwy AmbientFoo, a teraz zmienne CompositionLocals mają nazwy LocalFoo. (I2d55d)
- Zmiana nazwy Ambient na CompositionLocal, a ambientOf / staticAmbientOf na compositionLocalOf / staticCompositionLocalOf. Ta zmiana ma na celu wyjaśnienie przeznaczenia CompositionLocal: mechanizmu dostarczania i pobierania wartości lokalnych dla kompozycji. Instancje CompositionLocal powinny mieć prefiks
Local, np. val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6) - Funkcje takeMutableSnapshot i takeSnapshot zostały przeniesione i są teraz metodami towarzyszącymi funkcji Snapshot. (I91f19)
@ComposableContractzostał wycofany na rzecz 3 bardziej szczegółowych adnotacji.@ComposableContract(restartable = false)jest teraz@NonRestartableComposable@ComposableContract(readonly = true)jest teraz@ReadOnlyComposable@ComposableContract(preventCapture = true)jest teraz@DisallowComposableCalls@ComposableContract(tracked = true)został usunięty. (I60a9d)Narzędzia emptyContent() i (@Composable () -> Unit).orEmpty() zostały wycofane, ponieważ nie mają już pozytywnego wpływu na wydajność ani wartości (I0484d).
snapshotFlowiwithMutableSnapshotnie są już eksperymentalne (I6a45f)Recomposery można już zamknąć. Zamknięte kompozytory będą kontynuować kompozycję, dopóki nie zostaną ukończone podrzędne korutyny kompozycji. Funkcja Recomposer.shutDown została zmieniona na cancel, aby odróżnić ją od funkcji close. (Ib6d76)
Artefakt
compose:runtime-dispatchzostał wycofany. Klasa MonotonicFrameClock znajduje się teraz w pakiecie compose:runtime, a klasa AndroidUiDispatcher – w pakiecie compose:ui. (Ib5c36)Interfejs API, na którym działa wtyczka kompilatora Compose, został przekształcony tak, aby używać interfejsu zamiast konkretnej klasy. Interfejs nie używa już też parametru typu.
Jest to zmiana wewnętrzna, która nie powinna wpływać na zgodność kodu źródłowego, ale jest zmianą powodującą niezgodność binarną. (I3b922, b/169406779)
Wprowadzono SnapshotMutableState (Icfd03)
Zmieniono nazwę DisposableEffectDisposable na DisposaleEffectResult (Ica7c6)
Usunięto Recomposer.current(). [Abstract]ComposeView domyślnie tworzy teraz leniwie Recomposery o zakresie okna, które są sterowane przez ViewTreeLifecycleOwner dla okna. Rekompozycja i tyki animacji oparte na withFrameNanos są wstrzymywane, gdy cykl życia hosta jest zatrzymany. (I38e11)
Recomposer.runningRecomposers udostępnia teraz globalny StateFlow tylko do odczytu RecomposerInfo, który umożliwia obserwowanie stanu trwającej kompozycji w procesie. Zalecamy używanie tego interfejsu API zamiast Recomposer.current(), który jest obecnie wycofany. (If8ebe)
Typ DisposableEffectDisposable został zmieniony na DisposaleEffectResult (I3ea68)
Wersja 1.0.0-alpha11
28 stycznia 2021 roku
Publikacja androidx.compose.runtime:runtime-*:1.0.0-alpha11 Wersja 1.0.0-alpha11 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Funkcje onCommit, onDispose i onActive zostały wycofane na rzecz interfejsów SideEffect i DisposableEffect API (If760e).
- Interfejs API emit() i wszystkie jego przeciążenia zostały wycofane i zmieniono ich nazwę na ComposeNode. Interfejsy API są identyczne, tylko mają inną nazwę, aby zachować zgodność z konwencjami nazewnictwa Compose (I4137b).
- Funkcje invalidate i compositionReference() zostały wycofane na rzecz funkcji currentRecomposeScope i rememberCompositionReference. (I583a8)
RememberObserver zastępuje CompositionLifecycleObserver, który jest obecnie wycofany.
RememberObserverzastępujeCompositionLifecycleObserverze zmodyfikowaną semantyką i zmienionymi nazwami metod. Przejście na nowy interfejs API można przeprowadzić mechanicznie w przypadku obiektów, które są zapamiętywane tylko raz. Jest to zalecana praktyka. Jeśli jednak odwołanie zostało zapamiętane w kompozycji więcej niż raz, funkcjaonRememberedjest wywoływana dla każdego odwołania, a funkcjaonEnterjest wywoływana tylko raz.onEnterbyła wywoływana wielokrotnie, jeśli obiekt był używany w kompozycjach podrzędnych, np.WithConstraintsiScaffold, co sprawiało, że pojedyncze wywołanieonEnterbyło niewiarygodne i zostało usunięte w przypadkuRememberObserver.RememberObserverdodajeonAbandoned, które jest wywoływane, jeśli instancjaRememberObserverjest zwracana z wywołania zwrotnego przekazanego doremember, ale nie została zapamiętana w stanie kompozycji, a więc nigdy nie zostanie wywołana funkcjaonRemembered. Może to nastąpić, jeśli wyjątek zakończy kompozycję przed jej ukończeniem lub kompozycja zostanie odrzucona, ponieważ stan, dla którego była tworzona, nie jest już aktualny lub nie jest już potrzebny. Jeśli instancjaRememberObserverpo pojedynczej rekomendacji referencyjnej powyżej śledzi zasób zewnętrzny, zarównoonForgotten, jak ionAbandonedwskazują, że zasób nie jest już potrzebny. Jeśli obiekt śledzi rozpoczęcie pracy lub zasoby przydzielone wonRemembered, można zignorowaćonAbandoned, ponieważ nie zostanie on wywołany, jeśli wywołany zostanieonRemembered. (I02c36)Nie oznaczaj funkcji
collectAsState()jako wbudowanych (Ia73e4)
Poprawki błędów
- Funkcja WithConstraints została przekształcona w BoxWithConstraints i przeniesiona do foundation.layout. (I9420b, b/173387208)
- Używanie TestCoroutineDispatcher w testach (I532b6)
Wersja 1.0.0-alpha10
13 stycznia 2021 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-alpha10 Wersja 1.0.0-alpha10 zawiera te zatwierdzenia.
Zmiana powodująca niezgodność
Restrukturyzacja wewnętrznego interfejsu API kompilatora umożliwia grupowanie zmian w węzłach wygenerowanych w wyniku kompozycji w fazie „zastosuj zmiany” kompozycji po zakończeniu wszystkich funkcji
@Composable.Jest to zmiana powodująca niezgodność wsteczną, która może wpłynąć na kod aplikacji, ponieważ węzły nie są już dostępne w ramach wewnętrznych i eksperymentalnych interfejsów API, dopóki zmiany nie zostaną zastosowane. Zwykle można to obejść, otaczając kod z takimi zależnościami funkcją kompozycyjną
SideEffect, aby odłożyć wykonanie kodu do momentu utworzenia i zainicjowania węzłów. (I018da)
Zmiany w interfejsie API
- Dodaliśmy możliwość śledzenia, czy narzędzie do ponownego komponowania zastosowało zmiany. (I1b3e2)
Rozszerzenie interfejsów API [Abstract]ComposeView, aby umożliwić ponowne wykorzystanie widoków opartych na Compose, usuwanie ich kompozycji i ponowne tworzenie w późniejszym czasie. Dodaj interfejsy API do instalowania i odkrywania kompozytorów i odwołań do kompozycji w zakresie okna, aby tworzyć kompozycje podrzędne.
Dodaj ViewCompositionStrategy, aby skonfigurować strategię usuwania kompozycji [Abstract]ComposeViews; domyślne działanie to usuwanie po odłączeniu od okna. (I860ab)
Poprawki błędów
- Recomposer udostępnia teraz Flow swojego bieżącego stanu, co umożliwia monitorowanie jego aktywności i aktywności powiązanych efektów. (Ifb2b9)
- Do zdarzenia keyEvent można teraz uzyskać dostęp za pomocą keyEvent.nativeKeyEvent (I87c57, b/173086397).
Wersja 1.0.0-alpha09
16 grudnia 2020 roku
Publikacja androidx.compose.runtime:runtime-*:1.0.0-alpha09 Wersja 1.0.0-alpha09 zawiera te zatwierdzenia.
Zmiany w interfejsie API
Usunęliśmy z publicznego interfejsu API klasy SlotTable, SlotReader i SlotWriter. Wcześniej były one oznaczane jako InternalComposeAPI. Teraz są one wewnętrzne w module tworzenia.
Dodano CompositionData i CompositionGroup jako zamienniki interfejsu API ui-tooling, które służą do wyodrębniania informacji o kompozycji. Są one publiczne, ale nie są przeznaczone do użytku poza interfejsem ui-tooling API, ponieważ dostarczają surowych informacji, które interpretuje ten interfejs (I31a9c).
Klasa Applier nie jest już traktowana jako (Id85b0).
Interfejs
Applierzostał zmieniony, aby uprościć tworzenie drzew od dołu do góry, a nie od góry do dołu.Metoda
insert()została zmieniona nainsertTopDown().Dodaliśmy nową metodę:
insertBottomUp().Aplikator wstawia węzły do edytowanego drzewa za pomocą funkcji
insertTopDown()lubinsertBottomUp()w zależności od tego, która z nich jest skuteczniejsza.Niektóre drzewa, np.
LayoutNodeiView, znacznie łatwiej jest budować od dołu niż od góry. Przed wprowadzeniem tej zmiany do wdrożenia podejścia od dołu do góry wymagany był stos wstawek, który należało skopiować do każdego narzędzia, które potrzebowało konstrukcji od dołu do góry, aby zapewnić wydajność. Po wprowadzeniu tej zmianyApplierzastępujeinsertBottomUp(), aby budować drzewo od dołu do góry, ainsertTopDown(), aby budować drzewo od góry do dołu. (Icbdc2)Compose obsługuje funkcje pobierające właściwości, które mogą wywoływać funkcje kompozycyjne. Obsługa tej funkcji nie zostanie wycofana, ale zmieni się składnia deklarowania funkcji pobierającej właściwość jako @Composable.
Obecnie przestarzała składnia polegała na dodaniu adnotacji do samej usługi:
@Composable val someProperty: Int get() = ...Prawidłowa składnia w tym przypadku to dodanie adnotacji do funkcji pobierającej właściwość:
val someProperty: Int @Composable get() = ...Obie składnie będą działać przez pewien czas, ale starsza, wycofana składnia ostatecznie spowoduje błąd kompilacji. (Id9197)
Poprawki błędów
- AndroidOwner made internal (Ibcad0, b/170296980)
- Metoda subcomposeInto(LayoutNode) została oznaczona jako wewnętrzna (Id724a)
Wersja 1.0.0-alpha08
2 grudnia 2020 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-alpha08 Wersja 1.0.0-alpha08 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano sprawdzanie lint dla nazw i pozycji parametrów funkcji kompozycyjnej lambda, aby zapewnić spójność ze wskazówkami dotyczącymi Compose.
Zgodnie z kontrolą i wskazówkami dotyczącymi lintowania niektóre interfejsy API zostały przeniesione z użyciem
childrenjako nazwy funkcji lambda na końcu nacontent. (Iec48e) - Recomposer nie akceptuje już elementu EmbeddingContext; wymagane zależności harmonogramowania są uzyskiwane z elementu effectCoroutineContext. Interfejs FrameManager został wycofany. Integracje platform powinny inicjować własną obsługę globalnych migawek. (I02369)
- Funkcja RestorableStateHolder.withRestorableState została zmieniona na RestorableStateProvider (I66640).
Poprawki błędów
- Wycofaliśmy Ambients z sufiksem
Ambienti zastąpiliśmy je nowymi właściwościami z prefiksem Ambient, zgodnie z innymi Ambientami i wytycznymi interfejsu Compose API. (I33440) - Usuwanie starego modułu ui-test i jego stubów (I3a7cb)
Wersja 1.0.0-alpha07
11 listopada 2020 roku
Publikacja androidx.compose.runtime:runtime-*:1.0.0-alpha07 Wersja 1.0.0-alpha07 zawiera te zatwierdzenia.
Nowe funkcje
Zmiany w interfejsie API
- Adnotacja
@UnionTypezostała wycofana (I57cde) - Funkcja provideDefault została dodana jako alternatywa dla funkcji provide w przypadku dostarczania danych o środowisku. Można jej używać do określania wartości środowiska, które będą ustawiane tylko wtedy, gdy nie ma jeszcze podanej wartości środowiska. (Id6635, b/171024925)
- Aby zachować spójność z interfejsami SideEffect i DisposableEffect API, zmieniliśmy nazwę LaunchedTask na LaunchedEffect. Aby zachęcać do stosowania sprawdzonych metod, nie zezwalamy na używanie funkcji LaunchedEffect bez parametrów subject. (Ifd3d4)
- Klasa Applier ma teraz wywołania zwrotne onBeginChanges/onEndChanges, które są wywoływane, gdy klasa Composer zaczyna/kończy stosowanie zmian w drzewie. W razie potrzeby można ich używać do zarządzania zasobami w pakietach. (Icf476)
- Recomposer wymaga teraz elementu CoroutineContext podczas tworzenia (Ic4610)
- Zmiany w wewnętrznej implementacji SlotTable, które nie powinny mieć wpływu na publiczny interfejs API. (If9828)
- Usunęliśmy wycofane adaptery rxjava2, które nie uwzględniały wartości początkowej (Idb72f).
Poprawki błędów
- foundation.Text został wycofany i zastąpiony przez material.Text. Podstawowy interfejs API tekstu bez opinii, który nie wykorzystuje wartości z motywu, znajdziesz w artykule androidx.compose.foundation.BasicText. (If64cb)
- Komponent BaseTextField został wycofany. Zamiast tego użyj BasicTextField. (I896eb)
- Kilka symboli związanych z układem zostało przeniesionych z pakietu androidx.compose.ui do androidx.compose.layout.ui. (I0fa98, b/170475424)
Wkład zewnętrzny
- Dodano moduł
runtime-rxjava3do paska planowania wpisów. Usługa podobna do:runtime-rxjava2(I02cbf)
Wersja 1.0.0-alpha06
28 października 2020 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-alpha06 Wersja 1.0.0-alpha06 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Recomposer jest teraz elementem CompositionReference i prawidłowym elementem nadrzędnym kompozycji. Jawny Recomposer jest teraz wymagany w mniejszej liczbie miejsc. (I4036f)
- Dodano odpowiednik interfejsu DisposableEffect do SideEffect, który pełni rolę funkcji onCommit z parametrami, ale wymaga funkcji onDispose.
- Dodano interfejs API rememberUpdatedState, który umożliwia publikowanie danych z rekompozycji w trwających lub długotrwałych procesach, takich jak DisposableEffect lub LaunchedTask.
- (Id50b9)
- Klasa MutableVector implementuje teraz interfejs RandomAccess (I85d73, b/170461551)
- Dodano funkcję kompozycyjną SideEffect do stosowania efektów ubocznych kompozycji do obiektów zarządzanych przez kompozycję. Funkcja SideEffect ma zastąpić funkcję kompozycyjną onCommit. (Ia77c2)
- Nowy eksperymentalny interfejs API RestorableStateHolder. Umożliwia zapisanie stanu zdefiniowanego za pomocą [savedInstanceState] i [rememberSavedInstanceState] dla poddrzewa przed jego usunięciem, aby można było je ponownie utworzyć w przyszłości z przywróconym stanem. (I66884, b/166586419)
Poprawki błędów
- Włączanie przejść w ComposeTestRule; usuwanie opcji włączania migającego kursora z ComposeTestRule. (If0de3)
Wersja 1.0.0-alpha05
14 października 2020 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-alpha05 Wersja 1.0.0-alpha05 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Experimental Modifier.pointerInput suspending input modifier (Ia77d2)
- Wydajność przewijania w przypadku komponentów LazyColumn i LazyRow jest większa, ponieważ podczas każdego przewijania wykonuje się mniej pracy w podkompozycji. Do klasy Composition dodano nową metodę hasInvalidations(). Metoda hasPendingChanges() z klasy Recomposer została zmieniona na hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371).
- Dodano interfejs API produceState do uruchamiania w kompozycji korutyn, które aktualizują pojedynczą wartość
State<T>w czasie (Id4a57). - Zmiana nazwy launchInComposition na LaunchedTask, aby była zgodna ze wskazówkami dotyczącymi interfejsu Compose API (I99a8e).
- Kolejność wywołań place() w niestandardowych układach określa teraz kolejność rysowania elementów podrzędnych (Ibc9f6).
Wersja 1.0.0-alpha04
1 października 2020 roku
Publikacja androidx.compose.runtime:runtime-*:1.0.0-alpha04 Wersja 1.0.0-alpha04 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano OwnerScope, aby umożliwić zbieranie zakresów obserwacji układu i rysowania, gdy nie są już one ważne. (Ic4cf8)
- Dodano interfejs derivedStateOf API do tworzenia obiektów State na podstawie obliczeń, które mogą odczytywać inne obiekty State (i z nich pochodzić) (If758b).
- Dodano interfejs TestOnly API dla SnapshotStateObserver (I6e2a9)
Poprawki błędów
- Klasa foundation.Box została wycofana. Zamiast niego użyj foundation.layout.Box. (Ie5950, b/167680279)
Wersja 1.0.0-alpha03
16 września 2020 roku
Publikacja androidx.compose.runtime:runtime-*:1.0.0-alpha03 Wersja 1.0.0-alpha03 zawiera te zatwierdzenia.
Zmiany w interfejsie API
CompositionCoroutineScopenie implementuje jużMonotonicFrameClock. Osoby wywołujące funkcjęwithFrameNanospowinny jawnie zaimportować funkcję najwyższego poziomu. (Icb642, b/166778123)
Poprawki błędów
- Globalne funkcje testowe, takie jak
onNodelubwaitForIdle, są teraz wycofane. Przejdź na ich nowe odpowiedniki zdefiniowane w ComposeTestRule (I7f45a). launchInCompositionnie uruchamia już korutyn bez wysyłania (Ief6af, b/166486000)
Wersja 1.0.0-alpha02
2 września 2020 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-alpha02 Wersja 1.0.0-alpha02 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano interfejsy API
snapshotFlowiwithMutableSnapshotdo wykorzystywania i generowania zmian danych migawki. (I3e722) Konwencja wywoływania funkcji kompozycyjnych uległa zmianie. Jest to binarna zmiana powodująca niezgodność. Aby biblioteki działały z tą wersją wtyczki kompilatora Compose, należy je ponownie skompilować.
Ta zmiana nie powoduje zmiany na poziomie źródła, ponieważ jedyne interfejsy API, które uległy zmianie, to interfejsy API kompilatora, które wymagają wyraźnej zgody użytkownika. (I7afd2, b/158123185)
Usunięto metody planowania z klasy EmbeddingContext (I7b9be)
Funkcja onPreCommit została wycofana. Funkcja onCommit ma teraz działanie funkcji onPreCommit.
Funkcje onCommit i onActive są teraz wykonywane w tej samej ramce choreografa, w której wprowadzane są zmiany w kompozycji, a nie na początku następnej ramki choreografa. (I70403)
Wersja 1.0.0-alpha01
26 sierpnia 2020 r.
Publikacja androidx.compose.runtime:runtime-*:1.0.0-alpha01 Wersja 1.0.0-alpha01 zawiera te zatwierdzenia.
Wersja 0.1.0-dev
Wersja 0.1.0-dev17
19 sierpnia 2020 r.
Publikacja androidx.compose.runtime:runtime-*:0.1.0-dev17 Wersja 0.1.0-dev17 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Niestandardowe funkcje emitujące mogą teraz deklarować, że co najmniej 1 z ich setterów można pominąć i ponownie skomponować niezależnie od funkcji emitującej. (Ibbd13)
Usunięto wycofane wywołania FrameManager.
Wewnętrzne interfejsy API do tworzenia zostały zmienione, aby zmniejszyć obciążenie związane ze śledzeniem obiektów stanu, takich jak
mutableStateof()(I80ba6).Funkcja
state { ... }została wycofana na rzecz jawnych wywołań funkcjiremember { mutableStateOf(...) }, w celu uniknięcia wątpliwości. Zmniejsza to ogólną powierzchnię interfejsu API i liczbę koncepcji zarządzania stanem oraz pasuje do wzorcaby mutableStateOf()delegowania właściwości klasy. (Ia5727)Funkcja Flow.collectAsState określa teraz domyślny dyspozytor na podstawie kompozycji, a nie domyślnie Dispatchers.Main. (I9c1d9)
Naprawiono awarię, która występowała, gdy w pętli for użyto czegoś, co zapisuje stan. Teraz ten sam klucz w metodzie savedInstanceState() jest dozwolony. Interfejs API UiSavedStateRegistry został dostosowany do tego nowego wymagania (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561).
Poprawki błędów
emitViewzostał wycofany. Jeśli to możliwe, używajAndroidViewdo emitowania widoków w Compose. Pamiętaj, że bezpośrednie tworzenie widoków i grup widoków nie będzie w przyszłości obsługiwane, chyba że będą one elementami końcowymi w drzewie kompozycji. W takim przypadku można to osiągnąć za pomocą elementu AndroidView. (I29b1e, b/163871221)
Wersja 0.1.0-dev16
5 sierpnia 2020 r.
Publikacja androidx.compose.runtime:runtime-*:0.1.0-dev16 Wersja 0.1.0-dev16 zawiera te zatwierdzenia.
Zmiany w interfejsie API
Domyślne zasady modyfikacji w przypadku
mutableStateOf(),ambientOf()isavedInstanceStateOf()zostały zmienione nastructuralEqualityPolicy()zamiastreferentialEqualityPolicy().Domyślna metoda określania, czy nowa wartość przypisana do instancji
mutableStateOf()jest uznawana za zmianę, to teraz==zamiast===.Więcej informacji znajdziesz na stronie https://kotlinlang.org/docs/reference/equality.html
Przeglądarki
ambientOf()isavedInstanceStateOf()używają w swoich implementacjach funkcjimutableStateOf(), więc zostały zmienione, aby były zgodne z funkcjąmutableStateOf().Używanie równości strukturalnej jest bardziej zgodne z oczekiwaniami deweloperów.
Na przykład
val state = mutableStateOf(1f)a następnie
state.value = 1fnie będzie już traktowane jako zmiana w
state, a użyciestatepodczas tworzenia nie będzie wymagało ponownego komponowania.Jest to zmiana powodująca niezgodność, ale w większości przypadków (np. podczas korzystania z klas, które nie zastępują
equals()) nie będzie miała zauważalnego wpływu na aplikację.Klasy, które zastępują
equals(), np. klasydata, mogą odnotować spadek wydajności, ponieważ ich metodyequals()są teraz domyślnie wywoływane po przypisaniu domutableStateOf().Poprzednie działanie można przywrócić, dodając do wywołań funkcji
mutableStateOf(),ambientOf()isavedInstanceStateOf()parametr zasadpolicy = referentialEqualityPolicy(). (Ic21a7)RowiColumnto teraz funkcje wbudowane, które znacznie zmniejszają obciążenie związane z ich używaniem. (I75c10)
Poprawki błędów
- Metoda setViewContent została wycofana. Zamiast niej należy używać metody setContent. (I7e497, b/160335130)
Dodano MonotonicFrameAnimationClock, który umożliwia używanie MonotonicFrameClock jako AnimationClockObservable, aby wypełnić lukę między nowymi zegarami opartymi na korutynach a interfejsami API, które nadal używają starych zegarów opartych na wywołaniach zwrotnych.
Odpowiednikiem klasy ManualAnimationClock w przypadku klasy MonotonicFrameClock jest teraz klasa ManualFrameClock. (I111c7, b/161247083)
Funkcja Modifier.stateDraggable została całkowicie przekształcona i zmieniono jej nazwę na Modifier.swipeable. Wprowadzono nową klasę SwipeableState, a klasy DrawerState i BottomDrawerState zostały zmodyfikowane tak, aby z niej dziedziczyć. [Modal/Bottom]DrawerLayout nie przyjmuje już parametru onStateChange. (I72332, b/148023068)
Metoda Modifier.plus została wycofana. Zamiast niej używaj metody Modifier.then. Słowo „then” (wtedy) silniej sygnalizuje kolejność, a także uniemożliwia wpisanie znaku
Modifier.padding().background() + anotherModifier, który przerywa łańcuch i utrudnia czytanie (Iedd58, b/161529964).Dodano SubcomposeLayout. Jest to element podstawowy niskiego poziomu, który umożliwia tworzenie elementów podrzędnych podczas pomiaru, jeśli chcemy użyć wartości dostępnych dopiero później podczas pomiaru do tworzenia poddrzewa. Na przykład WithConstraints nie jest zaimplementowany przy użyciu SubcomposeLayout. (I25cc8)
Komponent Material FilledTextField został zmieniony na TextField, a komponent TextField został zmieniony na BaseTextField, aby ułatwić odkrywanie i używanie najprostszego interfejsu API (Ia6242, b/155482676).
Funkcja Modifier.drawBackground została zmieniona na Modifier.background (I13677)
Wersja 0.1.0-dev15
22 lipca 2020 r.
Publikacja androidx.compose.runtime:runtime-*:0.1.0-dev15 Wersja 0.1.0-dev15 zawiera te zatwierdzenia.
Aktualizacja zależności
- Aby używać wersji
0.1.0-dev15biblioteki Compose, musisz zaktualizować zależności zgodnie z nowymi fragmentami kodu podanymi powyżej w sekcji Deklarowanie zależności.
Zmiany w interfejsie API
Adnotacja
@Modelzostała wycofana. Używaj zamiast nich state i mutableStateOf. Decyzja o wycofaniu została podjęta po dokładnym rozważeniu wszystkich argumentów.Uzasadnienie
Uzasadnienie obejmuje m.in.:
- Zmniejsza obszar interfejsu API i liczbę koncepcji, których musimy nauczyć
- Jest bardziej zbliżony do innych porównywalnych zestawów narzędzi (Swift UI, React, Flutter).
- Decyzja odwracalna. Zawsze możemy później przywrócić
@Model. - Usuwa rzadkie przypadki użycia i trudne pytania dotyczące konfigurowania usługi
@Modeljako kwestie, którymi musimy się zająć. @Modelklasy danych, equals, hashcode itp.- Jak mogę sprawić, aby niektóre usługi były „obserwowane”, a inne nie?
- Jak określić, czy w obserwacji ma być używane równanie strukturalne czy referencyjne?
- Zmniejsza „magię” w systemie. Zmniejszyłoby to prawdopodobieństwo, że ktoś uzna system za bardziej inteligentny, niż jest w rzeczywistości (np. że wie, jak porównać listy).
- Ułatwia intuicyjne określanie szczegółowości obserwacji.
- Ulepsza możliwość refaktoryzacji ze zmiennej -> właściwości w klasie
- Może otworzyć możliwości ręcznego dostosowywania optymalizacji do poszczególnych stanów.
- Jest bardziej zgodny z pozostałą częścią ekosystemu i zmniejsza niejednoznaczność w odniesieniu do stanu niezmiennego lub „przyjmowania stanu zmiennego”.
Notatki dotyczące migracji
Prawie wszystkie dotychczasowe zastosowania symbolu
@Modelmożna łatwo przekształcić na jeden z 2 sposobów. W przykładzie poniżej znajduje się klasa@Modelz 2 właściwościami, która jest używana w funkcji kompozycyjnej.@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }Alternatywa 1: użyj
State<OriginalClass>i utwórz kopie.To podejście jest łatwiejsze dzięki klasom danych w języku Kotlin. Wszystkie poprzednie właściwości
varprzekształć w właściwościvalklasy danych, a potem używajstatezamiastrememberi przypisuj wartość stanu do sklonowanych kopii oryginału za pomocą metody wygodycopy(...)klasy danych.Należy pamiętać, że to podejście działa tylko wtedy, gdy jedyne zmiany w tej klasie zostały wprowadzone w tym samym zakresie, w którym utworzono instancję
State. Jeśli klasa zmienia się wewnętrznie poza zakresem użycia i polegasz na obserwacji tej zmiany, użyj następnego podejścia.data class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, onXChange={ p = p.copy(x=it) } onYChange={ p = p.copy(y=it) } ) }Alternatywa 2. Użyj funkcji mutableStateOf i delegatów właściwości
Ułatwiają to delegaty właściwości Kotlin i interfejs
mutableStateOfAPI, który umożliwia tworzenie instancji MutableState poza kompozycją. Zastąp wszystkie właściwościvaroryginalnej klasy właściwościamivar, które mająmutableStateOfjako delegata właściwości. Ma to tę zaletę, że sposób użycia klasy nie ulegnie zmianie, a zmieni się tylko jej wewnętrzna implementacja. Zachowanie nie jest jednak całkowicie identyczne z pierwotnym przykładem, ponieważ każda właściwość jest teraz obserwowana lub subskrybowana indywidualnie, więc ponowne kompozycje, które zobaczysz po tej zmianie, mogą być bardziej ograniczone (co jest korzystne).class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }(I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)
Zmienia strategię generowania kodu kompilatora Compose. Przed zmianą kompilator Compose przekształcał wywołania funkcji kompozycyjnych. W związku z tą zmianą przekształcamy teraz treść funkcji typu „composable”, a miejsce wywołania pozostawiamy w większości przypadków bez zmian.
Oznacza to, że większość logiki komunikującej się z czasem działania funkcji kompozycji jest wykonywana na początku treści funkcji, a nie w miejscu wywołania.
Powinna to być zmiana zgodna ze źródłem we wszystkich zastosowaniach funkcji Compose. Większość użytkowników Compose nie będzie musiała aktualizować żadnego kodu w wyniku tej zmiany.
Aby to umożliwić, zmieniliśmy sygnaturę JVM wszystkich funkcji kompozycyjnych. Funkcja typu „composable” przyjmująca 1 parametr jest przekształcana w funkcję przyjmującą 3 parametry. Dodatkowe parametry to kompozytor, liczba całkowita „key” i liczba całkowita maski bitowej używana do propagowania metadanych przez wywołania.
Compose przekształca teraz argumenty domyślne w funkcję typu „composable”. Nie wprowadza to dodatkowego syntetycznego przeciążenia domyślnego samej funkcji, więc w wyniku tej zmiany będzie zdefiniowanych mniej funkcji.
Znane celowe zmiany w działaniu wynikające z tej aktualizacji:
- Niektóre połączenia będą pomijane, choć wcześniej nie były.
- Wyrażenia kompozycyjne w wyrażeniach argumentów domyślnych są teraz prawidłowo subskrybowane i obsługiwane.
W ramach tych prac wprowadziliśmy kilka optymalizacji: 1. Wyniki porównań parametrów są propagowane w grafie wywołań do innych funkcji kompozycyjnych. Spowoduje to mniejszą liczbę porównań w czasie działania, zmniejszenie rozmiaru tabeli slotów, a także częstsze pomijanie funkcji kompozycyjnych, które wcześniej nie były pomijane. Parametry, które w czasie kompilowania są uznawane za „statyczne”, nie są już porównywane ani przechowywane w czasie działania programu. Zmniejsza to liczbę porównań i rozmiar tabeli slotów. 3. Struktura przepływu sterowania w treści funkcji służy do minimalizowania liczby generowanych grup. Zmniejsza to rozmiar tabeli przedziałów i wymaga mniej pracy od środowiska wykonawczego. Nieużywane parametry wysyłania i odbioru funkcji nie są uwzględniane przy określaniu, czy funkcję można pominąć, jeśli nie są używane w treści funkcji.
Większość zmian powodujących niezgodność dotyczyła interfejsów API, które są bezpośrednio używane przez kompilator. Typowe użycie funkcji Compose nie będzie miało na nie wpływu: 1. Usunięto Composer::startExpr 2. Usunięto Composer::endExpr 3. Funkcja Composer::call została wycofana. Usunięto przeciążenia funkcji
key, które nie przyjmują argumentów o zmiennej liczbie. Od tej pory używaj wersjivararg. 5. Adnotacja Pivotal została wycofana. Użyjkeyjako zamiennika. 6. Funkcja ScopeUpdateScope::updateScope została zmieniona tak, aby oczekiwała funkcji Function3 zamiast Function1. 7. Funkcje restartableFunction i restartableFunctionN zostały zaktualizowane, aby zawierały dodatkowe parametry czasu kompilacji (I60756, b/143464846).Dodano funkcje sortWith i removeRange do klasy MutableVector (Icccf7)
Dodano domyślne implementacje metod dla CompositionLifecycleObserver (I24289)
Klasa Applier wymaga teraz metody clear() do usuwania kompozycji (Ibe697)
Dodano funkcję asMutableList() do klasy MutableVector, aby można było przekazywać ją do publicznego interfejsu API bez konieczności kopiowania całej listy. (I298df)
Dodano funkcję rememberCoroutineScope(), aby uzyskać zarządzany element CoroutineScope w kompozycji do uruchamiania zadań w odpowiedzi na zdarzenia. (I0e264)
MutableVector to nowa kolekcja, która nie implementuje żadnego standardowego interfejsu Collection. Ta kolekcja zapewnia szybkość kosztem innych wymagań i jest przeznaczona wyłącznie do użytku wewnętrznego. (I8ebd6)
Tymczasowo usunęliśmy
StableMutableListiStableMutableMap, aby uniknąć problemu w wersji Kotlin, której wymaga Compose. Te interfejsy zostaną przywrócone po zaktualizowaniu biblioteki Compose do wersji języka Kotlin, w której ten problem nie występuje.SnapshotStateListiSnapshotStateMapsą teraz publiczne, ale zostaną wycofane, gdy przywrócimyStableMutableListiStableMutableMap. (Ia7769)dodanie funkcji najwyższego poziomu withFrameNanos do określania czasu animacji (Ie34c5);
Adnotacja @Untracked została wycofana. Zastąp adnotacją @ComposableContract(tracked=false) (Id211e)
Funkcja RestartableFunction i powiązane z nią interfejsy API zostały zmienione na ComposableLambda itp. Te interfejsy API były kierowane tylko na kompilator, więc nie powinno to mieć wpływu na zgodność na poziomie źródła. Zmiana nazwy została wprowadzona głównie po to, aby lepiej komunikować, co ta klasa robi, gdy pojawia się w śladach stosu (I7eb25).
Adnotacja @Composable nie jest już prawidłowa w przypadku klas (Ia5f02)
Ambient<T>ma teraz adnotację @Stable zamiast @Immutable (I0b4bb)Przed tą zmianą wtyczka kompilatora Compose w nietrywialny sposób przechwytywała wywołania konstruktorów w funkcji @Composable, jeśli występował błąd (I5205a, b/158123804).
Funkcja kompozycyjna Recompose nie jest już przydatną abstrakcją. Większość rekompozycji powinna następować w wyniku przypisań MutableState. W innych przypadkach zalecamy użycie funkcji
invalidate, aby wywołać ponowne utworzenie bieżącego zakresu. (Ifc992)Obserwacja nie jest już przydatną abstrakcją. Jeśli chcesz ją powielić, jej implementację można powielić, tworząc funkcję typu „composable”, która wykonuje kompozycyjny parametr lambda. Na przykład
@Composable fun Observe(body: @Composable () -> Unit) = body()(I40d37)Adnotacja @Direct została wycofana na rzecz @ComposableContract(restartable=false) (If4708)
Dodano adapter dla niedawno wprowadzonego StateFlow, który umożliwia wstępne wypełnianie wartości początkowej, dzięki czemu zwracany stan nie może mieć wartości null (I61dd8, b/156233789).
Dodaliśmy adapter do Flow. Przykład użycia: val value by flow.collectAsState() (If2198, b/153375923)
[Mutable]State property delegate operators moved to extensions to support Kotlin 1.4 property delegate optimizations. Aby nadal używać funkcji
by state { ... }lubby mutableStateOf(...), wywołujący muszą dodać importy. (I5312c)Klasa androidx.compose.ViewComposer została przeniesiona do androidx.ui.node.UiComposer. Klasa androidx.compose.Emittable została usunięta. Było to zbędne w przypadku ComponentNode. androidx.compose.ViewAdapters zostało usunięte. Nie są już obsługiwane. Funkcja Compose.composeInto została wycofana. Użyj w zamian zasady
setContentlubsetViewContent. Metoda Compose.disposeComposition została wycofana. Zamiast tego użyj metodydisposena obiekcieCompositionzwróconym przezsetContent. Funkcja androidx.compose.Compose.subcomposeInto została przeniesiona do androidx.ui.core.subcomposeInto. Funkcja ComponentNode#emitInsertAt została zmieniona na ComponentNode#insertAt. Funkcja ComponentNode#emitRemoveAt została zmieniona na ComponentNode#removeAt. Funkcja ComponentNode#emitMode została zmieniona na ComponentNode#move (Idef00).Zmieniliśmy flagę
ComposeFlags.COMPOSER_PARAMnatrue, co spowoduje zmianę strategii generowania kodu w przypadku wtyczki do tworzenia. W uproszczeniu powoduje to generowanie funkcji z adnotacją @Composable z dodatkowym parametrem syntetycznym, który jest przekazywany do kolejnych wywołań funkcji z adnotacją @Composable, aby środowisko wykonawcze mogło prawidłowo zarządzać wykonaniem. Jest to istotna zmiana binarna, która jednak powinna zachować zgodność na poziomie źródła we wszystkich dozwolonych przypadkach użycia funkcji Compose. (I7971c)Zmiany powodujące niezgodność w interfejsie ambients API. Szczegółowe informacje znajdziesz w logu i
Ambient<T>dokumentacji (I4c7ee, b/143769776).Dodano ui-livedata – nowy artefakt z adapterem LiveData. Przykład użycia: val value by liveData.observeAsState() (Ie9e8c, b/150465596)
Adaptery Rx bez wyraźnej wartości początkowej są wycofywane. Używanie wartości null nie zawsze jest najlepszym ustawieniem domyślnym, np. w przypadku listy lepiej jest zacząć od emptyList() lub innego rozsądnego ustawienia domyślnego (I00025, b/161348384).
Dodano ui-rxjava2 – nowy artefakt z adapterami dla RxJava2. Przykład użycia: val value by observable.subscribeAsState() (Ifab4b, b/153369097)
savedInstanceState()można teraz używać z typami dopuszczającymi wartość null (I6847f, b/153532190).Nowe funkcje listSaver() i mapSaver(), które ułatwiają pisanie niestandardowych obiektów Saver (I8cf68, b/152331508).
Nowe funkcje: savedInstanceState() i rememberSavedInstanceState(). Są podobne do funkcji state() i remember(), ale mają wbudowaną obsługę stanu zapisanej instancji (If1987, b/152025209).
Poprawki błędów
runOnIdleComposezmienił(a) nazwę narunOnIdle(I83607)- Udostępniono eksperymentalny interfejs API LayoutNode (I4f2e9)
- Interfejsy androidx.ui.foundation.TextFieldValue i androidx.ui.input.EditorValue zostały wycofane. Elementy kompozycyjne TextField, FilledTextField i CoreTextField, które używają tego typu, również zostały wycofane. Zamiast tego używaj androidx.ui.input.TextFieldValue (I4066d, b/155211005)
- Usunięto wycofany interfejs DrawBackground API na rzecz interfejsów drawBackground API w rozszerzeniu Modifier. Przebudowano implementacje kolorów, pędzli i malowania tła, aby zmniejszyć liczbę ścieżek kodu, a także usunąć wymaganie tworzenia modyfikatora w ramach kompozycji. (I0343a)
- Zaktualizowane interfejsy API Compose wyższego poziomu, które udostępniają Canvas, aby zamiast tego udostępniać CanvasScope. Dzięki temu konsumenci nie muszą utrzymywać własnych obiektów Paint. Użytkownicy, którzy nadal potrzebują dostępu do elementu Canvas, mogą użyć metody drawCanvas rozszerzenia, która zapewnia wywołanie zwrotne do wydawania poleceń rysowania za pomocą bazowego elementu Canvas. (I80afd)
- Zmieniono interfejs API lambda końcowego WithConstraints. Zamiast 2 parametrów ma teraz zakres odbiorcy, który oprócz ograniczeń i kierunku układu udostępnia właściwości minWidth, maxWidth, minHeight i maxHeight w jednostkach dp (I91b9a, b/149979702).
- Dodano modyfikator dopełnienia symetrycznego. (I39840)
- Zaktualizowano funkcje wrapContentWidth i wrapContentHeight, aby oczekiwały wyrównania w pionie lub poziomie, a nie dowolnego wyrównania. Modyfikator grawitacji został zaktualizowany, aby akceptować wyrównanie w pionie lub poziomie. Wiersz, Kolumna i Stos zostały zaktualizowane, aby obsługiwać niestandardowe ciągłe wyrównania. (Ib0728)
- Moduł ui-text został zmieniony na ui-text-core (I57dec)
- Ulepszenie interfejsu DrawModifier API:
- Zmieniono zakres odbiornika funkcji draw() na ContentDrawScope
- Usunięto wszystkie parametry funkcji draw()
- DrawScope ma taki sam interfejs jak poprzedni CanvasScope
- ContentDrawScope ma metodę drawContent() (Ibaced, b/152919067)
- Komponent ColoredRect został wycofany. Użyj w zamian zasady
Box(Modifier.preferredSize(width, height).drawBackground(color)). (I499fa, b/152753731) - Zastąpienie operatora Modifier plus funkcjami rozszerzenia fabrycznego (I225e4)
- Elementy RowScope i ColumnScope są teraz dostępne poza wierszem i kolumną. (I3a641)
- Zmieniono nazwę LayoutFlexible na LayoutWeight. Zmieniliśmy nazwę parametru „tight” na „fill”. (If4738)
- Dodano parametr LayoutDirection do funkcji WithConstraints (I6d6f7)
- Zmieniliśmy nazwę tła na DrawBackground i ustawiliśmy domyślne zapamiętywanie (Ia0bd3).
- Zastąpiono ButtonStyle odrębnymi funkcjami i usunięto przeciążenie tekstu (ciągu znaków). Informacje o użyciu znajdziesz w zaktualizowanych przykładach. (If63ab, b/146478620, b/146482131)
runOnIdleComposeirunOnUiThreadsą teraz funkcjami globalnymi, a nie metodami w ComposeTestRule. (Icbe8f)
Wkład zewnętrzny
- Usunięcie niepotrzebnych interfejsów API, takich jak Looper i Handler, z warstwy przenoszenia środowiska wykonawczego Compose (I6847d)
- Wycofaj
Flow<T>.collectAsState()bez wartości początkowej. Użyj w zamian zasadyStateFlow<T>lub przekaż jednoznaczną wartość początkową. (I63f98, b/157674865)