Tworzenie środowiska wykonawczego
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(Zobacz dokumentację interfejsu API wszystkich pakietów Compose)
Najnowsza aktualizacja | Wersja stabilna | Wersja kandydująca do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
2 lipca 2025 r. | 1.8.3 | - | 1.9.0-beta02 | - |
Struktura
Compose to połączenie 7 identyfikatorów grupy 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 wyjaśnienie grup i linki do poszczególnych zestawów informacji o wersji.
Grupa | Opis |
---|---|
compose.animation | tworzyć animacje w aplikacjach Jetpack Compose, aby zwiększać komfort 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 udostępniać 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 kierowany 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 Google Maven. 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:
Odlotowe
dependencies { implementation "androidx.compose.runtime:runtime:1.8.3" implementation "androidx.compose.runtime:runtime-livedata:1.8.3" implementation "androidx.compose.runtime:runtime-rxjava2:1.8.3" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.8.3") implementation("androidx.compose.runtime:runtime-livedata:1.8.3") implementation("androidx.compose.runtime:runtime-rxjava2:1.8.3") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć 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 dodać swój głos do istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Śledzenie w środowisku wykonawczym w wersji 1.7
Wersja 1.7.0-rc01
18 września 2024 r.
Zostanie wycofaneandroidx.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.
Zostanie wycofaneandroidx.compose.runtime:runtime-tracing:1.0.0-beta01
Wersja 1.0.0-beta01 zawiera te zmiany.
Wersja 1.0.0-alpha05
15 listopada 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-tracing:1.0.0-alpha05
Wersja 1.0.0-alpha05 zawiera te zmiany.
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 polegającego na tym, że compose-runtime-tracing wprowadzał do aplikacji nowszą wersję compose-runtime.
Wersja 1.0.0-alpha04
23 sierpnia 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-tracing:1.0.0-alpha04
Wersja 1.0.0-alpha04 zawiera te zmiany.
Nowe funkcje
- Zgodność z najnowszymi wersjami narzędzi Benchmark i Tracing Perfetto, które umożliwiają śledzenie kompozycji podczas uruchamiania aplikacji (zimny start), np. w AndroidX Benchmark i Android Studio (od wersji Hedgehog Beta 2).
Zmiany w interfejsie API
- Zmieniono nazwę
androidx.tracing.perfetto.Trace
naandroidx.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łączone pliki interfejsów API w wersji eksperymentalnej i publicznej (I0f2e1, b/278769092)
Wersja 1.0.0-alpha02
8 lutego 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-tracing:1.0.0-alpha02
Wersja 1.0.0-alpha02 zawiera te zmiany.
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
Zostanie wycofaneandroidx.compose.runtime:runtime-tracing:1.0.0-alpha01
Wersja 1.0.0-alpha01 zawiera te zmiany.
Nowe funkcje
androidx.compose.runtime:runtime-tracing
to 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.9
Wersja 1.9.0-beta02
2 lipca 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.9.0-beta02
Wersja 1.9.0-beta02 zawiera te zmiany.
Poprawki błędów
- Skrócono okres istnienia odniesienia do 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ń zniekształcenie Kotlin dla metod Hot reload. (Ic56a3, b/426871325)
Wersja 1.9.0-beta01
18 czerwca 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.9.0-beta01
Wersja 1.9.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaliśmy interfejs API narzędzi do analizowania informacji o źródle dodanych przez kompilator Compose. (Iceaf9, b/408492167)
SnapshotStateSet
implementuje terazParcelable
na Androidzie, więc można go używać w ramachrememberSaveable { ... }
. (I755dd, b/378623803)SnapshotStateList
implementuje terazParcelable
na 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ń
setDiagnosticStackTraceEnabled
na eksperymentalne, aby uwzględnić przyszły rozwój tej funkcji. (I11db3) currentCompositeKeyHash
zostało wycofane. Zamiast niej używaj 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ą do użycia KGP w wersji 2.0.0 lub nowszej (Idb6b5).
- Adnotacje
@Stable
,@Immutable
i@StableMarker
zostały przeniesione do adnotacji w czasie działania (w sposób zgodny). Jeśli chcesz używać tych adnotacji z bibliotek, które nie są zależne 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, jak należy używać tego parametru w przypadkukotlinx.serialization
. Obsługa ogólnych klaskotlinx.Serializable
bezpośrednio wrememberSaveable
wymagałaby parametru typureified
, co spowodowałoby utratę zgodności ze źródłem, 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 nie wysyłała już fałszywego sygnału
onForgotten
do obserwatorów, gdy kompozycja z możliwością wstrzymania zostanie usunięta.RememberObservers
w anulowanej kompozycji z możliwością wstrzymania powinna otrzymać tylko wywołanie zwrotne 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ęSnapshotStateList
po wywołaniu funkcjiprevious()
mogło spowodować usunięcie z listy niewłaściwego elementu i nie odpowiadało działaniu funkcjiArrayList
w 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ć wykonywanieonDispose
efektó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, gdy kompozycja była wstrzymana. (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)
- Funkcja
OffsetApplier
prawidłowo zastępuje funkcjęapply()
, która została wprowadzona 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.withFrameNanos
było anulowane podczas wysyłania klatki. (I89cab, b/407027032) - Recomposer może przejść w stan bezczynności z przenośną treścią (Ie5416, b/409267170).
- Kolejność
onReuse
ionDeactivate
może zostać odwrócona podczas kompozycji z możliwością wstrzymania. Są one teraz gwarantowane w kolejnościonDeactivate
/onReuse
. (I996e4, b/404058957) - 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).
- Przełączono
LifecycleRegistry
na tryb niebezpieczny w Compose Multiplatform, aby wyłączyć sprawdzanieMainThread
i 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.Immediate
mogło skutkować pominięciem ponownego renderowania. (I9f3a9, b/419527812) - Udostępnione gettery
PausableComposition
isApplied
iisCancelled
, które umożliwiają sprawdzanie stanu elementuPausableComposition
. (I994aa) - Dodano
AnnotationTarget.FUNCTION
do adnotacjiFunctionKeyMeta
. (I08021)
Wersja 1.9.0-alpha04
4 czerwca 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.9.0-alpha04
Wersja 1.9.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
SnapshotStateSet
implementuje teraz interfejs Parcelable na Androidzie, więc można go używać w ramachrememberSaveable { ... }
. (I755dd, b/378623803)SnapshotStateList
implementuje teraz interfejs Parcelable na 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).
Poprawki błędów
- Rozwiązaliśmy problem z kolejnością wysyłania
onForgotton
, który mógł na przykład powodować wykonywanieonDispose
efektó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 błędu, która sprawia, że wykrywanie kolekcji modyfikowalnych jest zgodne z K1 i K2 (Ie4878)
- Drobna poprawka błędu, aby wyszukiwanie adnotacji w przypadku zastąpionych metod dostępu do właściwości było zgodne z K1 i K2 (I9900d).
Wkład zewnętrzny
- Naprawiliśmy błąd, który występował u użytkowników Molecule i powodował, że użycie
RecompositionMode.Immediate
mogło skutkować pominięciem ponownego renderowania. (I9f3a9, b/419527812) - Udostępniono funkcje pobierające
PausableComposition
isApplied iisCancelled
, które umożliwiają sprawdzanie stanu elementuPausableComposition
. (I994aa)
Wersja 1.9.0-alpha03
20 maja 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.9.0-alpha03
Wersja 1.9.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Zmień
setDiagnosticStackTraceEnabled
na 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, gdy kompozycja była wstrzymana. (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)
SaveableStateHolder.SaveableStateProvider
udostępnia terazLocalSavedStateRegistryOwner
do swoich treści za pomocą kompozycji. (Ia2761, b/413108878)androidx.compose.runtime.saveable
zależy teraz odandroidx.lifecycle.runtime.compose
. (I53228, b/413108878)
Wersja 1.9.0-alpha02
7 maja 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.9.0-alpha02
Wersja 1.9.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Wycofany atrybut
rememberSaveable
z niestandardowym kluczem. Pomija ona 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 komponentachLazyLayouts
). Aby używać zakresu pozycyjnego w celu uzyskania 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
- Funkcja
OffsetApplier
prawidłowo zastępuje funkcjęapply()
, która została wprowadzona 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.withFrameNanos
było anulowane podczas wysyłania klatki. (I89cab, b/407027032) - Komponent Recomposer może przejść w stan bezczynności, a stan przenośnych treści będzie nadal oczekiwać na odrzucenie. Zwykle nie występuje, ponieważ stan przenośnych treści jest odrzucany w głównej pętli Recomposera. 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ść
onReuse
ionDeactivate
może zostać odwrócona podczas kompozycji z możliwością wstrzymania. Teraz są one gwarantowane w kolejnościonDeactivate/onReuse
. (I996e4, b/404058957)
Wersja 1.9.0-alpha01
23 kwietnia 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.9.0-alpha01
Wersja 1.9.0-alpha01 zawiera te zmiany.
Zmiany w zachowaniu
- Sprawdzanie Lint dostarczane z 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
wersjiandroid.experimental.lint.version=8.8.2
(lub nowszej). Aby uruchamiać sprawdzanie kodu za pomocą narzędzia Lint w IDE, musisz mieć Androida Studio Ladybug lub nowszego.
Zmiany w interfejsie API
currentCompositeKeyHash
zostało wycofane. Zamiast niej używaj 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ą do użycia KGP w wersji 2.0.0 lub nowszej (Idb6b5).
- Adnotacje
@Stable
,@Immutable
i@StableMarker
zostały przeniesione do adnotacji w czasie działania (w sposób zgodny). Jeśli chcesz używać tych adnotacji z bibliotek, które nie są zależne od Compose, możesz teraz polegać na adnotacjach w czasie działania. (I23a16) - Usuwa
onCreating
ionDisposing
, ponieważ zostały wycofane i zmieniono ich nazwy naonPreCreate
ionPreDispose
. Ta zmiana powoduje ukończenie 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)
- Wprowadź diagnostyczne ślady stosu Compose na podstawie informacji o źródle przechowywanych w kompozycji. (I3db9f, b/354163858)
- Zastąpienie wartości
runWithTimingDisabled
wartościąrunWithMeasurementDisabled
, która lepiej opisuje zachowanie – wszystkie dane są wstrzymane. Dodatkowo udostępnij superklasęMicrobenchmarkScope
, ponieważ ponowne zadeklarowanie funkcjirunWithMeasurementDisabled
w celu otwarcia dostępu nie jest możliwe, ponieważ jest ona wstawiana w kodzie. (I9e23b, b/389149423, b/149979716) - Dodaje
@FrequentlyChangingValue
: adnotację, 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. Na przykład do oznaczania wartości pozycji przewijania i wartości animacji. Ostrzeżenia są generowane przez odpowiednie sprawdzanie kodu. (I83630, b/234042500) - Dodaje adnotację
@RememberInComposition
, 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. Ta adnotacja może służyć do oznaczania deklaracji, które zwracają obiekty stanowe lub modyfikowalne, obiekty, których tożsamość jest ważna w przypadku kompozycji, lub obiekty, których tworzenie jest kosztowne i które powinny być buforowane w przypadku kompozycji. (Ie7db0) - Dodano nowy przeciążony operator
rememberSaveable
, który obsługujeKSerializer
w przypadku bezpiecznego pod względem typów utrwalania stanu za pomocą serializacji KotlinX. Dotychczasowy interfejs API oparty naSaver
jest 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
SnapshotObserver
onCreating naonPreCreate
ionDisposing
naonPreDispose
, 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 wprowadzeniem wersji stabilnej 1.8. (I6d753) - Rozwiązaliśmy problem polegający na tym, ż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).
- Dodano obsługę tworzenia śladów stosu w przypadku funkcji Compose w
LaunchedEffect
irememberCoroutineScope
(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 w IDE. Jeśli używasz starszej wersji AGP, możesz ustawić
android.experimental.lint.version=8.8.2
w pliku gradle.properties, aby uaktualnić wersję Lint bez wpływu na AGP. (I6f2a8)
Wkład zewnętrzny
- Dodano
AnnotationTarget.FUNCTION
do adnotacjiFunctionKeyMeta
. (I08021)
Wersja 1.8
Wersja 1.8.3
18 czerwca 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.8.3
Wersja 1.8.3 zawiera te zmiany.
Wersja 1.8.2
20 maja 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.8.2
Wersja 1.8.2 zawiera te zmiany.
Wersja 1.8.1
7 maja 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.8.1
Wersja 1.8.1 zawiera te zmiany.
Wersja 1.8.0
23 kwietnia 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.8.0
Wersja 1.8.0 zawiera te zmiany.
Wersja 1.8.0-rc03
9 kwietnia 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.8.0-rc03
Wersja 1.8.0-rc03 zawiera te zmiany.
Wersja 1.8.0-rc02
26 marca 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.8.0-rc02
Wersja 1.8.0-rc02 zawiera te zmiany.
Wersja 1.8.0-rc01
12 marca 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.8.0-rc01
Wersja 1.8.0-rc01 zawiera te zmiany.
Zmiany w interfejsie API
- Zmieniliśmy nazwy metod
SnapshotObserver
onCreating naonPreCreate
ionDisposing
naonPreDispose
, 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 wprowadzeniem wersji stabilnej 1.8. (I6d753)
Wersja 1.8.0-beta03
26 lutego 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.8.0-beta03
Wersja 1.8.0-beta03 zawiera te zmiany.
Wersja 1.8.0-beta02
12 lutego 2025 r.
Zostanie wycofaneandroidx.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.
Zostanie wycofaneandroidx.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 jest rozszerzeniem klasy Exception, mogło prowadzić do błędu „Pending composition has not been applied”. (I356be, b/382094412)
Wersja 1.8.0-alpha08
15 stycznia 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.8.0-alpha08
Wersja 1.8.0-alpha08 zawiera te commity.
Wersja 1.8.0-alpha07
11 grudnia 2024 r.
Zostanie wycofaneandroidx.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 powiązać podkompozycje z kompozycją nadrzędną w przypadkach, gdy węzeł nie jest używany do łączenia kompozycji. (I4ce3d)
- Uczyniliśmy arytmetykę i stałe specjalne dla
SnapshotId
wewnętrznymi zamiast publicznymi. W razie potrzeby można wykonać działania arytmetyczne na wartościSnasphotId
, przekształcając ją w wartośćInt
lubLong
za pomocą funkcjitoInt()
lubtoLong()
. (Ic3a57)
Wkład zewnętrzny
- Optymalizacja pamięci pod kątem parametrów
movableContentOf
. (ed87177)
Wersja 1.8.0-alpha06
13 listopada 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.8.0-alpha06
Wersja 1.8.0-alpha06 zawiera te zmiany.
Zmiany w interfejsie API
- Zmiany w interfejsie
PausableComposition
API. Te zmiany powodują brak zgodności z poprzednimi wersjami 1.8.0-alpha (od wersji 1.8.0-alpha02), ale ponieważ są to nowe interfejsy API w wersji 1.8.0, nie zachowują one zgodności wstecznej, ponieważ nadal są w wersji alfa. (I39819) - Dodaje interfejsy API narzędzi do obserwowania tworzenia nowych kompozycji w Recomposerze (Iaeb7e).
- Dodano element
snapshotId
typuLong
do elementuSnapshot
i wycofano elementid
. Identyfikator migawki został zmieniony zInt
naLong
, aby uniknąć przepełnienia identyfikatora migawki w systemach o bardzo wysokiej liczbie klatek na sekundę i długotrwałych animacjach. Typ został ustawiony na oczekiwany/rzeczywisty, aby umożliwić jego ustawienie naInt
lub inny typ na platformach, które nie mają natywnego typuLong
. Platformy, które nie mają natywnegoLong
, np. JavaScript, powinny unikać wysokich wartości FPS (powyżej 1000), ponieważ powoduje to przepełnienieInt
co około 24 dni. (I38ac3, b/374821679)
Poprawki błędów
- Stała kwota
providesDefault
za 1provides
. (aosp/3318540 b/374263387) - Optymalizacja
ChangeList
(3318538)
Wersja 1.8.0-alpha05
30 października 2024 r.
Zostanie wycofaneandroidx.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_VALUE
do elementuSnapshotIdSet
. (b/370536104, Ic4179f6) - Mikrooptymalizacje w czasie działania (I50c60)
- Zezwalaj na usuwanie przez R8 wywołań funkcji runtimeCheck debugowania (I8c44)
- Zmień
compoundKeyOf
z rekurencyjnego na iteracyjny (I5817f)
Wkład zewnętrzny
- Implementowanie stosów za pomocą list kolekcji (I7d47c)
Wersja 1.8.0-alpha04
16 października 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.8.0-alpha04
Wersja 1.8.0-alpha04 zawiera te zmiany.
Ulepszenia wydajności
- Podaj identyfikator zrzutu dysku dla 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
SynchronizedObject
w JVM (2b043f)
Wersja 1.8.0-alpha03
2 października 2024 r.
Zostanie wycofaneandroidx.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)rememberCoroutineScope
jest zwykle używana do uruchamiania korutyn w odpowiedzi na zdarzenia, które występują po utworzeniu kompozycji. W niektórych przypadkach te zdarzenia mogą nigdy nie wystąpić, co prowadzi do dodatkowych kosztów związanych z tworzeniem i anulowaniem zadań bez żadnych korzyści.- Spraw, aby zakres zwracany przez funkcję
rememberCoroutineScope
tworzył swójcoroutineContext
leniwie, gdy jest do niego dostęp, co pozwoli uniknąć tworzenia i anulowania zadań, jeśli zakres nigdy nie jest używany.
Wersja 1.8.0-alpha02
18 września 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.8.0-alpha02
Wersja 1.8.0-alpha02 zawiera te zmiany.
Nowe funkcje
- Dodano
PausableComposition
, który umożliwia tworzenie subkompozycji, którą można wstrzymać podczas kompozycji i zastosować asynchronicznie do kompozycji. Wstrzymywanie wymaga obsługi kompilatora, nad którą obecnie pracujemy. (I3394b)
Wersja 1.8.0-alpha01
4 września 2024 r.
Zostanie wycofaneandroidx.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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.8
Wersja 1.7.8 zawiera te zmiany.
Wersja 1.7.7
29 stycznia 2025 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.7
Brak zmian w porównaniu z wersją 1.7.6.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.6
Wersja 1.7.6 zawiera te zmiany.
Wersja 1.7.5
30 października 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.5
Wersja 1.7.5 zawiera te zmiany.
Wersja 1.7.4
16 października 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.4
Wersja 1.7.4 zawiera te zmiany.
Wersja 1.7.3
2 października 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.3
Wersja 1.7.3 zawiera te zmiany.
Wersja 1.7.2
18 września 2024 r.
Zostanie wycofaneandroidx.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
-desktop
artefaktów, a dodano-jvmStubs
i-linuxx64Stubs
artefakty. Żaden z tych celów nie jest przeznaczony do użytku. Są to symbole zastępcze, które mają pomóc w pracach nad Jetbrains Compose.
Wersja 1.7.0
4 września 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0
Wersja 1.7.0 zawiera te zmiany.
Ważne zmiany od wersji 1.6.0
- Dodaliśmy możliwość podania lokalizacji kompozycji, która jest obliczana na podstawie wartości innych lokalizacji kompozycji domyślnie za pomocą
compositionLocalWithComputedDefault()
lub przez podanie funkcji lambda do obliczenia wartości za pomocąprovidesComputed
zamiastprovides
. - Wartość lokalizacji kompozycji można uzyskać za pomocą właściwości
currentValue
lokalizacji kompozycji dostępnej w funkcji lambda obliczającej wartość. Jest on używany 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 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()
i jego wersji pierwotnych to wartość przekazana jako parametr domutableStateOf()
. Początkowy stan pólmutableStateListOf()
imutableStateMapOf()
jest pusty. - Dodano
Snapshot.isInSnapshot
iSnapshot.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
nonSkippingGroupOptimization
w 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 subkompozycjach w tej samej ramce. (98301c)
- Wywołanie zwrotne
onRelease
jest wywoływane w tej samej kolejności coonForgotten
. (2cd790) - Włącz tryb szybkiego pomijania (ed1766)
- Większa liczba przypadków, w których urządzenie
currentCompoundHashKey
jest unikalne (d4a872)
Wersja 1.7.0-rc01
21 sierpnia 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-rc01
Wersja 1.7.0-rc01 zawiera te zmiany.
Wersja 1.7.0-beta07
7 sierpnia 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-beta07
Wersja 1.7.0-beta07 zawiera te zmiany.
Wersja 1.7.0-beta06
24 lipca 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-beta06
Wersja 1.7.0-beta06 zawiera te zmiany.
Wersja 1.7.0-beta05
10 lipca 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-beta05
Wersja 1.7.0-beta05 zawiera te zmiany.
Wersja 1.7.0-beta04
26 czerwca 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-beta04
Wersja 1.7.0-beta04 zawiera te zmiany.
Wersja 1.7.0-beta03
12 czerwca 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-beta03
Wersja 1.7.0-beta03 zawiera te zmiany.
Wersja 1.7.0-beta02
29 maja 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-beta02
Wersja 1.7.0-beta02 zawiera te zmiany.
Wersja 1.7.0-beta01
14 maja 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-beta01
Wersja 1.7.0-beta01 zawiera te commity.
Wersja 1.7.0-alpha08
1 maja 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-alpha08
Wersja 1.7.0-alpha08 zawiera te zmiany.
Wersja 1.7.0-alpha07
17 kwietnia 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-alpha07
Wersja 1.7.0-alpha07 zawiera te zmiany.
Nowe funkcje
- Dodaliśmy możliwość podania lokalizacji kompozycji, która jest obliczana na podstawie wartości innych lokalizacji kompozycji domyślnie za pomocą
compositionLocalWithComputedDefault()
lub przez podanie funkcji lambda do obliczenia wartości za pomocąprovidesComputed
zamiastprovides
. - Wartość lokalizacji kompozycji można uzyskać za pomocą właściwości
currentValue
lokalizacji kompozycji dostępnej w funkcji lambda obliczającej wartość. Jest on używany 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()
i jego wersji pierwotnych to wartość przekazana jako parametr domutableStateOf()
. Początkowy stan pólmutableStateListOf()
imutableStateMapOf()
jest pusty. - Dodano
Snapshot.isInSnapshot
iSnapshot.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
- Naprawiliśmy scalanie
readObserver
w zagnieżdżonych zrzutach. Powodowało to nieprawidłowe unieważnianie zagnieżdżonych stanów pochodnych, gdy były one używane w komponenciesnapshotFlow
. (Idf138)
Wersja 1.7.0-alpha06
3 kwietnia 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-alpha06
Wersja 1.7.0-alpha06 zawiera te zmiany.
Poprawki błędów
- Poprawiono obsługę 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.
Zostanie wycofaneandroidx.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
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-alpha04
Wersja 1.7.0-alpha04 zawiera te zmiany.
Ulepszenia wydajności
- Wywołanie
Snapshot.current
raz na ocenę stanu pochodnego (ee7daf) - Odczytuj
currentRecord
raz na obserwację w kompozycji (b882b2) - Usuwanie przypadkowej alokacji iteratora w
snapshotFlow
(231e56) - Włącz
nonSkippingGroupOptimization
w 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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-alpha03
Wersja 1.7.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Wprowadzenie zastępowania grup w celu ulepszenia wykrywania zmian (0941b5)
Ulepszenia wydajności
- Ulepszono przydzielanie pamięci podczas wykrywania zmian (53e7fd)
- Naprawiono wyciek pamięci w edytorze (0e097d)
- Używanie
ScopeMap
do przekazywania unieważnień podczas ponownego komponowania (e19a7e) - Optymalizacja mapy unieważnień, aby zachować tylko stany pochodne (f11c44)
- Zastąpienie użycia
IdentityArraySet
przezScatterSet
(db572e) - Optymalizacja
removeScope
wScopeMap
(bb0530)
Wersja 1.7.0-alpha02
7 lutego 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-alpha02
Wersja 1.7.0-alpha02 zawiera te zmiany.
Poprawki błędów
- Unieważnianie funkcji lambda z możliwością komponowania w subkompozycjach w tej samej ramce. (98301c)
- Wywołanie zwrotne
onRelease
jest wywoływane w 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żywaj konta
fold()
bez przydzielania środków w usłudzeSnapshotIdSet
. (532b7d) - Usuwanie alokacji iteratora (83f96b)
Wersja 1.7.0-alpha01
24 stycznia 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.7.0-alpha01
Wersja 1.7.0-alpha01 zawiera te zmiany.
Optymalizacje skuteczności
- Dodanie możliwości tworzenia slotó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 domyślnych metadanych parametru w pamięci wewnętrznej (096665)
- Większa liczba przypadków, w których urządzenie
currentCompoundHashKey
jest unikalne (d4a872) - Realizuj grupy podczas wychodzenia z wywołania funkcji wbudowanej (2a90fc)
Wersja 1.6
Wersja 1.6.8
12 czerwca 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.8
Wersja 1.6.8 zawiera te zmiany.
Wersja 1.6.7
1 maja 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.7
Wersja 1.6.7 zawiera te zmiany.
Wersja 1.6.6
17 kwietnia 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.6
Brak zmian od ostatniej wersji.
Wersja 1.6.5
3 kwietnia 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.5
Wersja 1.6.5 zawiera te zmiany.
Wersja 1.6.4
20 marca 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.4
Wersja 1.6.4 zawiera te zmiany.
Wersja 1.6.3
6 marca 2024 roku
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.3
Wersja 1.6.3 zawiera te zmiany.
Wersja 1.6.2
21 lutego 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.2
Wersja 1.6.2 zawiera te zmiany.
Wersja 1.6.1
7 lutego 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.1
Wersja 1.6.1 zawiera te zmiany.
Poprawki błędów
- Wywołanie zwrotne
onRelease
jest wywoływane w 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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.0
Wersja 1.6.0 zawiera te zmiany.
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 ponownego komponowania (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)
- Ulepszone przekazywanie wartości lokalnych 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)
- Cykle życia
RememberObserver
są wywoływane tylko wtedy, gdy są przechowywane w pamięci obliczeń. (f6b4dc) - Ogranicz przechwytywanie
$dirty
do wyrażeń lambda wbudowanych. (acfca0) - Naprawiono problem z przenośnymi treściami, które czasami otrzymywały nieprawidłowe ustawienia regionalne kompozycji. (035cd6)
Wersja 1.6.0-rc01
10 stycznia 2024 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.0-rc01
Wersja 1.6.0-rc01 zawiera te zmiany.
Wersja 1.6.0-beta03
13 grudnia 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.0-beta03
Wersja 1.6.0-beta03 zawiera te zmiany.
Wersja 1.6.0-beta02
29 listopada 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.0-beta02
Wersja 1.6.0-beta02 zawiera te zmiany.
Wersja 1.6.0-beta01
15 listopada 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.0-beta01
Wersja 1.6.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Przekazywanie określonych 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 przenośnymi treściami, które czasami otrzymywały nieprawidłowe ustawienia regionalne kompozycji. (035cd6)
- Używaj szybszych map skrótów bez przydzielania pamięci w
RecomposeScopeImpl
. (d79494) - Używaj konta
ObjectIntMap
w aplikacjiDerivedState
. (21862e) - Użyj
IntRef
dla liczby całkowitejSnapshotThreadLocal
wDerivedState
. (04eaf4)
Wersja 1.6.0-alpha08
18 października 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.0-alpha08
Wersja 1.6.0-alpha08 zawiera te zmiany.
Poprawki błędów
- Cykle życia
RememberObserver
są wywoływane tylko wtedy, gdy są 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
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.0-alpha07
Wersja 1.6.0-alpha07 zawiera te zmiany.
Zmiany w interfejsie API
SnapshotStateList
jest 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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.0-alpha06
Wersja 1.6.0-alpha06 zawiera te zmiany.
Wersja 1.6.0-alpha05
6 września 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.0-alpha05
Wersja 1.6.0-alpha05 zawiera te zmiany.
Wersja 1.6.0-alpha04
23 sierpnia 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.0-alpha04
Wersja 1.6.0-alpha04 zawiera te zmiany.
Nowe funkcje
- Ponowne zgłaszanie wyjątków, które zostały pominięte w pętli ponownego komponowania (4dff9a)
Zmiany w interfejsie API
- Dodano metodę dezaktywacji
ReusableComposition
, która usuwa obserwacje, ale zachowuje węzły. Dezaktywowaną kompozycję można ponownie aktywować, dzwoniąc pod numersetContent
. (Ib7f31) - Dodanie interfejsu
ReusableComposition
do zarządzania cyklem życia i ponownym wykorzystywaniem podkompozycji. (I812d1, b/252846775)
Wersja 1.6.0-alpha03
9 sierpnia 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.0-alpha03
Wersja 1.6.0-alpha03 zawiera te zmiany.
Poprawki błędów
- Naprawianie nowej optymalizacji
CompositionLocalProvider
(3118e88) - Poprawne rozkładanie ruchomych węzłów treści. (5e3d59b)
Wersja 1.6.0-alpha02
26 lipca 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.0-alpha02
Wersja 1.6.0-alpha02 zawiera te zmiany.
Nowe funkcje i ulepszenia wydajności
- Optymalizacja
rememberSaveable
(f01d79) - Odroczenie ponownego odczytu stanów pochodnych do momentu zarejestrowania zmian (f38099)
- Ulepszone przekazywanie wartości lokalnych kompozycji (a337ea)
SideEffect
jest 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 przeciążenie w przypadku specjalnym dla
CompositionLocalProviders
, które pozwala uniknąć narzutu związanego z szybszym podawaniem wielu wartości, ale jest narzutem w przypadku podawania jednej wartości. (I6d640, b/288169379)
Poprawki błędów
- Naprawiono wyciek pamięci w tabeli slotów (73fcfe)
- Poprawienie sposobu przywracania
rememberSaveable
, gdy funkcjastateSaver
zwraca wartość null (90748c)
Wersja 1.6.0-alpha01
21 czerwca 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.6.0-alpha01
Wersja 1.6.0-alpha01 zawiera te zmiany.
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
readableHash
wDerivedState
, jeśli zrzut nie został zmodyfikowany (68c565)
Wersja 1.5
Wersja 1.5.4
18 października 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.5.4
Wersja 1.5.4 zawiera te zmiany.
Wersja 1.5.3
4 października 2023 roku
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.5.3
Wersja 1.5.3 zawiera te zmiany.
Wersja 1.5.2
27 września 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.5.2
Wersja 1.5.2 zawiera te zmiany.
Wersja 1.5.1
6 września 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.5.1
Wersja 1.5.1 zawiera te zmiany.
Wersja 1.5.0
9 sierpnia 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.5.0
Wersja 1.5.0 zawiera te zmiany.
Zmiany w interfejsie API
- Usunięto alokacje w ponownym komponowaniu, animacjach kolorów i
AndroidComposeView
. (Ib2bfa) - Dodano adnotację
@StateFactoryMarker
, aby oznaczać funkcje, które tworzą stany i muszą być opakowane w wywołanieremember
. (I64550) - Dodaj wersje pierwotne stanu i
MutableState
(fb3d89) - Dodano
Snapshot.isApplyObserverNotificationPending
(I672a5) - Dodano wersje pierwotne interfejsu
State
API, które umożliwiają śledzenie wartości Int, Long, Float i Double w obiektachState
bez 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łaj
onEndChanges
podczas usuwania kompozycji. (62cc8c) - Rozwiązywanie problemu z przenoszeniem treści do podkompozycji (4beb41)
- Rozwiązywanie potencjalnych zakleszczeń (c1a425 i 8edce0)
- Recomposer utworzony dla okna Androida będzie teraz blokować tylko wywołania funkcji
withFrameNanos
zamiast 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 funkcjiwithFrameNanos
będą blokowane. (Id9e7f, b/240975572) - Wykonaj wywołania zwrotne dezaktywacji dla
LayoutNode
przed usunięciem efektów 3784073 - Naprawianie zmienionych flag w przypadku ponownie uruchomionych funkcji Lambda ea81df9
- Naprawiono regresję edycji na żywo w przypadku funkcji Composable z węzłami 73fd4d8
- ON_STOP powinno wstrzymywać transmisje zegara klatek zamiast kompozycji ae276f1
- Unieważnianie zakresów
SnapshotStateObserver
w przypadku niezmienionych stanów pochodnych 84d9b1c - Naprawiono potencjalny zakleszczenie podczas usuwania kompozycji 28761fc
- Rozwiązywanie problemów z przenoszeniem treści do podkompozycji 92d4156
- Poprawiono zmienione flagi w przypadku ponownie uruchomionych funkcji Lambda (8a03e9)
- Wykonaj wywołania zwrotne dezaktywacji dla
LayoutNode
przed usunięciem efektów (8b0fa4) - Naprawiono
endToMarker()
podczas kończenia grup węzłów. (d71d980) - Użyj bieżącej grupy
SlotWriter
do sprawdzenia dezaktywacji (a0b518b) - Usuń
fill
zSlotTable.moveSlotGapTo()
i przenieś go do zamknięcia (81f9935). - Rozwiązywanie problemów z brakującymi unieważnieniami podczas przenoszenia treści (1d7c024)
- Naprawianie natychmiastowych unieważnień przeniesionej zawartości ruchomej (8676618)
Ulepszenia wydajności
- Unikaj obliczania
readableHash
wDerivedState
, 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
IdentityArraySet
do przechowywania unieważnień zrzutów (7f60cca) - Zmniejszenie przydziałów dla obserwacji zrzutów (5bc535f)
Wersja 1.5.0-rc01
26 lipca 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.5.0-rc01
Wersja 1.5.0-rc01 zawiera te zmiany.
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. Jego identyfikator 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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.5.0-beta03
Wersja 1.5.0-beta03 zawiera te zmiany.
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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.5.0-beta02
Wersja 1.5.0-beta02 zawiera te zmiany.
Ulepszenia wydajności
- Unikaj obliczania
readableHash
wDerivedState
, jeśli zrzut nie został zmodyfikowany. (307102)
Wersja 1.5.0-beta01
24 maja 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.5.0-beta01
Wersja 1.5.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Usunięto alokacje w przypadku ponownego komponowania, animacji kolorów i
AndroidComposeView
(Ib2bfa) - Dodano adnotację
@StateFactoryMarker
, aby oznaczać funkcje, które tworzą stany i muszą być opakowane w wywołanieremember
. (I64550) - Dodaj wersje pierwotne 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łaj
onEndChanges
podczas usuwania kompozycji. (62cc8c) - Rozwiązywanie problemu z przenoszeniem treści do podkompozycji (4beb41)
- Rozwiązywanie potencjalnych zakleszczeń (c1a425
- ON_STOP powinno wstrzymywać transmisje zegara klatek zamiast kompozycji (f4a2d1)
- Poprawiono zmienione flagi w przypadku ponownie uruchomionych funkcji Lambda (8a03e9)
- Wykonaj wywołania zwrotne dezaktywacji dla
LayoutNode
przed usunięciem efektów (8b0fa4)
Wkład zewnętrzny
- Dodano
Snapshot.isApplyObserverNotificationPending
(I672a5)
Wersja 1.5.0-alpha04
10 maja 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.5.0-alpha04
Wersja 1.5.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano wersje pierwotne interfejsu
State
API, które umożliwiają śledzenie wartości Int, Long, Float i Double w obiektachState
bez ponoszenia kar za automatyczne pakowanie. Aby z nich korzystać, użyj nowych metod fabrycznychmutableIntState(Int)
,mutableFloatStateOf(Float)
itp. (I48e43)
Poprawki błędów
Wywołaj
onEndChanges
podczas usuwania kompozycji. Węzły ostrości usunięte podczasComposition.dispose
subskrybują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
SnapshotStateObserver
usuwała stare zależności, a następnie 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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.5.0-alpha03
Wersja 1.5.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Recomposer utworzony dla okna Androida będzie teraz blokować tylko wywołania funkcji
withFrameNanos
zamiast 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 funkcjiwithFrameNanos
będą blokowane. (Id9e7f, b/240975572)
Poprawki błędów
- Naprawiono potencjalny zakleszczenie na liście zrzutów i mapie 5c1a425
- Wykonaj wywołania zwrotne dezaktywacji dla
LayoutNode
przed usunięciem efektów 3784073 - Naprawianie zmienionych flag w przypadku ponownie uruchomionych funkcji Lambda ea81df9
- Naprawiono regresję edycji na żywo w przypadku funkcji Composable z węzłami 73fd4d8
- ON_STOP powinno wstrzymywać transmisje zegara klatek zamiast kompozycji ae276f1
- Unieważnianie zakresów
SnapshotStateObserver
w przypadku niezmienionych stanów pochodnych 84d9b1c - Naprawiono potencjalny zakleszczenie podczas usuwania kompozycji 28761fc
- Rozwiązywanie problemów z przenoszeniem treści do podkompozycji 92d4156
Wersja 1.5.0-alpha02
5 kwietnia 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.5.0-alpha02
Wersja 1.5.0-alpha02 zawiera te zmiany.
Nowe funkcje
- Operator
getValue
w języku Kotlin może być teraz złożony (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
endToMarker()
podczas kończenia grup węzłów. (d71d980) - Użyj bieżącej grupy
SlotWriter
do sprawdzenia dezaktywacji (a0b518b) - Użyj
IdentityArraySet
do przechowywania unieważnień zrzutów (7f60cca) - Usuń
fill
zSlotTable.moveSlotGapTo()
i przenieś go do zamknięcia (81f9935). - Rozwiązywanie problemów z brakującymi unieważnieniami podczas przenoszenia treści (1d7c024)
- Naprawianie natychmiastowych unieważnień przeniesionej zawartości ruchomej (8676618)
- Zmniejszenie przydziałów dla obserwacji zrzutów (5bc535f)
Wersja 1.5.0-alpha01
22 marca 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.5.0-alpha01
Wersja 1.5.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Dodaje
Modifier.Node#coroutineScope
, aby umożliwićModifier.Nodes
uruchamianie korutyn (I76ef9) - Zezwól na odczytywanie
Modifier.Nodes
przezCompositionLocals
, implementując interfejsCompositionLocalConsumerModifierNode
. (Ib44df)
Wersja 1.4
Wersja 1.4.3
3 maja 2023 r.
androidx.compose.runtime:runtime-*:1.4.3
zostaje opublikowany bez zmian.
Wersja 1.4.2
19 kwietnia 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.4.2
Wersja 1.4.2 zawiera te zmiany.
Poprawki błędów
Naprawianie potencjalnego zakleszczenia na liście zrzutów i mapie 2eb6570
Dodawanie treści do
SnapshotStateList
lubSnapshotStateMap
może spowodować zakleszczenie, jeśli modyfikacja jest wykonywana równocześnie z bezpośrednim zapisem w rekordzie stanu. Prawdopodobieństwo wystąpienia tego problemu znacznie wzrosło po wprowadzeniu zmian w 93fcae828b, które wykorzystują bezpośrednie zapisy do zwalniania nieużywanych rekordów.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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.4.1
Wersja 1.4.1 zawiera te zmiany.
Poprawki błędów
- Naprawiono błąd
endToMarker()
podczas kończenia grup węzłów. d71d980
Wersja 1.4.0
22 marca 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.4.0
Wersja 1.4.0 zawiera te zmiany.
Ważne zmiany od wersji 1.3.0
- Użyj zainicjowanej wartości z
LiveData
w przypadku pierwszej kompozycji 3680e25 - Dodaj
ComposeNodeLifecycleCallback
, aby obserwować cykl życia węzłów kompozycji. 8b6a258 - Dodawanie usługi
parameterTypes
do usługiComposableMethod
7b6c7ad
Poprawki błędów i ulepszenia w zakresie wydajności
- Wyczyść oba indeksy zakresu w
SnapshotStateObserver
29f4a3e - Dodawanie grup potrzebnych w treści niepomijalnych funkcji lambda 7d06752
- Poprawienie charakterystyki odwołań do pamięci stanu zrzutu 93fcae8
- Usuwanie opakowania w przypadku lokalnych wyszukiwań w kompozycji 0875717
- Używanie prawidłowego klucza w przypadku grup węzłów, których nie można ponownie wykorzystać 6388d8d
- Ochrona
SnapshotStateObserver
przed rekursywnym i równoczesnym stosowaniem 98cb6ba - Dodano sprawdzanie indeksu w metodzie „get” w
IdentityArraySet
35a77d3 - Aktualizacja modułu tworzenia wiadomości w celu korzystania z rozszerzeń
ViewTreeLifecycleOwner
21c2122 - Wysyłaj powiadomienia o zastosowaniu po zakończeniu klatki przez narzędzie 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
- Ulepszone obsługiwanie unieważnień w przypadku dużej liczby kompozytorów 9b7ed67
- Naprawianie generowania grup zamykających dla zwrotów niezwiązanych z lokalizacją b6f590c
Wersja 1.4.0-rc01
8 marca 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.4.0-rc01
Wersja 1.4.0-rc01 zawiera te zmiany.
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 zmiany.
Wersja 1.4.0-beta01
8 lutego 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.4.0-beta01
Wersja 1.4.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano
ComposeNodeLifecycleCallback
, co umożliwia obserwowanie cyklu życia węzłów Compose (I3731b). - Dodano
@TestOnly
doComposer.disableSourceInformation()
, ponieważ tę funkcję można bezpiecznie wywoływać tylko w teście. (I896c8)
Poprawki błędów
- Usuwanie obramowania w przypadku lokalnych wyszukiwań kompozycji (62f66a)
- Poprawianie 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 zmiany.
Zmiany w interfejsie API
- Więcej informacji o typach i możliwościach przyjmowania wartości null w przypadku funkcji wbudowanych i ukrytych (I24f91)
Wersja 1.4.0-alpha04
11 stycznia 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.4.0-alpha04
Wersja 1.4.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
TestMonotonicFrameClock
używa teraz prawidłowej adnotacji eksperymentalnej. (I95c9e)
Poprawki błędów
- Ochrona
SnapshotStateObserver
przed rekursywnymi i równoczesnymi zastosowaniami (d902fb)
Wersja 1.4.0-alpha03
7 grudnia 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.4.0-alpha03
Wersja 1.4.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- dodanie nowej metody publicznej do klasy
ComposableMethod
analogicznej dojava.lang.reflect.Method#getParameterTypes()
(Iab0c3);
Poprawki błędów
- Powiadomienia o zastosowaniu migawki są teraz wysyłane po zakończeniu wprowadzania zmian przez
Recomposer
. (Iad6c0, b/222093277)
Wersja 1.4.0-alpha02
9 listopada 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.4.0-alpha02
Wersja 1.4.0-alpha02 zawiera te zmiany.
Wersja 1.4.0-alpha01
24 października 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.4.0-alpha01
Wersja 1.4.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
SnapshotStateList
iSnapshotStateMap
mają 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 na przykład użyć do wygenerowania przepływu wartości za pomocą funkcjisnapshotFlow
bez konieczności kopiowania danych. (Ica2bd)
Wersja 1.3
Wersja 1.3.3
11 stycznia 2023 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.3.3
Wersja 1.3.3 zawiera te zmiany.
- Brak zmian od wersji 1.3.2
Wersja 1.3.2
7 grudnia 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.3.2
Wersja 1.3.2 zawiera te zmiany.
Poprawki błędów
- Zaktualizowano obsługę androidx.compose.ui w wersji 1.3.2
Wersja 1.3.1
9 listopada 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.3.1
Wersja 1.3.1 zawiera te zmiany.
Wersja 1.3.0
24 października 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.3.0
Wersja 1.3.0 zawiera te zmiany.
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 tworzenia kompozycji.
- Obsługa błędów kompozycji w przypadku gorącego przeładowania
- Obsługa błędów edycji na żywo podczas zapisywania lub przywracania
Śledzenie kompozycji
- Dodano interfejsy API śledzenia w czasie działania, aby obsługiwać nowe narzędzia do śledzenia kompozycji.
- Generowanie wywołań początku i końca zdarzenia ś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. - Przenoszenie invokeComposable do środowiska wykonawczego Compose
- Zmiana interfejsu API w celu wywoływania metody kompozycyjnej
Poprawki czasu działania
- Naprawianie wadliwego testu zakresu w przypadku sprawdzania tabeli slotów pod kątem znaczników
- Zezwalanie na przenoszenie treści do i z elementu SubcomposeLayout
- Poprawianie przenoszenia treści do nowych treści podkompozycji
System zrzutów
- System migawek został ulepszony pod względem zarządzania pamięcią, wydajności i poprawności.
- Optymalizacja usuwania zakresu w SnapshotStateObserver
- Usuwanie zagnieżdżonych zrzutów utworzonych na podstawie zrzutów przezroczystych
- Naprawiono wyścigową sytuację 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 klasy HashMap w klasie DerivedState
- Aktualizowanie obserwatorów stanu pochodnego w celu używania wektora modyfikowalnego
- Aktualizacja czyszczenia stanu SnapshotStateObserver
- Zastąpienie SnapshotStateObserver.invalidated elementem ArraySet
- Naprawiono wyścigową sytuację podczas odczytywania stanu z globalnej migawki
- Naprawianie użycia nieaktualnego rekordu w obliczeniach skrótu DerivedState
- Rozwiązanie problemu z wyścigiem podczas przechodzenia do globalnego zrzutu
- Przyspieszenie czyszczenia obserwacji zakresu w SnapshotStateObserver
Wersja 1.3.0-rc01
5 października 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.3.0-rc01
Wersja 1.3.0-rc01 zawiera te zmiany.
Poprawki błędów
- Naprawiono
ArrayIndexOutOfBoundsException
pochodzące z tabeli slotów (b/249076084).
Wersja 1.3.0-beta03
21 września 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.3.0-beta03
Wersja 1.3.0-beta03 zawiera te zmiany.
Zmiana powodująca niezgodność w zachowaniu
- Parametry
remember
irememberCoroutineScope
został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 innych niż lokalne. (Ibea62)
Wersja 1.3.0-beta02
7 września 2022 roku
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.3.0-beta02
Wersja 1.3.0-beta02 zawiera te zmiany.
Poprawki błędów
- Zaktualizowany interfejs API (I64ca0)
Wersja 1.3.0-beta01
24 sierpnia 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.3.0-beta01
Wersja 1.3.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Do interfejsu
CompositionData
dodano metodęfind
, która umożliwia narzędziom dla deweloperó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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.3.0-alpha03
Wersja 1.3.0-alpha03 zawiera te zmiany.
Wersja 1.3.0-alpha02
27 lipca 2022 roku
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.3.0-alpha02
Wersja 1.3.0-alpha02 zawiera te zmiany.
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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.3.0-alpha01
Wersja 1.3.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
- Przeniesienie funkcji narzędziowych do środowiska wykonawczego (I4f729)
Wersja 1.2
Wersja 1.2.1
10 sierpnia 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.2.1
Wersja 1.2.1 zawiera te zmiany.
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
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.2.0
Wersja 1.2.0 zawiera te zmiany.
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
movableContentOf
interfejsu API, który umożliwia tworzenie złożonych interfejsów, np. przejść między elementami. Interfejs APImovableContentOf
przekształca funkcję lambda z możliwością komponowania w funkcję lambda, która przenosi swój stan i odpowiednie węzły do dowolnej 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 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 zapamiętania otrzymają powiadomienie.Jeśli
movableContentOf
lambda jest wywoływana wiele razy w tej samej kompozycji, dla każdego wywołania tworzone są nowe stany i węzły. Gdy wywołania opuszczają kompozycję, a nowe 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, które nie zostały wykorzystane 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 w momencie niebezpiecznego wejścia lub wyjścia
- Dodanie eksperymentalnego interfejsu Snapshot.asContextElement API
- Przedstawienie funkcji Snapshot.withoutReadObservation
- Zezwalanie na przesuwanie stanu w kompozycji
- Śledzenie ponownego komponowania w Compose
Skuteczność w 1.2
- Zwiększanie skuteczności komponentu lokalnego
- Profile bazowe 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 currentCompositeKeyHash po wewnętrznej rekompozycji w ruchomej treści
- Usuwanie unieważnionych kompozycji podczas utylizacji
- Naprawianie odczytu stanu pochodnego podczas ponownego komponowania
- Naprawianie wycieku pamięci podczas obserwowania obiektów stanu pochodnego
- Naprawiono klucz złożony movableContent, aby był spójny
- Naprawiono problem, w którym kompozytor ulegał awarii
- Zapewnienie, że wymuszone unieważnienie grupy powoduje ponowne komponowanie
- Naprawianie błędu, który powodował, że funkcja rememberSaveable z danymi wejściowymi była przywracana w niewłaściwej kolejności
Wersja 1.2.0-rc03
29 czerwca 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.2.0-rc03
Wersja 1.2.0-rc03 zawiera te zmiany.
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 instancje stanu pochodnego tylko wtedy, gdy nie są już obserwowane przez inne zakresy. (b/236618362)
Wersja 1.2.0-rc02
22 czerwca 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.2.0-rc02
Wersja 1.2.0-rc02 zawiera te zmiany.
Wersja 1.2.0-rc01
15 czerwca 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.2.0-rc01
Wersja 1.2.0-rc01 zawiera te zmiany.
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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.2.0-beta03
Wersja 1.2.0-beta03 zawiera te zmiany.
Wersja 1.2.0-beta02
18 maja 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.2.0-beta02
Wersja 1.2.0-beta02 zawiera te zmiany.
Wersja 1.2.0-beta01
11 maja 2022 roku
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.2.0-beta01
Wersja 1.2.0-beta01 zawiera te zmiany.
Nowe funkcje
- To pierwsza wersja beta 1.2.
Zmiany w interfejsie API
- Dodano eksperymentalną funkcję
Snapshot.unsafeEnter/unsafeLeave
(I108f3) - Dodano eksperymentalny interfejs
Snapshot.asContextElement()
API (Iff072) - Adnotacji
@ComposableTarget
i adnotacji oznaczonych symbolem@ComposableTargetMarker
moż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 z możliwością komponowania w pliku są przeznaczone do powiązanego aplikatora. Na przykład użycie@file:UiComposable
deklaruje, że wszystkie funkcje@Composable
są przeznaczone dla aplikacji Compose UI. Funkcja, która ma kierować reklamy na innego aplikatora, musi wyraźnie podać adnotację znacznika docelowego dla wybranego aplikatora. (I40804)
Wersja 1.2.0-alpha08
20 kwietnia 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.2.0-alpha08
Wersja 1.2.0-alpha08 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano
TracingInProgress
do interfejsuCompositionTracer
. (Ic6f12) - Dodawanie
recomposeScopeIdentity
do usługi Composer (I0c873) - Ograniczenie interfejsów 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ć, co spowoduje zapomnienie całego zapamiętanego stanu w kompozycji i wywołanie np. wszystkich efektów jednorazowych. (I2c0f2, b/220322704)
Wersja 1.2.0-alpha07
6 kwietnia 2022 roku
Zostanie wycofaneandroidx.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 się to przydać 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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.2.0-alpha06
Wersja 1.2.0-alpha06 zawiera te zmiany.
Wersja 1.2.0-alpha05
9 marca 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.2.0-alpha05
Wersja 1.2.0-alpha05 zawiera te zmiany.
Wkład zewnętrzny
- Zaktualizowano do korzystania z rutyn Kotlinx w wersji 1.6.0 (I3366d).
Wersja 1.2.0-alpha04
23 lutego 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.2.0-alpha04
Wersja 1.2.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
Dodano adnotacje
ComposableTarget
,ComposableTargetMarker
iComposableOpenTarget
, które umożliwiają zgłaszanie w czasie kompilacji sytuacji, w których funkcja typu „composable” jest wywoływana w odniesieniu do narzędzia, 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, w których tworzony jest i używany niestandardowy aplikator, abstrakcyjne funkcje kompozycyjne (np. metody interfejsu), pola lub zmienne globalne, które są kompozycyjnymi wyrażeniami lambda (zmienne lokalne i parametry są wywnioskowane), lub gdy używana jest funkcja
ComposeNode
lub powiązane funkcje kompozycyjne.W przypadku niestandardowych funkcji stosujących funkcje kompozycyjne, które wywołują
ComposeNode
lubReusableComposeNode
, należy dodać adnotacjęCompoableTarget
do funkcji i wszystkich typów parametrów lambda kompozycyjnych. Zalecamy jednak utworzenie adnotacji, która jest oznaczona symbolemComposableTargetMarker
, a następnie użycie tej adnotacji zamiast symboluComposableTarget
. Adnotacja kompozycyjna oznaczona symbolemComposableTargetMarker
jest równoważna adnotacjiComposbleTarget
z pełną i jednoznaczną nazwą klasy atrybutu jako parametrem stosującym. Przykład użycia elementuComposableTargetMarker
znajdziesz w sekcjianroidx.compose.ui.UiComposable
. (I38f11)
Wersja 1.2.0-alpha03
9 lutego 2022 r.
Zostanie wycofaneandroidx.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 elementem kompozycyjnym w funkcję lambda przenoszącą stan i odpowiednie węzły do dowolnej nowej lokalizacji, w której jest wywoływana. Gdy poprzednie połączenie opuści kompozycję, stan jest tymczasowo zachowywany. Jeśli do kompozycji wejdzie 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ą powiadomieni.Jeśli funkcja lambda
movableContentOf
jest wywoływana wielokrotnie w tej samej kompozycji, dla każdego wywołania tworzone są nowe stany i węzły. Gdy wywołania opuszczają kompozycję, a nowe wywołania do niej wchodzą, stan jest przenoszony z pierwszych wywołań do wywołań wchodzących w kolejności, w jakiej są wywoływane. Wszystkie stany, które nie zostały wykorzystane przez nowe połączenia, są trwale usuwane. (Ib4850)Dodano interfejs API śledzenia do kompozycji, aby umożliwić narzędziom bardziej szczegółowe śledzenie funkcji kompozycyjnych. Kompilator generuje teraz wywołania interfejsu API śledzenia, które zawierają informacje o źródle. (Ib0eb5)
Aby usunąć te wywołania i powiązane z nimi informacje o źródle z wersji produkcyjnej, 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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.2.0-alpha02
Wersja 1.2.0-alpha02 zawiera te zmiany.
Wersja 1.2.0-alpha01
12 stycznia 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.2.0-alpha01
Wersja 1.2.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaliśmy pole
identity
doCompositionData
, aby generować niezmienne identyfikatory w inspektorze układu. (Ic116e)
Aktualizacje zależności
- Teraz zależy od Kotlin
1.6.10
.
Wersja 1.1
Wersja 1.1.1
23 lutego 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.1.1
Wersja 1.1.1 zawiera te zmiany.
Poprawki błędów
- Rozwiązanie problemu
NullPointerException
na stronieandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
(aosp/1947059, b/206677462) - Naprawiliśmy awarię spowodowaną zawartością schowka podczas odczytywania danych ze schowka na urządzeniu z Androidem. (I06020, b/197769306)
- Poprawiono układ od prawej do lewej w
LazyVerticalGrid
(aosp/1931080, b/207510535)
Wersja 1.1.0
9 lutego 2022 r.
Zostanie wycofaneandroidx.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 obszaru dotyku
- 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 docelowego elementu dotykowego. Na przykład docelowy element dotykowy przycisku zostanie powiększony 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ójność, jeśli używasz widoków i biblioteki 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
- Przenosi kilka wcześniej eksperymentalnych interfejsów API do wersji stabilnej.
- Obsługa nowszych wersji języka Kotlin
Wersja 1.1.0-rc03
26 stycznia 2022 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.1.0-rc03
Wersja 1.1.0-rc03 zawiera te zmiany.
Poprawki błędów
- Zaktualizowano, aby obsługiwać Compose Material
1.1.0-rc03
Wersja 1.1.0-rc01
15 grudnia 2021 roku
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.1.0-rc01
Wersja 1.1.0-rc01 zawiera te zmiany.
Wersja 1.1.0-beta04
1 grudnia 2021 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.1.0-beta04
Wersja 1.1.0-beta04 zawiera te zmiany.
Nowe funkcje
- Zaktualizowano, aby była zgodna z Kotlinem
1.6.0
Wersja 1.1.0-beta03
17 listopada 2021 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.1.0-beta03
Wersja 1.1.0-beta03 zawiera te commity.
Wersja 1.1.0-beta02
3 listopada 2021 r.
Zostanie wycofaneandroidx.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 roku
Zostanie wycofaneandroidx.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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.1.0-alpha06
Wersja 1.1.0-alpha06 zawiera te zmiany.
Zmiany w interfejsie API
- Usunięto
InternalCompilerApi
z metod narzędzia Composer, które muszą być wywoływane w różnych modułach (I1aa0b) Recomposer.state
został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.
Zostanie wycofaneandroidx.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.
Zostanie wycofaneandroidx.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
Zostanie wycofaneandroidx.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 Compose
1.1.0-alpha03
, aby zależał od Kotlin1.5.30
. (I74545)
Wersja 1.1.0-alpha02
18 sierpnia 2021 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.1.0-alpha02
Wersja 1.1.0-alpha02 zawiera te zmiany.
Wersja 1.1.0-alpha01
4 sierpnia 2021 r.
Zostanie wycofaneandroidx.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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.5
Wersja 1.0.5 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy awarię śledzenia instancji derivedStateOf. (aosp/1792247)
Wersja 1.0.4
13 października 2021 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.4
Wersja 1.0.4 zawiera te zmiany.
Aktualizacje zależności
- Zaktualizowano, aby zależał od Kotlin
1.5.31
Wersja 1.0.3
29 września 2021 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.3
Wersja 1.0.3 zawiera te zmiany.
Aktualizacje zależności
- Zaktualizowano, aby zależał od Kotlin
1.5.30
Wersja 1.0.2
1 września 2021 roku
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.2
Wersja 1.0.2 zawiera te zmiany.
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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.1
Wersja 1.0.1 zawiera te zmiany.
Aktualizacje zależności
- Zaktualizowano, aby zależał od Kotlina w wersji
1.5.21
.
Wersja 1.0.0
28 lipca 2021 roku
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0
Wersja 1.0.0 zawiera te zmiany.
Główne funkcje wersji 1.0.0
To pierwsza stabilna wersja Compose. Więcej informacji znajdziesz na oficjalnym blogu o wersji Compose.
Znane problemy
Jeśli używasz Androida Studio Bumblebee Canary 4 lub AGP
7.1.0-alpha04
/7.1.0-alpha05
, może wystąpić ten błąd:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
Aby to naprawić, tymczasowo zwiększ wartość minSdkVersion do 24 lub więcej w pliku
build.gradle
. Ten problem zostanie rozwiązany w kolejnej wersji Androida Studio Bumblebee i AGP7.1
. (b/194289155)
Wersja 1.0.0-rc02
14 lipca 2021 roku
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-rc02
Wersja 1.0.0-rc02 zawiera te zmiany.
- Rozwiązaliśmy problem z warunkami wyścigu w obserwatorze SnapshotStateObserver, który powodował sporadyczne wyjątki NullPointerException. (aosp/1763445, aosp/1758105, b/192677711)
- Rozwiązaliśmy problemy z migawkami czasu działania powodującymi 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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-rc01
Wersja 1.0.0-rc01 zawiera te zmiany.
Wersja 1.0.0-beta09
16 czerwca 2021 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-beta09
Wersja 1.0.0-beta09 zawiera te zmiany.
Dodano reguły profilu
W tej wersji dodaliśmy 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.txt
znajdującym się w katalogusrc/main
lub w odpowiednim katalogu. Plik zawiera regułę w każdym wierszu. Reguła jest w tym przypadku 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 ...
. Reguły te 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
,S
iP
. Wskazuje on, czy ta metoda powinna być oznaczona jako „Hot”, „Startup” lub „Post Startup”.<CLASS_DESCRIPTOR>
to deskryptor klasy, do której należy kierowana metoda. Na przykład klasaandroidx.compose.runtime.SlotTable
będzie miała deskryptorLandroidx/compose/runtime/SlotTable;
.Symbol
<METHOD_SIGNATURE>
to sygnatura metody, która zawiera jej nazwę, typy parametrów i typy zwracanych wartości. Na przykład metodafun isPlaced(): Boolean
wLayoutNode
ma 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 oznaczona flagą
H
jest metodą „gorącą” i powinna być skompilowana z wyprzedzeniem.Metoda z flagą
S
wskazuje, że jest to metoda wywoływana podczas uruchamiania i powinna być skompilowana z wyprzedzeniem, aby uniknąć kosztów kompilacji i interpretacji metody podczas uruchamiania.Metoda oznaczona flagą
P
jest 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 następnie użyte do utworzenia kompaktowego binarnego profilu ART, który jest specyficzny dla aplikacji. ART może następnie wykorzystać ten profil podczas instalowania aplikacji na urządzeniach, aby skompilować z wyprzedzeniem określony podzbiór aplikacji i zwiększyć jej wydajność, zwłaszcza podczas pierwszego uruchomienia. Nie będzie to miało wpływu na aplikacje, które można debugować.
Wersja 1.0.0-beta08
2 czerwca 2021 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-beta08
Wersja 1.0.0-beta08 zawiera te zmiany.
Zmiany w interfejsie API
State<T>
to terazState<out T>
(I69049)ControlledComposition
Zmiana interfejsu API umożliwiająca ponowne komponowanie zmian w jednym przebiegu. (Iaafd1, b/184173932)
Wersja 1.0.0-beta07
18 maja 2021 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-beta07
Wersja 1.0.0-beta07 zawiera te zmiany.
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 będzie próbował ponownie wykorzystać węzły w swojej treści zamiast je zastępować, gdy klucz zostanie zmieniony. Po zmianie klucza 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óre ponownie wykorzystuje wyemitowany węzeł zamiast go zastępować, jak to ma miejsce w przypadkuComposeNode
. (I1dd86)@ComposeCompilerApi
nie jest już@RequiresOptIn
(Iab690)
Poprawki błędów
- Komponenty LazyColumn i LazyRow będą teraz utrzymywać do 2 wcześniej widocznych elementów w stanie aktywnym (nieusuniętym), 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
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-beta06
Wersja 1.0.0-beta06 zawiera te zmiany.
Zmiany w interfejsie API
@ComposeCompilerApi
nie jest już@RequiresOptIn
(Iab690)
Wersja 1.0.0-beta05
21 kwietnia 2021 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-beta05
Wersja 1.0.0-beta05 zawiera te zmiany.
Zmiany w interfejsie API
- Usunięto
@InternalComposeApi
w przypadku odczytów i zapisów zrzutów nagrań (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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-beta04
Wersja 1.0.0-beta04 zawiera te zmiany.
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
ShowCount
zawsze 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życia z parametrami wejściowymi (I1b110, b/182403380).
Wersja 1.0.0-beta03
24 marca 2021 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-beta03
Wersja 1.0.0-beta03 zawiera te zmiany.
Zmiany w interfejsie API
- Środowisko wykonawcze
DefaultMonotonicFrameClock
zostało wycofane. Wywołanie funkcjiwithFrameNanos
lubRecomposer.runRecomposeAndApplyChanges
bez argumentuMonotonicFrameClock
spowoduje teraz zgłoszenie błęduIllegalStateException
. (I4eb0d)
Wersja 1.0.0-beta02
10 marca 2021 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-beta02
Wersja 1.0.0-beta02 zawiera te zmiany.
Poprawki błędów
- Wymuszanie ograniczeń dotyczących publicznego korzystania z eksperymentalnych interfejsów API (I6aa29, b/174531520)
- Poprawka uszkodzonego elementu
rememberSaveable { mutableStateOf(0) }
, gdy jest używany w miejscu docelowym nawigacji w Compose. (I1312b, b/180042685, b/180701630)
Wersja 1.0.0-beta01
24 lutego 2021 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-beta01
Wersja 1.0.0-beta01 zawiera te zmiany.
To pierwsza wersja Compose 1.0.0 w wersji beta.
Zmiany w interfejsie API
- Dodano
Recomposer.runRecomposeConcurrentlyAndApplyChanges
eksperymentalny interfejs API do ponownego komponowania unieważnionych kompozycji poza główną pętlą klatek. (I342d0) - 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).
Pole
defaultFactory
dlacompositionLocalOf
istaticCompositionLocalOf
jest 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 referencja null.
W przypadku typów dopuszczających wartość null rozważ podanie wartości
{ null }
jako domyślnej funkcji 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
defaultFactory
powinna zgłosić wyjątek. Wyjątek oznacza jednak, że konsumenci lokalnego będą mieli niejawną zależność od jego dostarczenia, która nie jest wymuszana przez system typów. (Ifbd2a)Usunięto z środowiska wykonawczego funkcji Compose wycofane symbole (I3252c)
Wycofany element
emptyContent()
został usunięty. Zamiast niej używaj zasady{}
. (Idb33f, b/179432510)Element Providers został zmieniony 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.
- Typ ComposableLambda został zmieniony z klasy konkretnej na interfejs i nie ma już parametrów typu.
- ComposableLambdaN stał się interfejsem zamiast konkretnej klasy 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ż potrzebny.
- Funkcje keySourceInfoOf i resetSourceInfo zostały usunięte. Nie są już potrzebne.
- Funkcja Composer.collectKeySourceInformation została usunięta. Nie jest już potrzebny.
- 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 języku Kotlin spowoduje to przerwanie zgodności binarnej, ale nie zgodności kodu źródłowego, 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
icon
w elemencie BottomNavigationItem został przeniesiony i jest teraz po parametrachselected
ionClick
. - Zmieniono nazwę parametru
alwaysShowLabels
w elemencie BottomNavigationItem naalwaysShowLabel
. - W kilku komponentach zmieniliśmy nazwy parametrów
bodyContent
nacontent
. - Zmieniono kolejność parametrów w zdarzeniu
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 nazwanych parametrów lub ręcznie zaktualizuj kolejność, w przeciwnym razie kod nie będzie działać tak jak wcześniej. - Dodano parametr
secondaryVariant
dodarkColors()
. Ten kolor jest zwykle taki sam jaksecondary
w ciemnym motywie, ale dodajemy go, aby zapewnić spójność i umożliwić dalsze dostosowywanie. - Usunęliśmy z publicznego interfejsu API funkcje ElevationDefaults i animateElevation(), ponieważ nie były one powszechnie używane ani przydatne.
- Zmieniono nazwę
onValueChangeEnd
wSlider
naonValueChangeFinished
i ustawiono możliwość przyjmowania wartości null. - Zmieniono nazwę parametru
text
wSnackbar
nacontent
, aby zachować spójność. - Dodano parametr
contentPadding
doDropdownMenuItem
, aby umożliwić dostosowywanie domyślnego dopełnienia, i sprawiono, żecontent
jest rozszerzeniemRowScope
. - Zmieniono nazwę
ModalDrawerLayout
naModalDrawer
. - Zmieniono nazwę
BottomDrawerLayout
naBottomDrawer
. - (I1cc66)
Wersja 1.0.0-alpha12
10 lutego 2021 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-alpha12
Wersja 1.0.0-alpha12 zawiera te zmiany.
Zmiany w interfejsie API
- Usunięto obsługę grup widoków z klasy UiApplier. Usunięto wycofane funkcje emitView. (Ifb214)
- Zmiana nazwy CompositionReference na CompositionContext (I53fcb)
- Funkcja ComponentActivity.setContent została przeniesiona do 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)
- Zmieniliśmy nazwę Ambients, aby pasowała do zmiany nazwy Ambient -> CompositionLocal. Komponenty Ambients miały wcześniej nazwy AmbientFoo, a teraz komponenty CompositionLocals mają nazwy LocalFoo. (I2d55d)
- Zmieniliśmy nazwę 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)
@ComposableContract
został 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ż żadnego pozytywnego wpływu na wydajność ani wartości (I0484d).
snapshotFlow
iwithMutableSnapshot
nie są już eksperymentalne (I6a45f)Recomposery można teraz zamknąć. Zamknięte kompozytory będą kontynuować rekompozycję, 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-dispatch
został wycofany. Klasa MonotonicFrameClock znajduje się teraz w pakiecie compose:runtime, a klasa AndroidUiDispatcher – w pakiecie compose:ui. (Ib5c36)Interfejs API, na który jest kierowana wtyczka kompilatora Compose, został przekształcony tak, aby używać interfejsu zamiast klasy konkretnej. 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ą 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. Ponowne komponowanie i tyknięcia animacji oparte na withFrameNanos są wstrzymywane, gdy cykl życia hosta jest zatrzymany. (I38e11)
Właściwość Recomposer.runningRecomposers udostępnia teraz globalny obiekt StateFlow tylko do odczytu RecomposerInfo, który umożliwia obserwowanie stanu bieżącej kompozycji w procesie. Zalecamy używanie tego interfejsu API zamiast Recomposer.current(), który jest obecnie wycofany. (If8ebe)
Klasa DisposableEffectDisposable została zmieniona na DisposaleEffectResult (I3ea68)
Wersja 1.0.0-alpha11
28 stycznia 2021 roku
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-alpha11
Wersja 1.0.0-alpha11 zawiera te zmiany.
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 teraz wycofany.
RememberObserver
zastępujeCompositionLifecycleObserver
, ale ma zmodyfikowaną semantykę i zmienione nazwy 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 i nadal nią pozostanie. Jeśli jednak odwołanie zostało zapamiętane w kompozycji więcej niż raz, funkcjaonRemembered
jest wywoływana dla każdego odwołania, a funkcjaonEnter
jest wywoływana tylko raz.onEnter
było wywoływane wielokrotnie, jeśli obiekt był używany w podkompozycjach, np.WithConstraints
iScaffold
, co sprawiało, że pojedyncze wywołanieonEnter
było niewiarygodne i zostało usunięte w przypadkuRememberObserver
.RememberObserver
dodajeonAbandoned
, które jest wywoływane, jeśli instancjaRememberObserver
jest 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 instancjaRememberObserver
po rekomendacji pojedynczego odwołania powyżej śledzi zasób zewnętrzny, zarównoonForgotten
, jak ionAbandoned
wskazują, że zasób nie jest już potrzebny. Jeśli obiekt śledzi pracę rozpoczętą lub zasoby przydzielone wonRemembered
,onAbandoned
można zignorować, ponieważ nie zostanie wywołany, jeśli zostanie wywołanyonRemembered
. (I02c36)Nie oznaczaj funkcji
collectAsState()
jako wbudowanych (Ia73e4)
Poprawki błędów
- Funkcja WithConstraints została przekształcona w BoxWithConstraints i przeniesiona do pakietu foundation.layout. (I9420b, b/173387208)
- Używanie TestCoroutineDispatcher w testach (I532b6)
Wersja 1.0.0-alpha10
13 stycznia 2021 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-alpha10
Wersja 1.0.0-alpha10 zawiera te zmiany.
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 wewnętrznych i eksperymentalnych interfejsach 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
- Dodano 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. Dodano interfejsy API do instalowania i wykrywania Recomposers i CompositionReferences w zakresie okna na potrzeby tworzenia kompozycji podrzędnych.
Dodaj ViewCompositionStrategy, aby skonfigurować strategię usuwania kompozycji w przypadku [Abstract]ComposeView. Domyślne działanie to usuwanie po odłączeniu od okna. (I860ab)
Poprawki błędów
- Recomposer udostępnia teraz Flow z bieżącym stanem, co umożliwia monitorowanie jego aktywności i aktywności powiązanych efektów. (Ifb2b9)
- Do natywnego zdarzenia keyEvent można teraz uzyskać dostęp za pomocą keyEvent.nativeKeyEvent (I87c57, b/173086397).
Wersja 1.0.0-alpha09
16 grudnia 2020 roku
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-alpha09
Wersja 1.0.0-alpha09 zawiera te zmiany.
Zmiany w interfejsie API
Usunęliśmy z publicznego interfejsu API klasy SlotTable, SlotReader i SlotWriter. Wcześniej były one oznaczone jako InternalComposeAPI. Teraz są one wewnętrzne w module kompozycji.
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ą surowe informacje, które interpretuje ten interfejs (I31a9c).
Klasa Applier nie jest już uważana za (Id85b0)
Interfejs
Applier
został zmieniony, aby uprościć tworzenie drzew od dołu do góry, a nie od góry do dołu.Nazwa metody
insert()
została zmieniona nainsertTopDown()
.Dodano nową metodę:
insertBottomUp()
.Aplikacja wstawia węzły do edytowanego drzewa za pomocą funkcji
insertTopDown()
lubinsertBottomUp()
w zależności od tego, która z nich jest bardziej skuteczna.Niektóre drzewa, np.
LayoutNode
iView
, znacznie łatwiej jest budować od dołu niż od góry. Przed wprowadzeniem tej zmiany do wdrożenia metody 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 ze względu na wydajność. Po tej zmianieApplier
zastępujeinsertBottomUp()
budowanie drzewa od dołu do góry, ainsertTopDown()
– 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 właściwości:
@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 składnia zostanie ostatecznie uznana za błąd kompilacji. (Id9197)
Poprawki błędów
- AndroidOwner made internal (Ibcad0, b/170296980)
- Funkcja subcomposeInto(LayoutNode) została oznaczona jako wewnętrzna (Id724a)
Wersja 1.0.0-alpha08
2 grudnia 2020 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-alpha08
Wersja 1.0.0-alpha08 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano sprawdzanie składni nazw i pozycji parametrów funkcji lambda, aby zapewnić zgodność ze wskazówkami dotyczącymi Compose.
Zgodnie z kontrolą składni i wskazówkami zmieniliśmy też nazwy niektórych interfejsów API, które używały
children
jako nazwy funkcji lambda na końcu, nacontent
. (Iec48e) - Recomposer nie akceptuje już parametru EmbeddingContext; wymagane zależności harmonogramowania są uzyskiwane z parametru effectCoroutineContext. Interfejs FrameManager został wycofany. Integracje platform powinny inicjować własną globalną obsługę zrzutów. (I02369)
- Funkcja RestorableStateHolder.withRestorableState została zmieniona na RestorableStateProvider (I66640)
Poprawki błędów
- Wycofaliśmy właściwości Ambients, których nazwy miały sufiks
Ambient
, i zastąpiliśmy je nowymi właściwościami z prefiksem Ambient, zgodnie z innymi właściwościami Ambients 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
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-alpha07
Wersja 1.0.0-alpha07 zawiera te zmiany.
Nowe funkcje
Zmiany w interfejsie API
- Adnotacja
@UnionType
została wycofana (I57cde) - Funkcja provideDefault została dodana jako alternatywa dla funkcji provide w przypadku przekazywania danych o otoczeniu. Można jej używać do określania wartości otoczenia, które będą ustawiane tylko wtedy, gdy nie ma już podanej wartości otoczenia. (Id6635, b/171024925)
- Aby zachować spójność z interfejsami SideEffect i DisposableEffect API, nazwa LaunchedTask została zmieniona 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 parametru 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 przestarzałe adaptery rxjava2, które nie przyjmują wartości początkowej (Idb72f).
Poprawki błędów
- foundation.Text został wycofany i zastąpiony przez material.Text. Podstawowy interfejs API tekstu, który nie korzysta z 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 pakietu androidx.compose.layout.ui. (I0fa98, b/170475424)
Wkład zewnętrzny
- Dodano moduł
runtime-rxjava3
do tworzenia wiadomości. Podobne doruntime-rxjava2
(I02cbf)
Wersja 1.0.0-alpha06
28 października 2020 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-alpha06
Wersja 1.0.0-alpha06 zawiera te zmiany.
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 DisposableEffect do interfejsu SideEffect API, który pełni rolę funkcji onCommit z parametrami, ale wymaga funkcji onDispose.
- Dodano interfejs API rememberUpdatedState, który umożliwia publikowanie danych z ponownego komponowania 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 skomponować następnym razem z przywróconym stanem. (I66884, b/166586419)
Poprawki błędów
- Włącz przejścia w ComposeTestRule; usuń opcję włączania migającego kursora z ComposeTestRule. (If0de3)
Wersja 1.0.0-alpha05
14 października 2020 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-alpha05
Wersja 1.0.0-alpha05 zawiera te zmiany.
Zmiany w interfejsie API
- Experimental Modifier.pointerInput suspending input modifier (Ia77d2)
- Wydajność przewijania elementów LazyColumn/Row jest większa, ponieważ podczas każdego przewijania wykonuje się mniej pracy w kompozycji podrzędnej. Do klasy Composition dodano nową metodę hasInvalidations(). Metoda hasPendingChanges() z klasy Recomposer została zmieniona na hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371).
- Dodanie interfejsu produceState API do uruchamiania korutyn z kompozycji, które aktualizują pojedynczą wartość
State<T>
w czasie (Id4a57) - Zmiana nazwy launchInComposition na LaunchedTask, aby była zgodna z wytycznymi dotyczącymi interfejsu API Compose (I99a8e)
- Kolejność wywołań funkcji 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
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-alpha04
Wersja 1.0.0-alpha04 zawiera te zmiany.
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 API derivedStateOf 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
- Komponent foundation.Box został wycofany. Zamiast tego użyj foundation.layout.Box. (Ie5950, b/167680279)
Wersja 1.0.0-alpha03
16 września 2020 roku
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-alpha03
Wersja 1.0.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
CompositionCoroutineScope
nie implementuje jużMonotonicFrameClock
. Osoby wywołujące funkcjęwithFrameNanos
powinny jawnie zaimportować funkcję najwyższego poziomu. (Icb642, b/166778123)
Poprawki błędów
- Funkcje testowania globalnego, takie jak
onNode
czywaitForIdle
, są teraz wycofane. Przejdź na ich nowe odpowiedniki zdefiniowane w ComposeTestRule (I7f45a). launchInComposition
nie uruchamia już współprogramów bez wysyłania (Ief6af, b/166486000)
Wersja 1.0.0-alpha02
2 września 2020 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-alpha02
Wersja 1.0.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodanie interfejsów API
snapshotFlow
iwithMutableSnapshot
do wykorzystywania i generowania zmian danych migawki. (I3e722) Konwencja wywoływania funkcji kompozycyjnych uległa zmianie. Jest to zmiana powodująca niezgodność binarną. 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 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 klatce choreografa, w której wprowadzane są zmiany w kompozycji, a nie na początku następnej klatki choreografa. (I70403)
Wersja 1.0.0-alpha01
26 sierpnia 2020 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:1.0.0-alpha01
Wersja 1.0.0-alpha01 zawiera te zmiany.
Wersja 0.1.0-dev
Wersja 0.1.0-dev17
19 sierpnia 2020 r.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:0.1.0-dev17
Wersja 0.1.0-dev17 zawiera te zmiany.
Zmiany w interfejsie API
- Niestandardowe funkcje emitujące mogą teraz deklarować, że co najmniej jeden z ich setterów może zostać pominięty i ponownie skomponowany 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(...) }
, aby zwiększyć przejrzystość. 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 błąd powodujący awarię, gdy w pętli for użyto czegoś, co zapisuje stan. Teraz ten sam klucz w metodzie savedInstanceState() jest dozwolony, więc interfejs API UiSavedStateRegistry został dostosowany do tego nowego wymagania (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561).
Poprawki błędów
- Środowisko wykonawcze
emitView
zostało wycofane. Jeśli to możliwe, używajAndroidView
do 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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:0.1.0-dev16
Wersja 0.1.0-dev16 zawiera te zmiany.
Zmiany w interfejsie API
Domyślna zasada mutacji w przypadku
mutableStateOf()
,ambientOf()
isavedInstanceStateOf()
została zmieniona 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
ambientOf()
isavedInstanceStateOf()
używają w swoich implementacjachmutableStateOf()
, więc zostały zmienione, aby były zgodne zmutableStateOf()
.Używanie równości strukturalnej jest bardziej zgodne z oczekiwaniami deweloperów.
Na przykład
val state = mutableStateOf(1f)
po którym następuje
state.value = 1f
nie będzie już uznawana za zmianę w
state
, a użyciestate
podczas tworzenia kompozycji nie będzie wymagało ponownego komponowania.Jest to zmiana powodująca niezgodność, ale w większości przypadków (np. gdy używasz klas, które nie zastępują
equals()
) nie będzie 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)Funkcje
Row
iColumn
są teraz funkcjami wbudowanymi, co znacznie zmniejsza obciążenie związane z ich używaniem. (I75c10)
Poprawki błędów
- Funkcja setViewContent została wycofana. Zamiast niej należy używać funkcji setContent. (I7e497, b/160335130)
Dodano klasę MonotonicFrameAnimationClock, która umożliwia używanie klasy MonotonicFrameClock jako klasy 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 MonotonicFrameClock w przypadku klasy ManualAnimationClock jest teraz klasa ManualFrameClock. (I111c7, b/161247083)
Funkcja Modifier.stateDraggable została całkowicie przekształcona i zmieniono jej nazwę na Modifier.swipeable. Wprowadziliśmy 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)
Funkcja Modifier.plus została wycofana. Zamiast niej używaj funkcji Modifier.then. Słowo „wtedy” silniej sygnalizuje kolejność, a także uniemożliwia wpisanie znaku
Modifier.padding().background() + anotherModifier
, który przerywa ciąg i utrudnia czytanie (Iedd58, b/161529964).Dodano SubcomposeLayout. Jest to element podstawowy niskiego poziomu, który umożliwia komponowanie elementów podrzędnych podczas pomiaru, jeśli chcemy użyć wartości dostępnych dopiero później podczas pomiaru do kompozycji poddrzewa. Na przykład WithConstraints nie jest zaimplementowany przy użyciu SubcomposeLayout. (I25cc8)
Komponent Material FilledTextField został zmieniony na TextField, a komponent podstawowy 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.
Zostanie wycofaneandroidx.compose.runtime:runtime-*:0.1.0-dev15
Wersja 0.1.0-dev15 zawiera te zmiany.
Aktualizacja zależności
- Aby używać wersji
0.1.0-dev15
biblioteki Compose, musisz zaktualizować zależności zgodnie z nowymi fragmentami kodu pokazanymi powyżej w sekcji Deklarowanie zależności.
Zmiany w interfejsie API
Adnotacja
@Model
została wycofana. Użyj state i mutableStateOf jako alternatyw. Decyzja o wycofaniu została podjęta po dokładnym rozważeniu wszystkich argumentów.Uzasadnienie
Uzasadnienie może obejmować 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
@Model
jako elementów, którymi musimy się zająć. @Model
klasy danych, equals, hashcode itp.- Jak sprawić, aby niektóre właściwości były „obserwowane”, a inne nie?
- Jak określić, czy w obserwacji ma być używane poró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 ustawień do poszczególnych stanów.
- Jest bardziej zgodny z pozostałą częścią ekosystemu i zmniejsza niejednoznaczność w odniesieniu do niezmiennych lub „przyjmujących zmienny stan”
Notatki dotyczące migracji
Prawie wszystkie dotychczasowe zastosowania symbolu
@Model
można w prosty sposób przekształcić na jeden z 2 sposobów. W przykładzie poniżej znajduje się klasa@Model
z 2 właściwościami (tylko na potrzeby przykładu) 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 polecenia
State<OriginalClass>
i utwórz kopie.To podejście jest łatwiejsze dzięki klasom danych w języku Kotlin. Wszystkie dotychczasowe właściwości
var
przekształć we właściwościval
klasy danych, a potem używajstate
zamiastremember
i przypisuj wartość stanu do sklonowanych kopii oryginału za pomocą metody wygodycopy(...)
klasy danych.Pamiętaj, ż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 mutableStateOf i delegatów właściwości
Ułatwiają to delegaty właściwości Kotlin i interfejs
mutableStateOf
API, który umożliwia tworzenie instancji MutableState poza kompozycją. Zastąp wszystkie właściwościvar
oryginalnej klasy właściwościamivar
, których delegatem właściwości jestmutableStateOf
. Dzięki temu sposób użycia klasy nie zmieni się w żaden sposób, a jedynie jej wewnętrzna implementacja. Zachowanie nie jest jednak całkowicie identyczne z oryginalnym przykładem, ponieważ każda właściwość jest teraz obserwowana lub subskrybowana indywidualnie, więc ponowne kompozycje, które zobaczysz po refaktoryzacji, mogą być węższe (co jest korzystne).class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
(I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)
Zmienia strategię generowania kodu kompilatora Compose. Przed zmianą kompilator Compose przekształcał wywołania funkcji kompozycyjnych. Dzięki tej zmianie przekształcamy treść funkcji kompozycyjnej, a miejsce wywołania pozostaje (w większości przypadków) bez zmian.
Oznacza to, że większość logiki komunikującej się z środowiskiem wykonawczym funkcji kompozycji znajduje się na początku treści funkcji, a nie w miejscu wywołania.
Powinna to być zmiana zgodna ze źródłem w przypadku wszystkich zastosowań funkcji compose. Większość użytkowników Compose nie będzie musiała aktualizować kodu w wyniku tej zmiany.
Aby to umożliwić, zmieniliśmy sygnaturę JVM wszystkich funkcji kompozycyjnych. Funkcja Composable przyjmująca 1 parametr jest przekształcana w funkcję przyjmującą 3 parametry. Dodatkowe parametry to Composer, 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ę z możliwością komponowania. Nie wprowadza to dodatkowego syntetycznego przeciążenia domyślnego samej funkcji, więc ta zmiana spowoduje zdefiniowanie mniejszej liczby funkcji.
Znane celowe zmiany w zachowaniu wynikające z tego:
- Niektóre połączenia będą pomijane w miejscach, w których wcześniej nie były pomijane.
- 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. Dzięki temu w czasie działania aplikacji będzie wykonywanych mniej porównań, zmniejszy się rozmiar tabeli slotów, a także będzie można pominąć więcej funkcji kompozycyjnych, które wcześniej nie były pomijane. Parametry, które w momencie kompilacji są uznawane za „statyczne”, nie są już porównywane ani przechowywane w środowisku wykonawczym. 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. Composer::call został wycofany 4. Przeciążenia funkcji
key
, które nie przyjmują argumentów o zmiennej liczbie, zostały usunięte. Od teraz używaj wersjivararg
. 5. Adnotacja Pivotal została wycofana. Użyjkey
jako 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)
Dodaliśmy metodę 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ść działania, a nie inne wymagania, i jest przeznaczona do użytku wyłącznie w implementacjach wewnętrznych. (I8ebd6)
Tymczasowo usunęliśmy
StableMutableList
iStableMutableMap
, aby uniknąć problemu w wersji Kotlin Compose, której wymaga. Te interfejsy zostaną przywrócone, gdy biblioteka Compose zostanie zaktualizowana do wersji języka Kotlin, w której ten problem nie występuje.SnapshotStateList
iSnapshotStateMap
są teraz publiczne, ale zostaną wycofane, gdy przywrócimyStableMutableList
iStableMutableMap
. (Ia7769)dodanie funkcji najwyższego poziomu withFrameNanos do określania czasu animacji (Ie34c5);
Adnotacja @Untracked została wycofana. Zastąp @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ć, czym jest ta klasa, gdy pojawia się w śladach stosu (I7eb25).
Adnotacja @Composable nie jest już prawidłowa w przypadku klas (Ia5f02)
Ambient<T>
ma teraz wartość @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 istniał (I5205a, b/158123804).
Funkcja kompozycyjna Recompose nie jest już przydatną abstrakcją. Większość ponownego komponowania powinna następować w wyniku przypisań MutableState. W innych przypadkach zalecamy użycie funkcji
invalidate
, aby wywołać ponowne skomponowanie bieżącego zakresu. (Ifc992)Obserwacja nie jest już przydatną abstrakcją. Jeśli chcesz ją powielić, możesz to zrobić, tworząc funkcję kompozycyjną, 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 korzystać z 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 jest to już obsługiwany przypadek użycia. Metoda Compose.composeInto została wycofana. Zamiast tego użyj zdarzenia
setContent
lubsetViewContent
. Metoda Compose.disposeComposition została wycofana. Zamiast tego użyj metodydispose
na obiekcieComposition
zwró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).Zaktualizowano flagę
ComposeFlags.COMPOSER_PARAM
natrue
, co zmieni strategię generowania kodu w przypadku wtyczki do pisania. W dużym uproszczeniu powoduje to, że funkcje @Composable są generowane z dodatkowym parametrem syntetycznym, który jest przekazywany do kolejnych wywołań @Composable, aby środowisko wykonawcze mogło prawidłowo zarządzać wykonaniem. Jest to istotna zmiana binarna, która jednak powinna zachować zgodność na poziomie kodu źródłowego we wszystkich dozwolonych przypadkach użycia funkcji Compose. (I7971c)Zmiany powodujące niezgodność w interfejsie API ambients. Szczegółowe informacje znajdziesz w dzienniku 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 rozwiązaniem domyślnym, np. w przypadku listy lepiej jest zacząć od emptyList() lub innego rozsądnego rozwiązania domyślnego (I00025, b/161348384).
Dodano ui-rxjava2 – nowy artefakt z adapterami do 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
- Nazwa została zmieniona na
runOnIdle
(I83607)runOnIdleCompose
- Udostępniliśmy eksperymentalny interfejs API LayoutNode (I4f2e9).
- Interfejsy androidx.ui.foundation.TextFieldValue i androidx.ui.input.EditorValue zostały wycofane. Komponenty TextField, FilledTextField i CoreTextField, które używają tego typu, również zostały wycofane. Zamiast tego użyj 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 drawBackground, aby zmniejszyć liczbę ścieżek kodu, a także usunąć wymaganie tworzenia modyfikatora w ramach kompozycji. (I0343a)
- Zaktualizowano interfejsy API Compose wyższego poziomu, które udostępniają Canvas, aby zamiast tego udostępniać CanvasScope. Eliminuje to konieczność utrzymywania przez konsumentów własnych obiektów Paint. Użytkownicy, którzy nadal potrzebują dostępu do elementu Canvas, mogą użyć metody drawCanvas, 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 symetrycznego dopełnienia. (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 odbiorcy funkcji draw() na ContentDrawScope
- Usunięto wszystkie parametry funkcji draw()
- DrawScope ma taki sam interfejs jak poprzednia wersja CanvasScope.
- ContentDrawScope ma metodę drawContent() (Ibaced, b/152919067)
- Komponent ColoredRect został wycofany. Zamiast niej używaj zasady
Box(Modifier.preferredSize(width, height).drawBackground(color))
. (I499fa, b/152753731) - Zastąpienie operatora „Modyfikator plus” funkcjami rozszerzenia fabrycznego (I225e4)
- Elementy RowScope i ColumnScope są teraz dostępne poza wierszem i kolumną. (I3a641)
- Zmieniono nazwę LayoutFlexible na LayoutWeight. Zmieniono nazwę parametru „tight” na „fill”. (If4738)
- WithConstraints ma parametr LayoutDirection (I6d6f7)
- Zmieniono nazwę tła na DrawBackground i ustawiono domyślne zapamiętywanie (Ia0bd3).
- Zastąpiono ButtonStyle odrębnymi funkcjami i usunięto przeciążenie tekstu (ciągu znaków). Informacje o użytkowaniu znajdziesz w zaktualizowanych przykładach. (If63ab, b/146478620, b/146482131)
runOnIdleCompose
irunOnUiThread
są teraz funkcjami globalnymi, a nie metodami w ComposeTestRule. (Icbe8f)
Wkład zewnętrzny
- Usunięcie z warstwy przenoszenia środowiska wykonawczego Compose niepotrzebnych interfejsów API, takich jak Looper i Handler (I6847d)
- Wycofaj
Flow<T>.collectAsState()
bez wartości początkowej. Zamiast tego użyjStateFlow<T>
lub przekaż wyraźną wartość początkową. (I63f98, b/157674865)