Środowisko wykonawcze Compose
androidx.compose.runtime
androidx.compose.runtime.rxjava2
androidx.compose.runtime.rxjava3
androidx.compose.runtime.saveable
androidx.compose.runtime.snapshots
(informacje o wszystkich pakietach compose znajdziesz w dokumentacji interfejsu API)
Ostatnia aktualizacja | Wersja stabilna | Wersja kandydująca | Wersja Beta | Wersja alfa |
---|---|---|---|---|
13 listopada 2024 r. | 1.7.5 | - | - | 1.8.0-alpha06 |
Struktura
Składnik jest kombinacją 7 identyfikatorów grupy Maven w ramach androidx
. Każda grupa zawiera określony podzbiór funkcji, z którym wiąże się własny zestaw informacji o wydańach.
Ta tabela zawiera informacje o grupach i linki do poszczególnych zestawów informacji o wersji.
Grupa | Opis |
---|---|
compose.animation | tworzyć animacje w aplikacjach Jetpack Compose, aby wzbogacać wrażenia użytkowników. |
compose.compiler | Przekształcaj funkcje @Composable i włącz optymalizacje za pomocą wtyczki kompilatora Kotlin. |
compose.foundation | Pisać aplikacje Jetpack Compose za pomocą gotowych elementów składowych i rozwijać podstawy, aby tworzyć własne elementy systemu projektowania. |
compose.material | Tworzenie interfejsów Jetpack Compose za pomocą gotowych komponentów Material Design. Jest to punkt wejścia na wyższym poziomie w Compose, który ma na celu udostępnianie komponentów odpowiadających komponentom opisanym na stronie www.material.io. |
compose.material3 | Twórz interfejsy Jetpack Compose za pomocą komponentów Material Design 3, czyli kolejnej generacji Material Design. Material 3 obejmuje zaktualizowane motywy i elementy oraz funkcje personalizacji Material You, takie jak dynamiczne kolory. 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 środowisko uruchomieniowe główne dla wtyczki kompilatora Compose, na które ma być nakierowany. |
compose.ui | Podstawowe elementy interfejsu tworzenia wiadomości, które są potrzebne do interakcji z urządzeniem, w tym układ, rysowanie i wprowadzanie danych. |
Deklarowanie zależności
Aby dodać zależność od Compose, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Maven firmy Google.
Dodaj zależności dla artefaktów, których potrzebujesz, w pliku build.gradle
aplikacji lub modułu:
Groovy
dependencies { implementation "androidx.compose.runtime:runtime:1.7.6" implementation "androidx.compose.runtime:runtime-livedata:1.7.6" implementation "androidx.compose.runtime:runtime-rxjava2:1.7.6" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.runtime:runtime:1.7.6") implementation("androidx.compose.runtime:runtime-livedata:1.7.6") implementation("androidx.compose.runtime:runtime-rxjava2:1.7.6") } 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 zauważysz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk z gwiazdką.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Śledzenie w środowisku wykonawczym, wersja 1.7
Wersja 1.7.0-rc01
18 września 2024 r.
androidx.compose.runtime:runtime-tracing:1.7.0-rc01
został zwolniony. Wersja 1.7.0-rc01 zawiera te komity.
Śledzenie środowiska wykonawczego w wersji 1.0
Wersja 1.0.0-beta01
29 listopada 2023 r.
androidx.compose.runtime:runtime-tracing:1.0.0-beta01
został zwolniony. Wersja 1.0.0-beta01 zawiera te commity.
Wersja 1.0.0-alpha05
15 listopada 2023 r.
androidx.compose.runtime:runtime-tracing:1.0.0-alpha05
został zwolniony. Wersja 1.0.0-alpha05 zawiera te commity.
Poprawki błędów
- Zablokowane zależności do najstarszych obsługiwanych wersji stabilnych (np. compose-runtime i tracing-perfetto) – rozwiązano problem, w którym interfejs kompozytowy z funkcjami śledzenia powodował w aplikacji wdrożenie nowszej wersji interfejsu kompozytowego.
Wersja 1.0.0-alpha04
23 sierpnia 2023 r.
androidx.compose.runtime:runtime-tracing:1.0.0-alpha04
został zwolniony. Wersja 1.0.0-alpha04 zawiera te commity.
Nowe funkcje
- Zgodność z najnowszymi wersjami Benchmark i Tracing Perfetto, co umożliwia obsługę śledzenia kompozycji podczas uruchamiania aplikacji (zimny start), np. w Benchmarku AndroidX i Android Studio (od wersji Hedgehog Beta 2).
Zmiany w interfejsie API
- Nazwa
androidx.tracing.perfetto.Trace
została zmieniona naandroidx.tracing.perfetto.PerfettoSdkTrace
. (I44af8) - Dostosowanie interfejsów API pakietu SDK do śledzenia Perfecto do standardu
android.os.Trace
. (I73ba0, b/282199917) - Wymagania wstępne śledzenia podczas uruchamiania aplikacji. (Iad890)
- scalone pliki eksperymentalnego i publicznego interfejsu API (I0f2e1, b/278769092);
Wersja 1.0.0-alpha02
8 lutego 2023 r.
androidx.compose.runtime:runtime-tracing:1.0.0-alpha02
został zwolniony. Wersja 1.0.0-alpha02 zawiera te commity.
Nowe funkcje
- Brak zmian funkcjonalnych. wiele optymalizacji skuteczności w zależnych od siebie zależnościach
androidx.tracing:tracing-perfetto*
.
Wersja 1.0.0-alpha01
7 września 2022 roku
androidx.compose.runtime:runtime-tracing:1.0.0-alpha01
został zwolniony. Wersja 1.0.0-alpha01 zawiera te commity.
Nowe funkcje
androidx.compose.runtime:runtime-tracing
to biblioteka, która – przy użyciu narzędzi ją obsługujących (wkrótce) – umożliwia rozszerzone śledzenie w aplikacji Compose. Ta pierwsza wersja to 1.0.0-alpha01.
Wersja 1.8
Wersja 1.8.0-alpha06
13 listopada 2024 r.
androidx.compose.runtime:runtime-*:1.8.0-alpha06
został zwolniony. Wersja 1.8.0-alpha06 zawiera te komisy.
Zmiany w interfejsie API
- Zmiany w interfejsie
PausableComposition
API. Te zmiany są istotne w porównaniu z poprzednimi wersjami 1.8.0-alpha (od 1.8.0-alpha02), ale ponieważ są to nowe interfejsy API w wersji 1.8.0, nie zapewniają zgodności wstecznej, ponieważ nadal są w wersji alfa. (I39819) - Dodaje interfejsy narzędziowe, które umożliwiają obserwowanie tworzenia nowych kompozycji w programie Recomposer (Iaeb7e).
- Dodano certyfikat
snapshotId
typuLong
do listySnapshot
i wycofano certyfikatid
. Identyfikator snapshotu zmieniono zInt
naLong
, aby uniknąć przepełnienia identyfikatora snapshotu w systemach z bardzo wysoką częstotliwością klatek i długotrwałymi animacjami. Typ został ustawiony na „expect/actual”, aby umożliwić ustawienie tego typu jakoInt
lub innego typu na platformach, które nie mają natywnego typuLong
. Platformy, które nie mają natywnej funkcjiLong
, np. JavaScript, powinny unikać wysokich częstotliwości klatek (ponad 1000 FPS), które powodują przepełnienieInt
mniej więcej co 24 godziny. (I38ac3, b/374821679)
Poprawki błędów
- Naprawiono błąd
providesDefault
w pojedynczymprovides
. (aosp/3318540 b/374263387) - Optymalizacja
ChangeList
. (3318538)
Wersja 1.8.0-alpha05
30 października 2024 r.
androidx.compose.runtime:runtime-*:1.8.0-alpha05
został zwolniony. Wersja 1.8.0-alpha05 zawiera te komisy.
Poprawki błędów
- Naprawić błąd przepełnienia stosu podczas dodawania panelu
Int.MAX_VALUE
do tablicySnapshotIdSet
. (b/370536104, Ic4179f6) - Mikrooptymalizacje w czasie działania (I50c60)
- Zezwalanie R8 na usuwanie wywołań runtimeCheck podczas debugowania (I8c44)
- Zmień
compoundKeyOf
na iteracyjny zamiast rekurencyjny (I5817f)
Darowizna zewnętrzna
- Wdrożenie zbiorów z listami kolekcji (I7d47c)
Wersja 1.8.0-alpha04
16 października 2024 r.
androidx.compose.runtime:runtime-*:1.8.0-alpha04
został zwolniony. Wersja 1.8.0-alpha04 zawiera te komisy.
Usprawnienia dotyczące wydajności
- Podanie identyfikatora zrzutu dla rekordów stanu w konstruktorze (85c00f)
- Refaktoryzuj
SnapshotState***
, aby uniknąć błędów weryfikacji klasy (6ee4a6) - Popraw reguły R8, aby zapobiec wstawianiu rzutowania (5beb92)
- Mikrooptymalizacja operacji (d73c5c)
- Optymalizacja alokacji
SynchronizedObject
w JVM (2b043f)
Wersja 1.8.0-alpha03
2 października 2024 r.
androidx.compose.runtime:runtime-*:1.8.0-alpha03
został zwolniony. Wersja 1.8.0-alpha03 zawiera te komity.
Usprawnienia dotyczące wydajności
- Tworzenie kontekstu podrzędnego dla elementu
rememberCoroutineScope
(f61464) z minimalnym nakładem pracy- Funkcja
rememberCoroutineScope
jest zwykle używana do uruchamiania coroutines w odpowiedzi na zdarzenia, które występują po skompilowaniu. W niektórych przypadkach te zdarzenia mogą nigdy nie wystąpić, co spowoduje dodatkowe koszty tworzenia i odwoływania zadań bez żadnej korzyści. - Spraw, aby zakres zwracany przez funkcję
rememberCoroutineScope
tworzył swoją funkcjęcoroutineContext
dopiero w momencie użycia, unikając w ten sposób tworzenia i anulowania zadań, jeśli zakres nie jest używany.
- Funkcja
Wersja 1.8.0-alpha02
18 września 2024 r.
androidx.compose.runtime:runtime-*:1.8.0-alpha02
został zwolniony. Wersja 1.8.0-alpha02 zawiera te komity.
Nowe funkcje
- Dodano
PausableComposition
, które umożliwia tworzenie podkompozycji, którą można wstrzymać podczas tworzenia i stosować asynchronicznie do kompozycji. Do wstrzymywania wymagane jest wsparcie kompilatora, które jest obecnie opracowywane. (I3394b)
Wersja 1.8.0-alpha01
4 września 2024 r.
androidx.compose.runtime:runtime-*:1.8.0-alpha01
został zwolniony. Wersja 1.8.0-alpha01 zawiera te komity.
Wersja 1.7
Wersja 1.7.5
30 października 2024 r.
androidx.compose.runtime:runtime-*:1.7.5
został zwolniony. Wersja 1.7.5 zawiera te komitowane zmiany.
Wersja 1.7.4
16 października 2024 r.
androidx.compose.runtime:runtime-*:1.7.4
został zwolniony. Wersja 1.7.4 zawiera te komitowane zmiany.
Wersja 1.7.3
2 października 2024 r.
androidx.compose.runtime:runtime-*:1.7.3
został zwolniony. Wersja 1.7.3 zawiera te komity.
Wersja 1.7.2
18 września 2024 r.
androidx.compose.runtime:runtime-*:1.7.2
został zwolniony. Wersja 1.7.2 zawiera te komity.
Wersja 1.7.1
10 września 2024 r.
- Brak zmian w artefaktach na Androida. Usunięto
-desktop
artefakty i dodano-jvmStubs
oraz-linuxx64Stubs
. Żadnego z tych celów nie należy używać. Są to elementy zastępcze, które ułatwiają pracę Jetbrains Compose.
Wersja 1.7.0
4 września 2024 r.
androidx.compose.runtime:runtime-*:1.7.0
został zwolniony. Wersja 1.7.0 zawiera te komitowane zmiany.
Ważne zmiany od wersji 1.6.0
- Dodano możliwość podania wartości lokalnej kompozycji obliczonej na podstawie wartości innych wartości lokalnych kompozycji domyślnie (za pomocą funkcji
compositionLocalWithComputedDefault()
) lub podając funkcję lambda, która służy do obliczenia wartości za pomocą funkcjiprovidesComputed
zamiastprovides
. - Wartość kompozycji lokalnej można uzyskać, korzystając z właściwości
currentValue
kompozycji lokalnej dostępnej w ramach funkcji lambda obliczającej wartość. Jest ono używane zamiastcurrent
, które jest dostępne tylko w funkcjach@Composable
. (Iadbc0) - Nowo utworzone obiekty stanu są od razu dostępne z innych zrzutów, w tym zrzutu globalnego, w ich początkowym stanie. Wszelkie późniejsze modyfikacje nie są widoczne, dopóki nie zostanie zastosowany zrzut, w którym obiekt został utworzony.
- Początkowy stan funkcji
mutableStateOf()
, a także jej prymitywne wersje, to wartość przekazana jako parametr do funkcjimutableStateOf()
. Początkowy stan elementówmutableStateListOf()
imutableStateMapOf()
jest pusty. - Dodano właściwości
Snapshot.isInSnapshot
iSnapshot.PreexistingSnapshotId
, które umożliwiają obiektowi stanu natychmiastowe udostępnienie po utworzeniu globalnego zrzutu. - Obiekty stanu niestandardowego mogą być dostępne od razu, jeśli będą stosować się do wzoru zmian wprowadzonych wbudowanych obiektach snapshot. (I84a17)
- Włącz
nonSkippingGroupOptimization
dla bibliotek tworzenia. Dzięki temu wygenerowany kod dla wszystkich funkcji composable, których nie można ponownie uruchomić, w androidx będzie wydajniejszy. W przyszłości planujemy włączyć tę funkcję domyślnie. I(acbc08) - unieważnianie kompozytowanych lambda w podkompozycjach na tym samym klatce; (98301c)
- Zadzwoń do
onRelease
w tej samej kolejności coonForgotten
. (2cd790) - Włączanie trybu intensywnego pomijania (ed1766)
- Uczynić
currentCompoundHashKey
unikalnym w większej liczbie przypadków (d4a872)
Wersja 1.7.0-rc01
21 sierpnia 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-rc01
został zwolniony. Wersja 1.7.0-rc01 zawiera te komity.
Wersja 1.7.0-beta07
7 sierpnia 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-beta07
został zwolniony. Wersja 1.7.0-beta07 zawiera te komity.
Wersja 1.7.0-beta06
24 lipca 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-beta06
został zwolniony. Wersja 1.7.0-beta06 zawiera te komity.
Wersja 1.7.0-beta05
10 lipca 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-beta05
został zwolniony. Wersja 1.7.0-beta05 zawiera te komisy.
Wersja 1.7.0-beta04
26 czerwca 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-beta04
został zwolniony. Wersja 1.7.0-beta04 zawiera te komity.
Wersja 1.7.0-beta03
12 czerwca 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-beta03
został zwolniony. Wersja 1.7.0-beta03 zawiera te zatwierdzenia.
Wersja 1.7.0-beta02
29 maja 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-beta02
został zwolniony. Wersja 1.7.0-beta02 zawiera te komity.
Wersja 1.7.0-beta01
14 maja 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-beta01
został zwolniony. Wersja 1.7.0-beta01 zawiera te komity.
Wersja 1.7.0-alpha08
1 maja 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-alpha08
został zwolniony. Wersja 1.7.0-alpha08 zawiera te komity.
Wersja 1.7.0-alpha07
17 kwietnia 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-alpha07
został zwolniony. Wersja 1.7.0-alpha07 zawiera te komity.
Nowe funkcje
- Dodano możliwość podania wartości lokalnej kompozycji obliczonej na podstawie wartości innych wartości lokalnych kompozycji domyślnie (za pomocą funkcji
compositionLocalWithComputedDefault()
) lub podając funkcję lambda, która służy do obliczenia wartości za pomocą funkcjiprovidesComputed
zamiastprovides
. - Wartość kompozycji lokalnej można uzyskać, korzystając z właściwości
currentValue
kompozycji lokalnej dostępnej w ramach funkcji lambda obliczającej wartość. Jest ono używane zamiastcurrent
, które jest dostępne tylko w funkcjach@Composable
. (Iadbc0)
Zmiany w interfejsie API
- Nowo utworzone obiekty stanu są od razu dostępne z innych zrzutów, w tym zrzutu globalnego, w ich początkowym stanie. Wszelkie późniejsze modyfikacje nie są widoczne, dopóki nie zostanie zastosowany zrzut, w którym obiekt został utworzony.
- Początkowy stan funkcji
mutableStateOf()
, a także jej prymitywne wersje, to wartość przekazana jako parametr do funkcjimutableStateOf()
. Początkowy stan elementówmutableStateListOf()
imutableStateMapOf()
jest pusty. - Dodano właściwości
Snapshot.isInSnapshot
iSnapshot.PreexistingSnapshotId
, które umożliwiają obiektowi stanu natychmiastowe udostępnienie po utworzeniu globalnego zrzutu. - Obiekty stanu niestandardowego mogą być dostępne od razu, jeśli będą stosować się do wzoru zmian wprowadzonych wbudowanych obiektach snapshot. (I84a17)
Poprawki błędów
- Naprawiono zliczanie
readObserver
w zagnieżdżonych zrzutach. Powodowało to, że zagnieżdżone stany pochodne były niewystarczająco nieważne, gdy były używane w ramachsnapshotFlow
. (Idf138)
Wersja 1.7.0-alpha06
3 kwietnia 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-alpha06
został zwolniony. Wersja 1.7.0-alpha06 zawiera te komisy.
Poprawki błędów
- Popraw obsługę pojedynczych wartości
providesDefault
(538f45) - Unikanie zakleszczenia w rekompilatorze podczas uzyskiwania dostępu do zegara ramki (07e5c6)
Wersja 1.7.0-alpha05
20 marca 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-alpha05
został zwolniony. Wersja 1.7.0-alpha05 zawiera te komity.
Poprawki błędów
- Usuwanie późnych zmian w dezaktywowanej kompozycji (5950bc)
Wersja 1.7.0-alpha04
6 marca 2024 roku
androidx.compose.runtime:runtime-*:1.7.0-alpha04
został zwolniony. Wersja 1.7.0-alpha04 zawiera te komity.
Usprawnienia dotyczące wydajności
- Wywołanie
Snapshot.current
raz na ocenę stanu pochodnej (ee7daf) - Czytaj
currentRecord
raz na obserwację w kompozycji (b882b2) - Usuwanie przypadkowego przydzielenia iteratora w
snapshotFlow
(231e56) - Włącz
nonSkippingGroupOptimization
dla bibliotek tworzenia. Dzięki temu wygenerowany kod dla wszystkich funkcji composable, których nie można ponownie uruchomić, w androidx będzie wydajniejszy. W przyszłości planujemy włączyć tę funkcję domyślnie. I(acbc08)
Wersja 1.7.0-alpha03
21 lutego 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-alpha03
został zwolniony. Wersja 1.7.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
- Wprowadzenie grup zastępczych w celu poprawy wykrywania zmian (0941b5)
Usprawnienia dotyczące wydajności
- Ulepszona alokacja pamięci podczas wykrywania zmian (53e7fd)
- Naprawiliśmy wyciek pamięci w komponie (0e097d).
- Użyj wartości
ScopeMap
, aby przekazać nieważne dane podczas ponownego tworzenia (e19a7e). - Optymalizacja mapy unieważnień w celu zachowania tylko stanów pochodnych (f11c44)
- Zamień użycia
IdentityArraySet
naScatterSet
(db572) - Optymalizacja
removeScope
wScopeMap
(bb0530)
Wersja 1.7.0-alpha02
7 lutego 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-alpha02
został zwolniony. Wersja 1.7.0-alpha02 zawiera te commity.
Poprawki błędów
- unieważnianie kompozytowanych lambda w podkompozycjach na tym samym klatce; (98301c)
- Zadzwoń do
onRelease
w tej samej kolejności coonForgotten
. (2cd790) - Filtr zmienił stany, które nie są obserwowane w
snapshotFlow
. (796b80)
Usprawnienia dotyczące wydajności
- Zmień obserwator migawki na miejscu, gdy jest już przezroczysty. (f60f30)
- Optymalizacja
SnapshotIdSet.lowest()
. (7ae149) - Użyj konta
fold()
bez przydziału w aplikacjiSnapshotIdSet
. (532b7d) - Usuń alokację iteratora (83f96b)
Wersja 1.7.0-alpha01
24 stycznia 2024 r.
androidx.compose.runtime:runtime-*:1.7.0-alpha01
został zwolniony. Wersja 1.7.0-alpha01 zawiera te commity.
Optymalizacja skuteczności
- Dodanie możliwości tworzenia slotów po dodaniu grupy podrzędnej (b5960c)
- Optymalizacja modyfikacji nagrań stanów zrzutów (28c3fe)
- Włączanie trybu intensywnego pomijania (ed1766)
Poprawki błędów
- Uwzględnienie metadanych domyślnego parametru w pamięci wewnętrznej (096665)
- Uczynić
currentCompoundHashKey
unikalnym w większej liczbie przypadków (d4a872) - Realizacja grup podczas zamykania wywołania funkcji wbudowanej (2a90fc)
Wersja 1.6
Wersja 1.6.8
12 czerwca 2024 r.
androidx.compose.runtime:runtime-*:1.6.8
został zwolniony. Wersja 1.6.8 zawiera te komisy.
Wersja 1.6.7
1 maja 2024 r.
androidx.compose.runtime:runtime-*:1.6.7
został zwolniony. Wersja 1.6.7 zawiera te komity.
Wersja 1.6.6
17 kwietnia 2024 r.
androidx.compose.runtime:runtime-*:1.6.6
został zwolniony. Brak zmian od ostatniej wersji.
Wersja 1.6.5
3 kwietnia 2024 r.
androidx.compose.runtime:runtime-*:1.6.5
został zwolniony. Wersja 1.6.5 zawiera te komity.
Wersja 1.6.4
20 marca 2024 r.
androidx.compose.runtime:runtime-*:1.6.4
został zwolniony. Wersja 1.6.4 zawiera te komitowane zmiany.
Wersja 1.6.3
6 marca 2024 roku
androidx.compose.runtime:runtime-*:1.6.3
został zwolniony. Wersja 1.6.3 zawiera te komitowane zmiany.
Wersja 1.6.2
21 lutego 2024 r.
androidx.compose.runtime:runtime-*:1.6.2
został zwolniony. Wersja 1.6.2 zawiera te commity.
Wersja 1.6.1
7 lutego 2024 r.
androidx.compose.runtime:runtime-*:1.6.1
został zwolniony. Wersja 1.6.1 zawiera te zatwierdzenia.
Poprawki błędów
- Zadzwoń do
onRelease
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.
androidx.compose.runtime:runtime-*:1.6.0
został zwolniony. Wersja 1.6.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.5.0
Nowe funkcje
- Ponownie rzucaj wyjątkami, które są połykane podczas pętli rekompozycji (4dff9)
Optymalizacja skuteczności
- Optymalizacja modyfikacji nagrań stanów zrzutów (28c3fe)
- Optimize
rememberSaveable
(f01d79) - Opóźnienie ponownego odczytania stanów pochodnych do momentu zarejestrowania zmian (f38099)
- Poprawne podawanie wartości lokalnych kompozycji (a337ea)
Poprawki błędów
- Naprawić wyciek pamięci w tabeli slotów (73fcfe).
- pomiń przekształcenie podkompozycji, które zostaną usunięte; (Ieeb99, b/254645321)
- Aktywuj cykle życia
RememberObserver
tylko wtedy, gdy są one przechowywane w obliczeniach pamięci. (f6b4dc) - Ogranicz
$dirty
do ujętych w ramach wyrażeń lambda. (acfca0) - Naprawianie problemu z przenośnymi treściami, które czasami otrzymują nieprawidłowe kompozycje lokalne. (035cd6)
Wersja 1.6.0-rc01
10 stycznia 2024 r.
androidx.compose.runtime:runtime-*:1.6.0-rc01
został zwolniony. Wersja 1.6.0-rc01 zawiera te zatwierdzenia.
Wersja 1.6.0-beta03
13 grudnia 2023 r.
androidx.compose.runtime:runtime-*:1.6.0-beta03
został zwolniony. Wersja 1.6.0-beta03 zawiera te zatwierdzenia.
Wersja 1.6.0-beta02
29 listopada 2023 r.
androidx.compose.runtime:runtime-*:1.6.0-beta02
został zwolniony. Wersja 1.6.0-beta02 zawiera te commity.
Wersja 1.6.0-beta01
15 listopada 2023 r.
androidx.compose.runtime:runtime-*:1.6.0-beta01
został zwolniony. Wersja 1.6.0-beta01 zawiera te commity.
Zmiany w interfejsie API
- Rozpowszechnianie niektórych wartości stabilności w adnotacji. (274a4c)
Poprawki błędów
- Użyj zasady odniesienia do stanu lokalnego zakresu kompozycji w kontekście. (83361c)
- Ogranicz łańcuch $dirty do łańcuchów lambda wbudowanych. (acfca0)
- Naprawianie problemu z przenośnymi treściami, które czasami otrzymują nieprawidłowe kompozycje lokalne. (035cd6)
- Użyj szybszych map haszujących bez przydzielania pamięci w funkcji
RecomposeScopeImpl
. (d79494) - Używaj konta
ObjectIntMap
w aplikacjiDerivedState
. (21862e) - Użyj wartości
IntRef
dla typu danych intSnapshotThreadLocal
w funkcjiDerivedState
. (04eaf4)
Wersja 1.6.0-alpha08
18 października 2023 r.
androidx.compose.runtime:runtime-*:1.6.0-alpha08
został zwolniony. Wersja 1.6.0-alpha08 zawiera te commity.
Poprawki błędów
- Aktywuj cykle życia
RememberObserver
tylko wtedy, gdy są one przechowywane w obliczeniach pamięci. (f6b4dc) - Ulepszone przypisywanie w sortowaniu listy nieważności. (954d63)
- Używaj nowych map bez przydziału w sekcji
SnapshotStateObserver
. (4303ce) - Wyczyść nieważne kompozycje, gdy kompozycja zostanie dezaktywowana. (e001be)
Wersja 1.6.0-alpha07
4 października 2023 roku
androidx.compose.runtime:runtime-*:1.6.0-alpha07
został zwolniony. Wersja 1.6.0-alpha07 zawiera te commity.
Zmiany w interfejsie API
SnapshotStateList
jest teraz oznaczony jakoRandomAccess
, aby umożliwić użycie wersji bezpośredniego indeksowania pomocników list. (I5210c, b/219554654)
Wersja 1.6.0-alpha06
20 września 2023 r.
androidx.compose.runtime:runtime-*:1.6.0-alpha06
został zwolniony. Wersja 1.6.0-alpha06 zawiera te commity.
Wersja 1.6.0-alpha05
6 września 2023 r.
androidx.compose.runtime:runtime-*:1.6.0-alpha05
został zwolniony. Wersja 1.6.0-alpha05 zawiera te commity.
Wersja 1.6.0-alpha04
23 sierpnia 2023 r.
androidx.compose.runtime:runtime-*:1.6.0-alpha04
został zwolniony. Wersja 1.6.0-alpha04 zawiera te commity.
Nowe funkcje
- Ponownie rzucaj wyjątkami, które są połykane podczas pętli rekompozycji (4dff9)
Zmiany w interfejsie API
- Dodano metodę dezaktywacji
ReusableComposition
, która usuwa obserwacje, ale zachowuje węzły. Dezaktywowaną kompozycję można ponownie aktywować, wywołując funkcjęsetContent
. (Ib7f31) - Dodaj interfejs
ReusableComposition
do zarządzania cyklem życia i ponownego użycia podkompozycji. (I812d1, b/252846775)
Wersja 1.6.0-alpha03
9 sierpnia 2023 r.
androidx.compose.runtime:runtime-*:1.6.0-alpha03
został zwolniony. Wersja 1.6.0-alpha03 zawiera te commity.
Poprawki błędów
- Naprawić nową optymalizację
CompositionLocalProvider
(3118e88) - Poprawiono sposób rozkładania ruchomych węzłów treści. (5e3d59b)
Wersja 1.6.0-alpha02
26 lipca 2023 r.
androidx.compose.runtime:runtime-*:1.6.0-alpha02
został zwolniony. Wersja 1.6.0-alpha02 zawiera te commity.
Nowe funkcje i ulepszenia
- Optimize
rememberSaveable
(f01d79) - Opóźnienie ponownego odczytania stanów pochodnych do momentu zarejestrowania zmian (f38099)
- Poprawne podawanie wartości lokalnych kompozycji (a337ea)
SideEffect
jest oznaczony jako@ExplicitGroupsComposable
, aby uniknąć generowania grupy. (I74815)- Unikaj porównywania map lokalnych kompozycji podczas ponownego użycia (782071)
Zmiany w interfejsie API
- Dodano przeciążenie dla specjalnego przypadku
CompositionLocalProviders
, które pozwala uniknąć obciążenia związanego z szybszym podawaniem wielu wartości, ale jest obciążeniem przy podawaniu pojedynczej wartości. (I6d640, b/288169379)
Poprawki błędów
- Naprawić wyciek pamięci w tabeli slotów (73fcfe).
- Poprawiamy sposób przywracania wartości
rememberSaveable
, gdy funkcjastateSaver
zwraca wartość null (90748c)
Wersja 1.6.0-alpha01
21 czerwca 2023 r.
androidx.compose.runtime:runtime-*:1.6.0-alpha01
został zwolniony. Wersja 1.6.0-alpha01 zawiera te commity.
Poprawki błędów
- pomiń przekształcenie podkompozycji, które zostaną usunięte; (Ieeb99, b/254645321)
- Zmniejszone przydziały podczas stosowania zrzutów. (I65c09)
- Unikaj obliczania wartości
readableHash
w funkcjiDerivedState
, jeśli zrzut nie został zmodyfikowany (68c565)
Wersja 1.5
Wersja 1.5.4
18 października 2023 r.
androidx.compose.runtime:runtime-*:1.5.4
został zwolniony. Wersja 1.5.4 zawiera te zatwierdzenia.
Wersja 1.5.3
4 października 2023 roku
androidx.compose.runtime:runtime-*:1.5.3
został zwolniony. Wersja 1.5.3 zawiera te zatwierdzenia.
Wersja 1.5.2
27 września 2023 r.
androidx.compose.runtime:runtime-*:1.5.2
został zwolniony. Wersja 1.5.2 zawiera te zatwierdzenia.
Wersja 1.5.1
6 września 2023 r.
androidx.compose.runtime:runtime-*:1.5.1
został zwolniony. Wersja 1.5.1 zawiera te zatwierdzenia.
Wersja 1.5.0
9 sierpnia 2023 r.
androidx.compose.runtime:runtime-*:1.5.0
został zwolniony. Wersja 1.5.0 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Usunięto alokacje w rekompozycji, animacjach kolorów i
AndroidComposeView
. (Ib2bfa) - Dodano adnotację
@StateFactoryMarker
, aby oznaczać funkcje, które tworzą stany i muszą być zawinięte w wywołanieremember
. (I64550) - Dodanie prymitywnych wersji stanu i
MutableState
(fb3d89) - Dodano
Snapshot.isApplyObserverNotificationPending
(I672a5) - Dodano prymitywne wersje interfejsu API
State
, które umożliwiają śledzenie wartości Int, Long, Float i Double w obiektachState
bez naliczania kar za automatyczne zaokrąglanie. Aby z nich korzystać, użyj nowych metod fabrycznychmutableIntState(Int)
,mutableFloatStateOf(Float)
itp. (I48e43)
Poprawki błędów
- pomiń przekształcenie podkompozycji, które zostaną usunięte; (Ieeb99, b/254645321)
- Nie zachowuj odwołania do zrzutu w
ComposerImpl
(0206f7) - Nie stosuj kompozycji dwukrotnie (f5791b)
- Sprawdzanie nieważności nieinicjowanych wartości stanu pochodnej (aa2a92)
- Wywołanie
onEndChanges
podczas usuwania kompozycji. (62cc8c) - Naprawianie przenoszenia treści do podkompozycji (4beb41)
- Naprawiono potencjalne blokady (c1a425 i 8edce0).
- Rekompilator utworzony dla okna Androida będzie teraz blokować tylko wywołania do
withFrameNanos
, a nie wszystkie kompozycje, gdy otrzyma powiadomienie ON_STOP. Oznacza to, że okna powiązane z zatrzymanymi aktywnościami będą nadal zmieniać kompozycję pod kątem zmian danych, ale animacje lub inne wywołaniawithFrameNanos
będą blokowane. (Id9e7f, b/240975572) - Wykonywanie wywołań zwrotnych dezaktywacji dla
LayoutNode
przed usunięciem efektów 3784073 - Popraw zmienione flagi dla ponownie uruchomionych funkcji lambda ea81df9
- Naprawiono regresję edycji na żywo w przypadku komponentów z węzłami 73fd4d8
- W przypadku ON_STOP należy wstrzymać transmisje zegara ramki zamiast kompozycji ae276f1.
- Unkwalifikuj zakresy
SnapshotStateObserver
w przypadku niezmienionych stanów pochodnych 84d9b1c - Naprawiono potencjalny błąd blokujący podczas usuwania kompozycji 28761fc
- Naprawianie przenoszenia treści do podkompozycji 92d4156
- Naprawiono zmienione flagi dla ponownie uruchomionych funkcji lambda (8a03e9).
- Wykonywanie wywołań zwrotnych dezaktywacji dla
LayoutNode
przed usunięciem efektów (8b0fa4) - Naprawianie błędu
endToMarker()
podczas zamykania grup węzłów. (d71d980) - Używanie bieżącej grupy
SlotWriter
do sprawdzania dezaktywacji (a0b518b) - Usuń
fill
wSlotTable.moveSlotGapTo()
i przenieś go do zamknięcia (81f9935) - Popraw brakujące unieważnienia podczas przenoszenia treści ruchomych (1d7c024)
- Naprawianie natychmiastowego unieważnienia w przypadku przeniesionych treści ruchomych (8676618)
Usprawnienia dotyczące wydajności
- Unikaj obliczania
readableHash
w funkcjiDerivedState
, jeśli zrzut nie został zmodyfikowany. (307102) - Zmniejszone alokacje (I65c09, d7ea77, 727974 i 445808)
- Szybkie anulowanie tworzenia
CoroutineScopes
(a55362 i bd382f) - Zastępowanie rekordów obiektów stanu rekordami stanu niedostępnymi (c986960)
- Podczas tworzenia grup używaj kompozytora o odpowiednim zakresie (9a5e5b6).
- Użyj
IdentityArraySet
, aby przechowywać unieważnienia zrzutów (7f60cca). - Zmniejsz alokacje dla obserwacji zrzutów (5bc535f)
Wersja 1.5.0-rc01
26 lipca 2023 r.
androidx.compose.runtime:runtime-*:1.5.0-rc01
został zwolniony. Wersja 1.5.0-rc01 zawiera te commity.
Poprawki błędów
Opóźnienie ponownego odczytania stanów pochodnych do momentu zarejestrowania zmian (f38099)
Dostępna jest opcjonalna inspekcja, która zaleca przeniesienie wywołań
mutableStateOf()
do odpowiednich typów specjalistycznych dla prymitywów. Identyfikator lint toAutoboxingStateCreation
. Wcześniej ta kontrola była domyślnie włączona we wszystkich projektach. Aby wyświetlić to ostrzeżenie w edytorze Android Studio i w wyjściach lint projektu, zmień jego poziom ważności z informacyjnego na ostrzeżenie (lub wyższy), deklarującwarning "AutoboxingStateCreation"
w konfiguracji build.gradle lub build.gradle.kts modułu, jak pokazano na rysunku (I34f7e):android { lint { warning "AutoboxingStateCreation" } ... }
Wersja 1.5.0-beta03
28 czerwca 2023 r.
androidx.compose.runtime:runtime-*:1.5.0-beta03
został zwolniony. Wersja 1.5.0-beta03 zawiera te commity.
Poprawki błędów
- pomiń przekształcenie podkompozycji, które zostaną usunięte; (Ieeb99, b/254645321)
Wersja 1.5.0-beta02
7 czerwca 2023 r.
androidx.compose.runtime:runtime-*:1.5.0-beta02
został zwolniony. Wersja 1.5.0-beta02 zawiera te commity.
Usprawnienia dotyczące wydajności
- Unikaj obliczania
readableHash
w funkcjiDerivedState
, jeśli zrzut nie został zmodyfikowany. (307102)
Wersja 1.5.0-beta01
24 maja 2023 r.
androidx.compose.runtime:runtime-*:1.5.0-beta01
został zwolniony. Wersja 1.5.0-beta01 zawiera te commity.
Zmiany w interfejsie API
- Usunięto przypisania w ramach rekompozycji, animacji kolorów i
AndroidComposeView
(Ib2bfa). - Dodano adnotację
@StateFactoryMarker
, aby oznaczać funkcje, które tworzą stany i muszą być zawinięte w wywołanieremember
. (I64550) - Dodanie prymitywnych wersji stanu i
MutableState
(fb3d89) - Dodano
Snapshot.isApplyObserverNotificationPending
(I672a5)
Poprawki błędów
- Zmniejszone alokacje (I65c09, d7ea77, 727974 i 445808)
- Nie zachowuj odwołania do zrzutu w
ComposerImpl
(0206f7) - Szybkie anulowanie tworzenia
CoroutineScopes
(a55362 i bd382f) - Nie stosuj kompozycji dwukrotnie (f5791b)
- Sprawdzanie nieważności nieinicjowanych wartości stanu pochodnej (aa2a92)
- Wywołanie
onEndChanges
podczas usuwania kompozycji. (62cc8c) - Naprawianie przenoszenia treści do podkompozycji (4beb41)
- Naprawić potencjalne blokady (c1a425)
- W przypadku ON_STOP należy wstrzymać transmisje zegara ramki zamiast kompozycji (f4a2d1).
- Naprawiono zmienione flagi dla ponownie uruchomionych funkcji lambda (8a03e9).
- Wykonywanie wywołań zwrotnych dezaktywacji dla
LayoutNode
przed usunięciem efektów (8b0fa4)
Darowizna zewnętrzna
- Dodano
Snapshot.isApplyObserverNotificationPending
(I672a5)
Wersja 1.5.0-alpha04
10 maja 2023 r.
androidx.compose.runtime:runtime-*:1.5.0-alpha04
został zwolniony. Wersja 1.5.0-alpha04 zawiera te commity.
Zmiany w interfejsie API
- Dodano prymitywne wersje interfejsu API
State
, które umożliwiają śledzenie wartości Int, Long, Float i Double w obiektachState
bez naliczania kar za automatyczne zaokrąglanie. Aby z nich korzystać, użyj nowych metod fabrycznychmutableIntState(Int)
,mutableFloatStateOf(Float)
itp. (I48e43)
Poprawki błędów
Wywołanie
onEndChanges
podczas usuwania kompozycji. Węzły fokusowe usunięte podczasComposition.dispose
subskrybująonEndChanges
, aby zresetować fokus.(03d4a47)Upewnij się, że wartości stanu pochodnej nie są inicjowane. Każdy stan pochodzenia jest powiązany z listą swoich zależności w elementach
SnapshotStateObserver
, które służą do unieważniania zakresów powiązanych ze stanem pochodzenia, gdy zmieniają się zależności. Zmiana zależności jest rejestrowana w przypadku przejścia do następnego zrzutu, co może nastąpić po odczycie stanu pochodnej (z powodu wywołania funkcjiSnapshot.notifyObjectsInitialized()
).Wcześniejsza logika obserwacji stanu pochodnej w
SnapshotStateObserver
oczyszczała stare zależności, a potem odczytywała nową wartość. Sytuacja ta spowodowała wyścig z nieważeniem w oczyszczonym stanie, w którym nie zarejestrowano unieważnienia zależności.Ta zmiana zmienia kolejność odczytu pochodnej stanu i czyszczenia zależności, aby zapewnić, że unieważnienie zawsze będzie wykonywane w odpowiednim stanie. (c472be6)
Wersja 1.5.0-alpha03
19 kwietnia 2023 r.
androidx.compose.runtime:runtime-*:1.5.0-alpha03
został zwolniony. Wersja 1.5.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
- Rekompilator utworzony dla okna Androida będzie teraz blokować tylko wywołania do
withFrameNanos
, a nie wszystkie kompozycje, gdy otrzyma powiadomienie ON_STOP. Oznacza to, że okna powiązane z zatrzymanymi aktywnościami będą nadal zmieniać kompozycję pod kątem zmian danych, ale animacje lub inne wywołaniawithFrameNanos
będą blokowane. (Id9e7f, b/240975572)
Poprawki błędów
- Poprawiono potencjalny stan blokady na liście zrzutów i mapie 5c1a425
- Wykonywanie wywołań zwrotnych dezaktywacji dla
LayoutNode
przed usunięciem efektów 3784073 - Popraw zmienione flagi dla ponownie uruchomionych funkcji lambda ea81df9
- Naprawiono regresję edycji na żywo w przypadku komponentów z węzłami 73fd4d8
- W przypadku ON_STOP należy wstrzymać transmisje zegara ramki zamiast kompozycji ae276f1.
- Unkwalifikuj zakresy
SnapshotStateObserver
w przypadku niezmienionych stanów pochodnych 84d9b1c - Naprawiono potencjalny błąd blokujący podczas usuwania kompozycji 28761fc
- Naprawianie przenoszenia treści do podkompozycji 92d4156
Wersja 1.5.0-alpha02
5 kwietnia 2023 r.
androidx.compose.runtime:runtime-*:1.5.0-alpha02
został zwolniony. Wersja 1.5.0-alpha02 zawiera te commity.
Nowe funkcje
- Operator
getValue
w Kotlinie może być teraz składany (f174f6)
Poprawki błędów i usprawnienia w zakresie wydajności
- Zastępowanie rekordów obiektów stanu rekordami stanu niedostępnymi (c986960)
- Podczas tworzenia grup używaj kompozytora o odpowiednim zakresie (9a5e5b6).
- Naprawianie błędu
endToMarker()
podczas zamykania grup węzłów. (d71d980) - Używanie bieżącej grupy
SlotWriter
do sprawdzania dezaktywacji (a0b518b) - Użyj
IdentityArraySet
, aby przechowywać unieważnienia zrzutów (7f60cca). - Usuń
fill
wSlotTable.moveSlotGapTo()
i przenieś go do zamknięcia (81f9935) - Popraw brakujące unieważnienia podczas przenoszenia treści ruchomych (1d7c024)
- Naprawianie natychmiastowego unieważnienia w przypadku przeniesionych treści ruchomych (8676618)
- Zmniejsz alokacje dla obserwacji zrzutów (5bc535f)
Wersja 1.5.0-alpha01
22 marca 2023 r.
androidx.compose.runtime:runtime-*:1.5.0-alpha01
został zwolniony. Wersja 1.5.0-alpha01 zawiera te zatwierdzenia.
Nowe funkcje
- Dodanie
Modifier.Node#coroutineScope
, aby umożliwićModifier.Nodes
uruchamianie coroutines (I76ef9) - Zezwól aplikacji
Modifier.Nodes
na odczytywanie danychCompositionLocals
, implementując interfejsCompositionLocalConsumerModifierNode
. (Ib44df)
Wersja 1.4
Wersja 1.4.3
3 maja 2023 r.
androidx.compose.runtime:runtime-*:1.4.3
jest opublikowany bez wprowadzenia zmian.
Wersja 1.4.2
19 kwietnia 2023 r.
androidx.compose.runtime:runtime-*:1.4.2
został zwolniony. Wersja 1.4.2 zawiera te zatwierdzenia.
Poprawki błędów
Poprawiono potencjalny impas w liście i mapie zrzutów 2eb6570
Dodawanie treści do tabeli
SnapshotStateList
lubSnapshotStateMap
może spowodować blokadę, jeśli modyfikacja jest wykonywana równolegle z bezpośrednim zapisem w rekordzie stanu. Prawdopodobieństwo wystąpienia tego problemu znacznie wzrosło po wprowadzeniu zmian w wersji 93fcae828b, która używa bezpośrednich zapisów do zwalniania nieużywanych rekordów.Blokady są teraz uporządkowane w taki sposób, że blokada kopii podglądowej nigdy nie jest wykonywana, gdy blokada mapy lub listy jest aktywna.
Wersja 1.4.1
5 kwietnia 2023 r.
androidx.compose.runtime:runtime-*:1.4.1
został zwolniony. Wersja 1.4.1 zawiera te zatwierdzenia.
Poprawki błędów
- Napraw
endToMarker()
, gdy kończysz grupy węzłów. d71d980
Wersja 1.4.0
22 marca 2023 r.
androidx.compose.runtime:runtime-*:1.4.0
został zwolniony. Wersja 1.4.0 zawiera te zatwierdzenia.
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 usługi Compose. 8b6a258 - Dodaj usługę
parameterTypes
do usługiComposableMethod
7b6c7ad
Poprawki błędów i ulepszenia wydajności
- Wyczyść oba indeksy zakresu w
SnapshotStateObserver
29f4a3e - Dodaj grupy potrzebne w treści nieprzeskakujalnych funkcji lambda 7d06752
- Poprawa cech odwołań do pamięci w stanie zrzutu 93fcae8
- Usuwanie boksowania w wyszukiwaniu lokalnym kompozycji 0875717
- Używanie prawidłowego klucza w przypadku grup węzłów, których nie można ponownie użyć 6388d8d
- Ochrona
SnapshotStateObserver
przed rekurencyjnym i jednoczesnym zastosowaniem 98cb6ba - Dodano sprawdzanie zakresu indeksu w metodie „get” klasy
IdentityArraySet
(35a77d3). - Zaktualizuj moduł tworzenia wiadomości, aby używać rozszerzeń
ViewTreeLifecycleOwner
21c2122 - Wysyłanie powiadomień o zastosowaniu po zakończeniu procesu rekompozycji. 98f2641
- Naprawiono błąd awarii podczas anulowania rekompilacji 8f8656f
- Zawsze wymuszaj ponowne złożenie, jeśli dostawcy nadrzędni usługi Composition uległy zmianie 9526fcc
- Tolerancja rekompilatora dla anulowanych zadań a55f7ed
- Ulepszenie obsługi unieważnień w przypadku dużej liczby kompozytorów 9b7ed67
- Poprawianie generowania grup zamknięcia w przypadku zwrotów nielokalnych b6f590c
Wersja 1.4.0-rc01
8 marca 2023 r.
androidx.compose.runtime:runtime-*:1.4.0-rc01
został zwolniony. Wersja 1.4.0-rc01 zawiera te zatwierdzenia.
Poprawki błędów
Wersja 1.4.0-beta02
22 lutego 2023 roku
androidx.compose.runtime:runtime:1.4.0-beta02
i androidx.compose.runtime:runtime-saveable:1.4.0-beta02
są dostępne. Wersja 1.4.0-beta02 zawiera te zatwierdzenia.
Wersja 1.4.0-beta01
8 lutego 2023 r.
androidx.compose.runtime:runtime-*:1.4.0-beta01
został zwolniony. Wersja 1.4.0-beta01 zawiera te commity.
Zmiany w interfejsie API
- Dodano
ComposeNodeLifecycleCallback
, który umożliwia obserwowanie cyklu życia węzłów Compose (I3731b). - Dodano
@TestOnly
doComposer.disableSourceInformation()
, ponieważ tę funkcję można bezpiecznie wywołać tylko w ramach testu. (I896c8)
Poprawki błędów
- Usuwanie boksowania w wyszukiwaniu lokalnym kompozycji (62f66a)
- Ulepszanie cech 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
są dostępne. Wersja 1.4.0-alpha05 zawiera te commity.
Zmiany w interfejsie API
- Więcej typów i możliwości ustawienia wartości funkcji wbudowanych i wycofanych (I24f91)
Wersja 1.4.0-alpha04
11 stycznia 2023 r.
androidx.compose.runtime:runtime-*:1.4.0-alpha04
został zwolniony. Wersja 1.4.0-alpha04 zawiera te commity.
Zmiany w interfejsie API
- Kampania
TestMonotonicFrameClock
używa teraz prawidłowej adnotacji eksperymentalnej. (I95c9e)
Poprawki błędów
- Chroń
SnapshotStateObserver
przed rekurencyjnymi i jednoczesnymi zmianami (d902fb)
Wersja 1.4.0-alpha03
7 grudnia 2022 r.
androidx.compose.runtime:runtime-*:1.4.0-alpha03
został zwolniony. Wersja 1.4.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
- dodanie do klasy
ComposableMethod
nowej publicznej metody analogicznej dojava.lang.reflect.Method#getParameterTypes()
(Iab0c3);
Poprawki błędów
- Powiadomienia o zastosowaniu migawki są teraz wysyłane po zakończeniu stosowania zmian przez
Recomposer
. (Iad6c0, b/222093277)
Wersja 1.4.0-alpha02
9 listopada 2022 r.
androidx.compose.runtime:runtime-*:1.4.0-alpha02
został zwolniony. Wersja 1.4.0-alpha02 zawiera te commity.
Wersja 1.4.0-alpha01
24 października 2022 r.
androidx.compose.runtime:runtime-*:1.4.0-alpha01
został zwolniony. Wersja 1.4.0-alpha01 zawiera te commity.
Zmiany w interfejsie API
- W wersjach
SnapshotStateList
iSnapshotStateMap
są teraz jawnie zaimplementowane odpowiedniotoList()
itoMap()
. Te metody zwracają bieżące dane bez ich kopiowania, ponieważ zwracają wewnętrzne niezmienne dane używane do przechowywania treści. Tej wartości można używać np. do generowania przepływu wartości za pomocą funkcjisnapshotFlow
bez konieczności kopiowania danych. (Ica2bd)
Wersja 1.3
Wersja 1.3.3
11 stycznia 2023 r.
androidx.compose.runtime:runtime-*:1.3.3
został zwolniony. Wersja 1.3.3 zawiera te zatwierdzenia.
- Bez zmian od wersji 1.3.2
Wersja 1.3.2
7 grudnia 2022 r.
androidx.compose.runtime:runtime-*:1.3.2
został zwolniony. Wersja 1.3.2 zawiera te commity.
Poprawki błędów
- Zaktualizowano, aby obsługiwać androidx.compose.ui 1.3.2
Wersja 1.3.1
9 listopada 2022 r.
androidx.compose.runtime:runtime-*:1.3.1
został zwolniony. Wersja 1.3.1 zawiera te zatwierdzenia.
Wersja 1.3.0
24 października 2022 r.
androidx.compose.runtime:runtime-*:1.3.0
został zwolniony. Wersja 1.3.0 zawiera te commity.
Ważne zmiany od wersji 1.2.0
Obsługa wyjątków / edytowanie na żywo
- Aby lepiej obsługiwać edycję na żywo, dodano interfejsy API umożliwiające obsługę wyjątków podczas tworzenia.
- Obsługa błędów kompozycji w przypadku gorącego przeładowania
- Przetwarzanie błędów podczas edycji na żywo podczas zapisywania lub przywracania
Śledzenie kompozycji
- Dodano interfejsy API do śledzenia w czasie wykonywania, aby obsługiwać nowe narzędzia do śledzenia kompozycji.
- Generowanie wywołań funkcji rozpoczęcia i zakończenia zdarzenia do składania
- Dodano ponownie ComposerKt.traceEventStart(Int, String)
Interfejsy API do składania zapytań
- Dodano nowy interfejs API
ComposableMethod
, aby umożliwić bardziej niezawodne wywoływanie interfejsów API do składania za pomocą mechanizmu odzwierciedlenia. - Przeniesienie invokeComposable do czasu wykonywania kodu źródłowego
- Zmodyfikowanie interfejsu API w celu wywołania metody kompozytowej
Poprawki w czasie działania
- Napraw błędny test zakresu w tabeli slotów sprawdzający markery
- Zezwalanie na przenoszenie treści do i z elementu SubcomposeLayout
- Poprawka dotycząca przenoszenia treści do nowych elementów podkompozycji
System zrzutów
- System migawek został ulepszony pod kątem zarządzania pamięcią, wydajności i poprawności.
- Optymalizacja usuwania zakresu w SnapshotStateObserver
- usuwanie zagnieżdżonych zrzutów utworzonych z przezroczystych zrzutów
- Naprawiono warunek wyścigu podczas odczytu stanu z globalnego snapshotu
- Obsługa stanu pochodnej w SnapshotStateObserver
- Zapobieganie usuwaniu stanu pochodnej z kompozycji podczas jego odczytu w innych zakresach
- Używanie mapy IdentityArrayMap zamiast mapy HashMap w DerivedState
- Aktualizowanie obserwatorów stanu pochodnej, aby używały wektora zmiennego
- Aktualizacja czyszczenia stanu SnapshotStateObserver
- Zastępowanie SnapshotStateObserver.invalidated przez ArraySet
- Naprawiono warunek wyścigu podczas odczytu stanu z globalnego snapshotu
- Naprawienie problemu z użyciem nieaktualnego rekordu w obliczeniu hasha stanu pochodnej
- Rozwiązanie problemu z warunkiem wyścigu podczas przechodzenia do globalnego zrzutu
- przyspieszenie czyszczenia obserwacji zakresu w SnapshotStateObserver,
Wersja 1.3.0-rc01
5 października 2022 r.
androidx.compose.runtime:runtime-*:1.3.0-rc01
został zwolniony. Wersja 1.3.0-rc01 zawiera te commity.
Poprawki błędów
- Naprawiono błąd
ArrayIndexOutOfBoundsException
występujący w tabeli slotów (b/249076084).
Wersja 1.3.0-beta03
21 września 2022 r.
androidx.compose.runtime:runtime-*:1.3.0-beta03
został zwolniony. Wersja 1.3.0-beta03 zawiera te zatwierdzenia.
Zachowanie powodujące niezgodność
- Parametry
remember
irememberCoroutineScope
zmieniono nacrossinline
. Spowoduje to zgłoszenie błędu w przypadku wcześniejszych zwrotów zamiast zezwolenia na wcześniejszy zwrot, co spowoduje zgłoszenie błędu wewnętrznego. - Ta zmiana może spowodować zgłoszenie nowych błędów kompilatora, które wymagają usunięcia z funkcji lambda przekazywanych do tych funkcji zwracania wartości nielokalnych. (Ibea62)
Wersja 1.3.0-beta02
7 września 2022 roku
androidx.compose.runtime:runtime-*:1.3.0-beta02
został zwolniony. Wersja 1.3.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Zaktualizowany interfejs API (I64ca0)
Wersja 1.3.0-beta01
24 sierpnia 2022 r.
androidx.compose.runtime:runtime-*:1.3.0-beta01
został zwolniony. Wersja 1.3.0-beta01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Do interfejsu
CompositionData
dodano metodęfind
, aby umożliwić narzędziom 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.
androidx.compose.runtime:runtime-*:1.3.0-alpha03
został zwolniony. Wersja 1.3.0-alpha03 zawiera te commity.
Wersja 1.3.0-alpha02
27 lipca 2022 roku
androidx.compose.runtime:runtime-*:1.3.0-alpha02
został zwolniony. Wersja 1.3.0-alpha02 zawiera te commity.
Zmiany w interfejsie API
- Ponownie dodano
ComposerKt.traceEventStart(Int, String)
w celu zachowania zgodności wstecznej (I6e6de)
Wersja 1.3.0-alpha01
29 czerwca 2022 r.
androidx.compose.runtime:runtime-*:1.3.0-alpha01
został zwolniony. Wersja 1.3.0-alpha01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Przenoszenie funkcji narzędzia do czasu wykonywania (I4f729)
Wersja 1.2
Wersja 1.2.1
10 sierpnia 2022 r.
androidx.compose.runtime:runtime-*:1.2.1
został zwolniony. Wersja 1.2.1 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono wyciek pamięci: usuwanie zagnieżdżonych zrzutów utworzonych z przezroczystych zrzutów b/239603305
Wersja 1.2.0
27 lipca 2022 roku
androidx.compose.runtime:runtime-*:1.2.0
został zwolniony. Wersja 1.2.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.1.0
W wersji 1.2.0 środowiska wykonawczego Compose dodano kilka funkcji oraz wiele poprawek błędów, które poprawiły stabilność. Najważniejszą nową funkcją było wprowadzenie interfejsu
movableContentOf
API, który umożliwia tworzenie złożonych interfejsów użytkownika, np. przejść z elementami współdzielonymi. Interfejs APImovableContentOf
konwertuje funkcję lambda na funkcję, która przenosi jej stan i odpowiednie węzły do dowolnej nowej lokalizacji, w której zostanie wywołana. Gdy poprzednie wywołanie opuszcza kompozycję, stan jest tymczasowo zachowany, a jeśli nowe wywołanie do funkcji lambda wchodzi do kompozycji, stan i powiązane węzły są przenoszone do lokalizacji nowego wywołania. Jeśli nie dodasz nowych połączeń, stan zostanie trwale usunięty, a obserwatorzy zostaną o tym 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 do niej wchodzą, stan jest przenoszony z pierwszych wywołań na nowe w kolejności wywołania. Wszystkie stany, które nie zostały zajęte przez nowe połączenia, zostaną trwale usunięte.Oprócz tej i kilku innych nowych funkcji poświęciliśmy dużo czasu na stabilizację środowiska uruchomieniowego i systemu stanu zrzutów. Usunięto różne wycieki pamięci i zoptymalizowano ścieżki kodu.
Poniżej znajdziesz podsumowaną listę zmian:
Nowe funkcje w 1.2
- Dodawanie eksperymentalnego zdjęcia unsafeEnter/Leave
- Dodawanie eksperymentalnego interfejsu Snapshot.asContextElement API
- Wprowadzenie do Snapshot.withoutReadObservation
- Pozwalanie na zmianę stanu w ramach kompozycji
- Śledzenie zmian w kompozycji w edytorze
Wydajność w 1.2
- Zwiększanie skuteczności kompozycji na poziomie lokalnym
- Podstawowe profile dla usługi Compose należy wyprowadzić na podstawie wartości porównawczych
Poprawki błędów w 1.2
- Usuwanie informacji o śledzeniu z zakresów rekompozycji wersji
- Zapobieganie usuwaniu stanu pochodnej z kompozycji podczas jego odczytu w innych zakresach
- Używanie bardziej wydajnej funkcji removeScope() w SnapshotStateObserver
- Porządkowanie zależności stanu pochodnej w kompozycji
- Napraw problem polegający na zmianie wartości currentCompositeKeyHash po wewnętrznym przekształceniu w ramach treści ruchomych
- Czyszczenie nieprawidłowych kompozycji podczas usuwania
- Naprawianie stanu pochodnej odczytywanego podczas rekompozycji
- Naprawianie wycieku pamięci podczas obserwowania obiektów stanu pochodnego
- Zgodność klucza złożonego hash movableContent
- Naprawiono błąd, który powodował zawieszanie się edytora
- Sprawdzanie, czy wymuszenie unieważnienia grupy powoduje ponowne skompilowanie
- Poprawiono błąd polegający na tym, ż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.
androidx.compose.runtime:runtime-*:1.2.0-rc03
został zwolniony. Wersja 1.2.0-rc03 zawiera te zatwierdzenia.
Poprawki błędów
- Wcześniej obserwacje stanu pochodnej były bezwarunkowo usuwane z zakresu ponownego złożenia i z kompozycji, co powodowało problemy z innymi zakresami, które mogły nadal obserwować stan pochodnej. Ta zmiana usuwa tylko pochodne wystąpienia stanu, jeśli nie są one już obserwowane przez inne zakresy. (b/236618362)
Wersja 1.2.0-rc02
22 czerwca 2022 r.
androidx.compose.runtime:runtime-*:1.2.0-rc02
został zwolniony. Wersja 1.2.0-rc02 zawiera te zatwierdzenia.
Wersja 1.2.0-rc01
15 czerwca 2022 r.
androidx.compose.runtime:runtime-*:1.2.0-rc01
został zwolniony. Wersja 1.2.0-rc01 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Interfejsy w bibliotekach kompozytowych są teraz tworzone za pomocą domyślnych metod interfejsu JDK 8 (I5bcf1).
Wersja 1.2.0-beta03
1 czerwca 2022 r.
androidx.compose.runtime:runtime-*:1.2.0-beta03
został zwolniony. Wersja 1.2.0-beta03 zawiera te commity.
Wersja 1.2.0-beta02
18 maja 2022 r.
androidx.compose.runtime:runtime-*:1.2.0-beta02
został zwolniony. Wersja 1.2.0-beta02 zawiera te commity.
Wersja 1.2.0-beta01
11 maja 2022 roku
androidx.compose.runtime:runtime-*:1.2.0-beta01
został zwolniony. Wersja 1.2.0-beta01 zawiera te commity.
Nowe funkcje
- To pierwsza wersja beta 1.2.
Zmiany w interfejsie API
- Dodano eksperymentalną wersję
Snapshot.unsafeEnter/unsafeLeave
(I108f3) - Dodano eksperymentalny interfejs API
Snapshot.asContextElement()
(Iff072). - Adnotacja
@ComposableTarget
i adnotacje oznaczone symbolem@ComposableTargetMarker
mogą być teraz używane w zakresie pliku za pomocą prefiksu@file
. Jeśli użyjesz adnotacji docelowej w zakresie pliku, kompilator założy, że wszystkie funkcje składane w pliku są przeznaczone do użycia przez powiązany aplikator. Na przykład użycie@file:UiComposable
oznacza, że wszystkie funkcje@Composable
są kierowane do narzędzia do tworzenia interfejsu użytkownika. Funkcja, która musi być kierowana na innego aplikatora, musi wyraźnie podać adnotację znacznika docelowego dla odpowiedniego aplikatora. (I40804)
Wersja 1.2.0-alpha08
20 kwietnia 2022 r.
androidx.compose.runtime:runtime-*:1.2.0-alpha08
został zwolniony. Wersja 1.2.0-alpha08 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano
TracingInProgress
do interfejsuCompositionTracer
. (Ic6f12) - Dodawanie
recomposeScopeIdentity
do Composer (I0c873) - Interfejsy API do śledzenia z ograniczeniami (Composer.setTracer) do
OptIn(InternalComposeTracingApi)
. (I9187f) - Dodano
ResuableContentHost
, co pozwala lepiej kontrolować czas trwania stanu utworzonego dla treści wielokrotnego użytku. Jeśli na przykład podkompozycja jest tymczasowo nieużywana, można ją dezaktywować, co spowoduje zapomnienie całego zapamiętanego stanu w kompozycji, powodując np. wymuszenie zapomnienia wszystkich efektów jednorazowych. (I2c0f2, b/220322704)
Wersja 1.2.0-alpha07
6 kwietnia 2022 roku
androidx.compose.runtime:runtime-*:1.2.0-alpha07
został zwolniony. Wersja 1.2.0-alpha07 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano nową funkcję
Snapshot.withoutReadObservation { ... }
. Umożliwia użytkownikom uruchamianie przekazanej funkcji lambda bez subskrybowania zmian wartości stanu odczytanych w ramach tego bloku. Może się to przydać w przypadku, gdy chcesz korzystać z bezpiecznego zapisu/odczytu wątku na podstawie zrzutu, ale jednocześnie chcesz mieć możliwość odczytania wartości bez powodowania niepotrzebnej rekompozycji lub ponownego pomiaru. (I9f365, b/214054486)
Wersja 1.2.0-alpha06
23 marca 2022 r.
androidx.compose.runtime:runtime-*:1.2.0-alpha06
został zwolniony. Wersja 1.2.0-alpha06 zawiera te commity.
Wersja 1.2.0-alpha05
9 marca 2022 r.
androidx.compose.runtime:runtime-*:1.2.0-alpha05
został zwolniony. Wersja 1.2.0-alpha05 zawiera te commity.
Darowizna zewnętrzna
- Zaktualizowano do wersji Kotlinx coroutines 1.6.0 (I3366d).
Wersja 1.2.0-alpha04
23 lutego 2022 r.
androidx.compose.runtime:runtime-*:1.2.0-alpha04
został zwolniony. Wersja 1.2.0-alpha04 zawiera te commity.
Zmiany w interfejsie API
Dodano funkcje
ComposableTarget
,ComposableTargetMarker
iComposableOpenTarget
, które umożliwiają raportowanie w czasie kompilacji, gdy wywoływana jest funkcja typu „composable” kierowana na obiekt, który nie jest przeznaczony do jej użycia.W większości przypadków adnotacje mogą być wywnioskowane przez wtyczkę kompilatora Compose, więc używanie ich bezpośrednio powinno być rzadkością . Do przypadków, w których nie można wywnioskować typu danych, należą tworzenie i używanie niestandardowego aplikatora, abstrakcyjnych funkcji składanych (np. metod interfejsu), pól lub zmiennych globalnych, które są składanymi funkcjami lambda (lokalne zmienne i parametry są wywnioskowane) oraz używanie funkcji
ComposeNode
lub powiązanych funkcji składanych.W przypadku niestandardowych funkcji dopasowujących funkcje składane, które wywołują
ComposeNode
lubReusableComposeNode
, muszą dodać adnotacjęCompoableTarget
dla funkcji i wszystkich typów parametrów funkcji składanych lambda. Zalecamy jednak utworzenie adnotacji z oznaczeniemComposableTargetMarker
, a następnie używanie tej adnotacji z oznaczeniem zamiast bezpośrednioComposableTarget
. Kompozytowa adnotacja oznaczona symbolemComposableTargetMarker
jest równoważna atrybucieComposbleTarget
z pełną nazwą klasy atrybutu jako parametrem aplikatora. Przykład użycia funkcjiComposableTargetMarker
znajdziesz w sekcjianroidx.compose.ui.UiComposable
. (I38f11)
Wersja 1.2.0-alpha03
9 lutego 2022 r.
androidx.compose.runtime:runtime-*:1.2.0-alpha03
został zwolniony. Wersja 1.2.0-alpha03 zawiera te komisy.
Zmiany w interfejsie API
Dodano funkcję
movableContentOf
, która zamienia składaną funkcję lambda na funkcję lambda, która przenosi stan i odpowiednie węzły do dowolnej nowej lokalizacji, w której zostanie wywołana. Gdy poprzednie wywołanie opuszcza składnię, stan jest tymczasowo zachowany, a jeśli nowe wywołanie do funkcji lambda wchodzi do kompozycji, stan i powiązane węzły są przenoszone do lokalizacji nowego wywołania. Jeśli nie dodasz nowych wywołań, stan zostanie trwale usunięty, a obserwatorzy zostaną o tym powiadomieni.Jeśli funkcja lambda
movableContentOf
jest wywoływana wielokrotnie w tej samej kompozycji, dla każdego wywołania tworzony jest nowy stan i nowe węzły. Gdy wywołania opuszczają kompozycję i wchodzą nowe wywołania, stan jest przenoszony z pierwszych wywołań na opuszczające wywołania w kolejności ich wywołania. Wszystkie stany, które nie zostały zadeklarowane przez nowe połączenia, zostaną trwale usunięte. (Ib4850)Dodano interfejs API śledzenia do kompozycji, aby umożliwić narzędziom bardziej szczegółowe śledzenie funkcji kompozytowych. Kompilator generuje teraz wywołania interfejsu API śledzenia, które zawierają informacje o źródle. (Ib0eb5)
Aby usunąć te wywołania i powiązane z nimi informacje o źródle z kompilacji wersji, dodaj tę regułę Proguard:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { boolean isTraceInProgress(); void traceEventStart(int,java.lang.String); void traceEventEnd(); }
Dodaj
InternalComposeScope
, co pozwoli narzędziom rozpoznawać komponenty podczas rekompozycji. (I07a3f)
Wersja 1.2.0-alpha02
26 stycznia 2022 r.
androidx.compose.runtime:runtime-*:1.2.0-alpha02
został zwolniony. Wersja 1.2.0-alpha02 zawiera te commity.
Wersja 1.2.0-alpha01
12 stycznia 2022 r.
androidx.compose.runtime:runtime-*:1.2.0-alpha01
został zwolniony. Wersja 1.2.0-alpha01 zawiera te commity.
Zmiany w interfejsie API
- Dodaliśmy pole
identity
do polaCompositionData
, aby umożliwić generowanie identyfikatorów niezmiennych w Inspektorze układu. (Ic116e)
Aktualizacje zależności
- Teraz zależy od Kotlina
1.6.10
.
Wersja 1.1
Wersja 1.1.1
23 lutego 2022 r.
androidx.compose.runtime:runtime-*:1.1.1
został zwolniony. Wersja 1.1.1 zawiera te zatwierdzenia.
Poprawki błędów
- Napraw
NullPointerException
wandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
(aosp/1947059, b/206677462). - Naprawiono awarię spowodowaną przez zawartość schowka podczas odczytu ze schowka na Androidzie. (I06020, b/197769306)
- Naprawiono RTL w
LazyVerticalGrid
(aosp/1931080, b/207510535).
Wersja 1.1.0
9 lutego 2022 r.
androidx.compose.runtime:runtime-*:1.1.0
został zwolniony. Wersja 1.1.0 zawiera te zatwierdzenia.
Ważne zmiany od wersji 1.0.0
- stabilna obsługa efektu przewijania do końca w Androidzie 12,
- Ulepszone dopasowywanie rozmiaru dotyku
- Pamiętaj, że w wersji Compose 1.0 komponenty Material Design będą rozszerzać swoją przestrzeń układu, aby spełniać wytyczne Material Design dotyczące rozmiaru docelowego elementu dotykowego. Na przykład docelowy element dotykowy przycisku będzie miał co najmniej rozmiar
48x48dp
, nawet jeśli ustawisz mniejszy rozmiar przycisku. Dzięki temu komponenty Compose będą działać tak samo jak komponenty Material Design, co zapewni spójność, jeśli użyjesz widoków i Compose. Ta zmiana zapewnia też, że podczas tworzenia interfejsu użytkownika za pomocą komponentów Compose Material zostaną spełnione minimalne wymagania dotyczące dostępności docelowych elementów dotykowych. - stabilna obsługa kolumny nawigacji,
- przekształciliśmy kilka wcześniej eksperymentalnych interfejsów API w stabilne.
- Obsługa nowszych wersji Kotlina
Wersja 1.1.0-rc03
26 stycznia 2022 r.
androidx.compose.runtime:runtime-*:1.1.0-rc03
został zwolniony. Wersja 1.1.0-rc03 zawiera te commity.
Poprawki błędów
- Zaktualizowano, aby obsługiwać komponowanie materiału
1.1.0-rc03
Wersja 1.1.0-rc01
15 grudnia 2021 roku
androidx.compose.runtime:runtime-*:1.1.0-rc01
został zwolniony. Wersja 1.1.0-rc01 zawiera te zatwierdzenia.
Wersja 1.1.0-beta04
1 grudnia 2021 r.
androidx.compose.runtime:runtime-*:1.1.0-beta04
został zwolniony. Wersja 1.1.0-beta04 zawiera te commity.
Nowe funkcje
- Zaktualizowano, aby zapewnić zgodność z Kotlin
1.6.0
Wersja 1.1.0-beta03
17 listopada 2021 r.
androidx.compose.runtime:runtime-*:1.1.0-beta03
został zwolniony. Wersja 1.1.0-beta03 zawiera te commity.
Wersja 1.1.0-beta02
3 listopada 2021 r.
androidx.compose.runtime:runtime-*:1.1.0-beta02
został zwolniony. Wersja 1.1.0-beta02 zawiera te commity.
Zmiany w interfejsie API
- Kod zrzutu został podzielony na kilka plików, ale wszystkie nadal znajdują się w tej samej klasie JVM. (Ic6c98)
Wersja 1.1.0-beta01
27 października 2021 roku
androidx.compose.runtime:runtime-*:1.1.0-beta01
został zwolniony. Wersja 1.1.0-beta01 zawiera te commity.
Wersja 1.1.0-alpha06
13 października 2021 r.
androidx.compose.runtime:runtime-*:1.1.0-alpha06
został zwolniony. Wersja 1.1.0-alpha06 zawiera te commity.
Zmiany w interfejsie API
- Usunięto
InternalCompilerApi
z metod Composer, które muszą być wywoływane w ramach modułów (I1aa0b). - Element
Recomposer.state
został wycofany i zastąpiony elementemRecomposer.currentState
, aby zmienić jego typ na StateFlow (Ic2ab3, b/197773820).
Wersja 1.1.0-alpha05
29 września 2021 r.
androidx.compose.runtime:runtime-*:1.1.0-alpha05
został zwolniony. Wersja 1.1.0-alpha05 zawiera te commity.
Wersja 1.1.0-alpha04
15 września 2021 r.
androidx.compose.runtime:runtime-*:1.1.0-alpha04
został zwolniony. Wersja 1.1.0-alpha04 zawiera te commity.
Wersja 1.1.0-alpha03
1 września 2021 roku
androidx.compose.runtime:runtime-*:1.1.0-alpha03
został zwolniony. Wersja 1.1.0-alpha03 zawiera te commity.
Nowe funkcje
- Kompilator Compose obsługuje teraz starsze wersje środowiska wykonawczego Compose (1.0). Przed tą zmianą kompilator Compose był zgodny tylko z Compose Runtime tej samej wersji lub nowszej. 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ło od Kotlina1.5.30
. (I74545)
Wersja 1.1.0-alpha02
18 sierpnia 2021 r.
androidx.compose.runtime:runtime-*:1.1.0-alpha02
został zwolniony. Wersja 1.1.0-alpha02 zawiera te commity.
Wersja 1.1.0-alpha01
4 sierpnia 2021 r.
androidx.compose.runtime:runtime-*:1.1.0-alpha01
został zwolniony. Wersja 1.1.0-alpha01 zawiera te commity.
Wersja 1.0
Wersja 1.0.5
3 listopada 2021 r.
androidx.compose.runtime:runtime-*:1.0.5
został zwolniony. Wersja 1.0.5 zawiera te zatwierdzenia.
Poprawki błędów
- Naprawiono problem ze śledzeniem awarii w przypadku instancji derivedStateOf. (aosp/1792247)
Wersja 1.0.4
13 października 2021 r.
androidx.compose.runtime:runtime-*:1.0.4
został zwolniony. Wersja 1.0.4 zawiera te zatwierdzenia.
Aktualizacje zależności
- Zaktualizowano zależność od Kotlina
1.5.31
Wersja 1.0.3
29 września 2021 r.
androidx.compose.runtime:runtime-*:1.0.3
został zwolniony. Wersja 1.0.3 zawiera te zatwierdzenia.
Aktualizacje zależności
- Zaktualizowano zależność od Kotlina
1.5.30
Wersja 1.0.2
1 września 2021 roku
androidx.compose.runtime:runtime-*:1.0.2
został zwolniony. Wersja 1.0.2 zawiera te zatwierdzenia.
Zaktualizowano, aby obsługiwać wersję 1.0.2
aplikacji Compose. Compose 1.0.2
jest nadal zgodny z Kotlinem 1.5.21
.
Wersja 1.0.1
4 sierpnia 2021 r.
androidx.compose.runtime:runtime-*:1.0.1
został zwolniony. Wersja 1.0.1 zawiera te zatwierdzenia.
Aktualizacje zależności
- Zaktualizowano, aby zależało od Kotlina
1.5.21
.
Wersja 1.0.0
28 lipca 2021 roku
androidx.compose.runtime:runtime-*:1.0.0
został zwolniony. Wersja 1.0.0 zawiera te zatwierdzenia.
Najważniejsze funkcje wersji 1.0.0
To pierwsza stabilna wersja Compose. Więcej informacji znajdziesz na oficjalnym blogu Compose Release.
Znane problemy
Jeśli używasz Android Studio Bumblebee Canary 4 lub AGP
7.1.0-alpha04
/7.1.0-alpha05
, może wystąpić ten błąd:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
Aby to naprawić, tymczasowo zwiększ wartość minSdkVersion do 24 lub wyższej w pliku
build.gradle
. Ten problem zostanie rozwiązany w następnej wersji Android Studio Bumblebee i AGP7.1
. (b/194289155)
Wersja 1.0.0-rc02
14 lipca 2021 roku
androidx.compose.runtime:runtime-*:1.0.0-rc02
został zwolniony. Wersja 1.0.0-rc02 zawiera te zatwierdzenia.
- Naprawiono warunki wyścigu w SnapshotStateObserver, które powodowały niepotrzebne wyjątki NullPointerException. (aosp/1763445, aosp/1758105, b/192677711)
- Rozwiązaliśmy problemy z migawkami czasu wykonywania, które powodowały awarie
java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied
. (b/193006595, b/192570897)
Wersja 1.0.0-rc01
1 lipca 2021 r.
androidx.compose.runtime:runtime-*:1.0.0-rc01
został zwolniony. Wersja 1.0.0-rc01 zawiera te zatwierdzenia.
Wersja 1.0.0-beta09
16 czerwca 2021 r.
androidx.compose.runtime:runtime-*:1.0.0-beta09
został zwolniony. Wersja 1.0.0-beta09 zawiera te commity.
Dodano reguły profilu
W tej wersji dodaliśmy reguły profilu do tych modułów tworzenia wiadomości (I14ed6):
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
Co to są reguły profilu?
Reguły profilu biblioteki są określone w pliku tekstowym
baseline-prof.txt
znajdującym się w katalogusrc/main
lub równoważnym. Plik określa regułę na wiersz, gdzie reguła w tym przypadku jest wzorcem dopasowywania do metod lub klas w bibliotece. Składnia tych reguł jest superzbiorem czytelnego dla człowieka formatu profilu ART, który jest używany podczas korzystania zadb shell profman --dump-classes-and-methods ...
. Te reguły mogą mieć jedną z 2 form, aby kierować się na metody lub klasy.Reguła metody będzie miała ten wzór:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
Reguła klasy będzie miała ten wzór:
<CLASS_DESCRIPTOR>
Tutaj
<FLAGS>
to co najmniej jeden z znakówH
,S
lubP
, który wskazuje, czy ta metoda powinna być oznaczona jako „Aktywna”, „Uruchamianie” lub „Po uruchomieniu”.<CLASS_DESCRIPTOR>
to deskryptor klasy, do której należy docelowa metoda. Na przykład klasaandroidx.compose.runtime.SlotTable
miałaby opisLandroidx/compose/runtime/SlotTable;
.<METHOD_SIGNATURE>
to sygnatura metody, która zawiera nazwę, typy parametrów i typ zwracany metody. Na przykład metodafun isPlaced(): Boolean
w klasieLayoutNode
ma sygnaturęisPlaced()Z
.Te wzorce mogą zawierać symbole wieloznaczne (
**
,*
i?
), aby jedno reguła obejmowała wiele metod lub klas.
Do czego służą zasady?
Metoda z flagą
H
wskazuje, że jest to metoda „gorąca” i należy ją skompilować z wyprzedzeniem.Metoda z flagą
S
wskazuje, że jest to metoda wywoływana podczas uruchamiania i powinna zostać skompilowana wcześniej, aby uniknąć kosztów kompilacji i interpretacji metody podczas uruchamiania.Metoda z flagą
P
wskazuje, że jest wywoływana po uruchomieniu.Klasa obecna w tym pliku wskazuje, że jest używana podczas uruchamiania i powinna być wstępnie przydzielona w pniu, aby uniknąć kosztów wczytywania klasy.
Jak to działa?
- Biblioteki mogą definiować te reguły, które zostaną zapakowane w elementy AAR. Gdy skompilowana aplikacja zawiera te elementy, reguły są scalane, a scalane reguły są używane do tworzenia kompaktowego binarnego profilu ART, który jest specyficzny dla aplikacji. ART może następnie wykorzystać ten profil, gdy aplikacja zostanie zainstalowana na urządzeniach, aby z wyprzedzeniem skompilować określony podzbiór aplikacji w celu poprawy jej wydajności, zwłaszcza podczas pierwszego uruchomienia. Pamiętaj, że nie będzie to miało wpływu na aplikacje z możliwością debugowania.
Wersja 1.0.0-beta08
2 czerwca 2021 r.
androidx.compose.runtime:runtime-*:1.0.0-beta08
został zwolniony. Wersja 1.0.0-beta08 zawiera te commity.
Zmiany w interfejsie API
State<T>
to terazState<out T>
(I69049)ControlledComposition
Zmiana interfejsu API umożliwiająca rekompozycję zmian w pojedynczym przejściu. (Iaafd1, b/184173932)
Wersja 1.0.0-beta07
18 maja 2021 r.
androidx.compose.runtime:runtime-*:1.0.0-beta07
został zwolniony. Wersja 1.0.0-beta07 zawiera te zatwierdzenia.
Zmiany w interfejsie API
- Dodano nowe interfejsy API kompilatora kompozytowego, które umożliwiają usuwanie informacji o kodzie źródłowym wygenerowanych przez kompilator podczas kompresji kodu źródłowego. (Ia34e6)
Wprowadza funkcję
ReusableContent
, która spróbuje ponownie użyć węzłów w swoim zawartości, zamiast zastępować je po zmianie klucza. Gdy klucz zostanie zmieniony, poprzednie wartości w tabeli slotów dla treści są ignorowane, z wyjątkiem wygenerowanych węzłów i wartości użytych do zaktualizowania węzłów.Wprowadza funkcję
ReusableComposeNode
, która ponownie użyje zwróconego węzła zamiast go zastąpić, jak ma to miejsce w przypadku funkcjiComposeNode
. (I1dd86)@ComposeCompilerApi
nie jest już@RequiresOptIn
(Iab690)
Poprawki błędów
- LazyColumn/Row będzie teraz utrzymywać aktywne (nieusunięte) maksymalnie 2 widoczne wcześniej elementy, nawet jeśli zostały już przewinięte. Dzięki temu komponent może ponownie użyć aktywnych podkompozycji, gdy będziemy musieli utworzyć nowy element, co poprawia wydajność przewijania. (Ie5555)
Wersja 1.0.0-beta06
5 maja 2021 roku
androidx.compose.runtime:runtime-*:1.0.0-beta06
został zwolniony. Wersja 1.0.0-beta06 zawiera te zatwierdzenia.
Zmiany w interfejsie API
@ComposeCompilerApi
nie jest już@RequiresOptIn
(Iab690)
Wersja 1.0.0-beta05
21 kwietnia 2021 r.
androidx.compose.runtime:runtime-*:1.0.0-beta05
został zwolniony. Wersja 1.0.0-beta05 zawiera te commity.
Zmiany w interfejsie API
- Usunięto
@InternalComposeApi
dla odczytu i zapisu zrzutów (Id134d)
Poprawki błędów
- Pliki AndroidManifest z ui-test-manifest i ui-tooling-data są teraz zgodne z Androidem 12 (I6f9de, b/184718994)
Wersja 1.0.0-beta04
7 kwietnia 2021 r.
androidx.compose.runtime:runtime-*:1.0.0-beta04
został zwolniony. Wersja 1.0.0-beta04 zawiera te commity.
Poprawki błędów
Przed tą zmianą lokalne funkcje kompozytowe można było pominąć na podstawie ich parametrów. Po tej zmianie żadne lokalne funkcje kompozytowe nie będą pomijane. Ta zmiana została wprowadzona, ponieważ funkcje lokalne często i zwykle przechwytują parametry z funkcji nadrzędnej, a ich pomijanie jest częstym źródłem błędów.
Podsumowując, rozważ ten przykład:
@Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) { @Composable fun ShowCount() { Text("Count: $count") } ShowCount() Button(onClick={ onCountChange(count + 1) }) { Text("Increment") } }
Przed tą zmianą funkcja kompozytowa
ShowCount
zawsze pomijała, nawet po zaktualizowaniu parametrucount
. Ta informacja jest nieaktualna. (I5648a)Rozwiązaliśmy problem, gdy
rememberSaveable()
przywracała starą wartość podczas używania z parametrami wejściowymi (I1b110, b/182403380).
Wersja 1.0.0-beta03
24 marca 2021 r.
androidx.compose.runtime:runtime-*:1.0.0-beta03
został zwolniony. Wersja 1.0.0-beta03 zawiera te komitowane zmiany.
Zmiany w interfejsie API
- Środowisko wykonawcze
DefaultMonotonicFrameClock
zostało wycofane. Wywołanie funkcjiwithFrameNanos
lubRecomposer.runRecomposeAndApplyChanges
bez parametruMonotonicFrameClock
spowoduje wyjątekIllegalStateException
. (I4eb0d)
Wersja 1.0.0-beta02
10 marca 2021 r.
androidx.compose.runtime:runtime-*:1.0.0-beta02
został zwolniony. Wersja 1.0.0-beta02 zawiera te zatwierdzenia.
Poprawki błędów
- Wdrożenie ograniczeń dotyczących publicznego używania eksperymentalnych interfejsów API (I6aa29, b/174531520)
- Rozwiązanie problemu z uszkodzonym elementem
rememberSaveable { mutableStateOf(0) }
używanym w miejscu docelowym w komponencie nawigacji. (I1312b, b/180042685, b/180701630)
Wersja 1.0.0-beta01
24 lutego 2021 r.
androidx.compose.runtime:runtime-*:1.0.0-beta01
został zwolniony. Wersja 1.0.0-beta01 zawiera te commity.
To pierwsza wersja Compose 1.0.0 w wersji beta.
Zmiany w interfejsie API
- Dodaj eksperymentalny interfejs API
Recomposer.runRecomposeConcurrentlyAndApplyChanges
do ponownego tworzenia nieprawidłowych kompozycji poza głównym cyklem ramek. (I342d0) - Wszystkie komponenty z oznaczeniem @ReadOnlyComposable są teraz weryfikowane w czasie kompilacji, aby mieć pewność, że wywołują tylko inne komponenty z oznaczeniem @ReadOnlyComposable (I58961)
Pole
defaultFactory
w przypadkucompositionLocalOf
istaticCompositionLocalOf
jest teraz wymagane, a nie opcjonalne.Ta zmiana usuwa potencjalny błąd typu w przypadku typów, które nie mogą być puste, gdy nie podano fabryki domyślnej. Wcześniej w przypadku typu, który nie może przyjmować wartości null, funkcja ta zwracała odwołanie null.
W przypadku typów z opcją null warto podać
{ null }
jako domyślną fabrykę.Nie zalecamy używania zmiennych lokalnych z typami, które nie mogą być puste, chyba że można podać sensowne wartości domyślne. Jeśli nie ma żadnej sensownej wartości domyślnej, funkcja lambda
defaultFactory
powinna wyrzucić wyjątek. Jednak wywołanie wyjątku oznacza, że konsumenci funkcji lokalnej będą mieli do niej ukrytą zależność, która nie jest wymuszana przez system typów. (Ifbd2a)Usunięto przestarzałe symbole z czasu wykonywania kodu w komponencie (I3252c).
Wycofany interfejs
emptyContent()
został usunięty. Zamiast tego użyj{}
. (Idb33f, b/179432510)Providers zostało zmienione na CompositionLocalProvider
- Konstruktor kompozycji nie akceptuje już parametru key i został wycofany.
- currentCompositeKeyHash została przekształcona z funkcji na najwyższym poziomie na funkcję składaną na najwyższym poziomie.
- Komponenty CompositionData i CompositionGroup zostały przeniesione do przestrzeni nazw androidx.compose.runtime.tooling.
- Zmienna ComposableLambda została zastąpiona interfejsem zamiast konkretnej klasy i nie zawiera już parametrów typu.
- Zmienna ComposableLambdaN została zamieniona na interfejs zamiast konkretnej klasy i nie ma już parametrów typu.
- Funkcja snapshotFlow została przeniesiona do przestrzeni nazw androidx.compose.runtime.
- metoda scalania w SnapshotMutationPolicy nie jest już eksperymentalna
- Usunięto funkcję @TestOnly clearRoots najwyższego poziomu. Nie jest już potrzebne.
- Funkcje keySourceInfoOf i resetSourceInfo zostały usunięte. Nie są już potrzebne.
- Funkcja Composer.collectKeySourceInformation została usunięta. Nie jest już potrzebne.
- Metody isJoinedKey, joinedKeyLeft i joinedKeyRight zostały usunięte. Nie są już potrzebne.
- Różne interfejsy API najwyższego poziomu zostały przeniesione i zreorganizowane w różne pliki. Ze względu na semantykę klasy plików w Kotlinie spowoduje to utratę zgodności binarnej, ale nie źródłowej, więc nie powinno stanowić problemu dla większości użytkowników.
- (I99b7d, b/177245490)
SnapshotStateObserver nie jest już eksperymentalny (Id2e6a)
Usunięto niektóre wycofane wcześniej interfejsy API (Ice5da, b/178633932)
Wprowadziliśmy następujące zmiany w Material API:
- Dodano parametr contentPadding do paska górnego i dolnego, aby umożliwić dostosowanie domyślnego wypełniania.
- Zmieniliśmy kolejność parametrów w BackdropScaffold, aby były zgodne z wytycznymi dotyczącymi interfejsu API, zgodnie z którymi wymagane parametry są umieszczane przed opcjonalnymi.
- Parametr
icon
w BottomNavigationItem został przeniesiony za parametryselected
ionClick
. - Zmieniono nazwę parametru
alwaysShowLabels
w elementach BottomNavigationItem naalwaysShowLabel
. - Parametry
bodyContent
w kilku komponentach zostały przemianowane nacontent
. - Zmieniono kolejność parametrów w plikach
ButtonDefaults.buttonColors()
. Pamiętaj, że typ parametrów się nie zmienił, więc nie spowoduje to błędu w kodzie. Upewnij się, że używasz parametrów nazwanych lub zaktualizujesz ręcznie kolejność parametrów. W przeciwnym razie kod nie będzie działać tak samo jak wcześniej. - Dodano parametr
secondaryVariant
dodarkColors()
. Ten kolor jest zwykle taki sam jaksecondary
w ciemnym motywie, ale dodaje spójność i umożliwia 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ę kolumny
onValueChangeEnd
w tabeliSlider
naonValueChangeFinished
i nadano jej atrybuty nullable. - Zmieniono nazwę parametru
text
w sekcjiSnackbar
nacontent
, aby zachować spójność. - Do parametru
DropdownMenuItem
dodano parametrcontentPadding
, aby umożliwić dostosowywanie domyślnego wypełnienia, a parametrcontent
został rozszerzeniem parametruRowScope
. - Nazwa
ModalDrawerLayout
została zmieniona naModalDrawer
. - Nazwa
BottomDrawerLayout
została zmieniona naBottomDrawer
. - (I1cc66)
Wersja 1.0.0-alpha12
10 lutego 2021 r.
androidx.compose.runtime:runtime-*:1.0.0-alpha12
został zwolniony. Wersja 1.0.0-alpha12 zawiera te commity.
Zmiany w interfejsie API
- Z interfejsu UiApplier usunięto obsługę grup widoków. Usunięto przestarzałe komponenty emitView. (Ifb214)
- Zmiana nazwy CompositionReference na CompositionContext (I53fcb)
- ComponentActivity.setContent zostało przeniesione 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 interfejsu API, a także ukryć wewnętrzne klasy implementacji z publicznego interfejsu API. (Id9e32)
- Zmieniliśmy nazwę sekcji Ambients, aby pasowała do nazwy Ambient -> CompositionLocal. Elementy tła miały kiedyś nazwę „AmbientFoo”, a teraz mają nazwę „LocalFoo”. (I2d55d)
- Zmieniono nazwę parametru Ambient na CompositionLocal, a parametrów ambientOf i staticAmbientOf odpowiednio na compositionLocalOf i staticCompositionLocalOf. Ta zmiana pomaga lepiej zrozumieć cel funkcji CompositionLocal: mechanizmu udostępniania i pobierania wartości lokalnych dla kompozycji. Instanse CompositionLocal powinny mieć prefiks
Local
, np. val LocalFoo = compositionLocalOf { Foo() }. (Ia55b6) - Metody takeMutableSnapshot i takeSnapshot zostały przeniesione do metod towarzyszących zrzutu. (I91f19)
@ComposableContract
został wycofany na rzecz 3 bardziej szczegółowych adnotacji.@ComposableContract(restartable = false)
stało się@NonRestartableComposable
,@ComposableContract(readonly = true)
–@ReadOnlyComposable
,@ComposableContract(preventCapture = true)
–@DisallowComposableCalls
, a@ComposableContract(tracked = true)
zostało usunięte. (I60a9d)Narzędzia emptyContent() i (@Composable () -> Unit).orEmpty() zostały wycofane, ponieważ nie mają już żadnego pozytywnego wpływu na wydajność ani wartość (I0484d)
snapshotFlow
iwithMutableSnapshot
nie są już eksperymentalne (I6a45f)Rekompilatory można teraz zamknąć. Zamknięte rekompilatory będą kontynuować rekompilację do momentu zakończenia wykonania podprocesów potomnych. Funkcja Recomposer.shutDown została przemianowana na cancel, aby odróżnić ją od funkcji close. (Ib6d76)
Element
compose:runtime-dispatch
został wycofany. MonotonicFrameClock znajdziesz teraz w komponencie compose:runtime, a AndroidUiDispatcher – w komponencie compose:ui. (Ib5c36)Interfejs API, do którego kieruje się wtyczka kompilatora Compose, został przebudowany, aby używać interfejsu zamiast konkretnej klasy. Interfejs nie używa już też parametru typu.
Ta zmiana jest zmianą wewnętrzną, która nie powinna mieć wpływu na zgodność kodu źródłowego, ale powoduje zmianę binarną. (I3b922, b/169406779)
Wprowadzono klasę SnapshotMutableState (Icfd03)
DisposableEffectDisposable został przemianowany na DisposaleEffectResult (Ica7c6).
Usunięto funkcję Recomposer.current(). [Abstract]ComposeView jest teraz domyślnie ustawiona na leniwie tworzone obiekty Recomposer ograniczone do okna, które są zarządzane przez obiekt ViewTreeLifecycleOwner dla okna. Rekompozycja i ticki animacji oparte na metodzie FrameNano są wstrzymywane, gdy cykl życia hosta jest zatrzymany. (I38e11)
Recomposer.runningRecomposers udostępnia teraz globalny stan StateFlow tylko do odczytu RecomposerInfo, który umożliwia obserwowanie bieżącego stanu kompilacji w trakcie procesu. Używaj tego interfejsu API zamiast Recomposer.current(), który został wycofany. (If8ebe)
DisposableEffectDisposable został przemianowany na DisposaleEffectResult (I3ea68).
Wersja 1.0.0-alpha11
28 stycznia 2021 roku
androidx.compose.runtime:runtime-*:1.0.0-alpha11
został zwolniony. Wersja 1.0.0-alpha11 zawiera te commity.
Zmiany w interfejsie API
- Interfejsy onCommit, onDispose i onActive zostały wycofane na rzecz interfejsów SideEffect i DisposableEffect (If760e).
- Interfejs emit() i wszystkie jego przeciążenia zostały wycofane i przemianowane na ComposeNode. Interfejsy API są identyczne, ale mają inną nazwę, aby zachować konwencję nazewnictwa w Compose (I4137b).
- Funkcje invalidate i compositionReference() zostały wycofane na rzecz funkcji currentRecomposeScope i rememberCompositionReference. (I583a8)
Observer pamięci zastępuje CompositionLifecycleObserver, a CompositionLifecycleObserver jest teraz wycofany.
RememberObserver
zastępujeCompositionLifecycleObserver
z modyfikowaną semantyką i przemianowanymi metodami. Przejście na nowy interfejs API można przeprowadzić automatycznie w przypadku obiektów, które są zapamiętywane tylko raz. Jest to zalecana praktyka. Jeśli jednak odwołanie zostało zapamiętane więcej niż raz w kompozycji, funkcjaonRemembered
jest wywoływana w przypadku każdego odwołania, w którym funkcjaonEnter
jest wywoływana tylko raz.onEnter
został wywołany wielokrotnie, jeśli obiekt był używany w podkompozycjach, takich jakWithConstraints
iScaffold
, co sprawia, że gwarancja pojedynczego wywołaniaonEnter
jest niewiarygodna i została usunięta zRememberObserver
.RememberObserver
dodajeonAbandoned
, które jest wywoływane, jeśli instancjaRememberObserver
zostanie zwrócona z połączenia zwrotnego przekazanego doremember
, ale nie została zapamiętana w stanie kompozycji. W związku z tym nigdy nie zostanie wywołaneonRemembered
. Może się tak zdarzyć, jeśli wyjątek spowoduje przerwanie tworzenia kompozycji przed jego zakończeniem lub jeśli kompozycja zostanie odrzucona, ponieważ stan, dla którego była tworzona, nie jest już aktualny lub nie jest już potrzebny. Jeśli instancjaRememberObserver
po zalecanej powyżej rekomendacji dotyczącej jednego odwołania ś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 w funkcjionRemembered
, można zignorować funkcjęonAbandoned
, ponieważ nie zostanie ona wywołana, gdy wywołana zostanie funkcjaonRemembered
. (I02c36)Nie oznaczaj funkcji
collectAsState()
jako wbudowanych (Ia73e4)
Poprawki błędów
- Element WithConstraints został przerobiony na BoxWithConstraints i przeniesiony do pakietu foundation.layout. (I9420b, b/173387208)
- Korzystanie z TestCoroutineDispatcher w testach (I532b6)
Wersja 1.0.0-alpha10
13 stycznia 2021 r.
androidx.compose.runtime:runtime-*:1.0.0-alpha10
został zwolniony. Wersja 1.0.0-alpha10 zawiera te zatwierdzenia.
Zmiany powodujące niezgodność
Restrukturyzacja wewnętrznego interfejsu API kompilatora umożliwia grupowanie zmian węzłów wygenerowanych w ramach etapu „Zastosuj zmiany” kompozycji po zakończeniu działania wszystkich funkcji
@Composable
.Jest to zmiana zachowania, która może wpłynąć na kod aplikacji, ponieważ węzły nie są już dostępne z interfejsów API eksperymentalnych i wewnętrznych do czasu zastosowania zmian. Zwykle można to obejść, otaczając kod z takimi zależnościami w komponencie
SideEffect
, aby odłożyć wykonanie kodu do momentu utworzenia i inicjalizacji węzłów. (I018da)
Zmiany w interfejsie API
- Dodano sposób śledzenia, czy rekompilator zastosował zmiany. (I1b3e2)
Rozszerzenie interfejsów API ComposeView [Abstract]w celu umożliwienia recyklingu widoków opartych na Compose, a także usunięcia ich kompozycji, aby można było je ponownie utworzyć w późniejszym czasie. Dodać interfejsy API do instalowania i odnajdywania rekompilujących komponentów ograniczonych do okna oraz odniesienia do kompozycji do tworzenia podrzędnych kompozycji.
Dodaj ViewCompositionStrategy do konfigurowania strategii usuwania kompozycji [Abstract]ComposeViews; domyślne zachowanie to usunięcie przy odłączaniu okna. (I860ab)
Poprawki błędów
- Recomposer udostępnia teraz przepływ danych w bieżącym stanie, 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
androidx.compose.runtime:runtime-*:1.0.0-alpha09
został zwolniony. Wersja 1.0.0-alpha09 zawiera te commity.
Zmiany w interfejsie API
Usunięto klasy SlotTable, SlotReader i SlotWriter z publicznego interfejsu API. Wcześniej były one oznaczone jako InternalComposeAPI. Teraz są one wewnętrzne w module tworzenia.
Dodaliśmy obiekty CompositionData i CompositionGroup jako zamiennik interfejsu ui-tooling API do wyodrębniania informacji o kompozycji. Są one publiczne, ale nie są przeznaczone do użytku poza interfejsem ui-tooling API, ponieważ zawierają informacje w postaci nieprzetworzonej, które interfejs ui-tooling API interpretuje (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 zamiast odwrotnie.Nazwa metody
insert()
została zmieniona nainsertTopDown()
.Dodano nową metodę
insertBottomUp()
.Aplikator wstawia węzły do drzewa, które modyfikuje, za pomocą funkcji
insertTopDown()
lubinsertBottomUp()
, w zależności od tego, która z nich działa lepiej.Niektóre drzewa, np.
LayoutNode
iView
, są znacznie wydajniejsze w budowaniu od dołu do góry niż odwrotnie. Przed tą zmianą implementacja metody od dołu wymagała użycia zbioru wstawek, które trzeba było kopiować do każdego miejsca, w którym była potrzebna konstrukcja od dołu ze względu na wydajność. Ta zmiana zastępujeApplier
przezinsertBottomUp()
, aby tworzyć drzewo od dołu do góry, orazinsertTopDown()
, aby tworzyć drzewo od góry do dołu. (Icbdc2)Compose obsługuje metody pobierające właściwości, które mogą wywoływać kompozytowe wywołania. Nie zamierzamy rezygnować z tej funkcji, ale zmienia się składnia deklarowania funkcji pobierającej właściwości jako @Composable.
Składnia, która została wycofana, polegała na dodawaniu adnotacji do usługi:
@Composable val someProperty: Int get() = ...
Prawidłowa składnia to dodanie adnotacji do metody gettera właściwości:
val someProperty: Int @Composable get() = ...
Obie składnie będą działać przez jakiś czas, ale wcześniejsza wycofana składnia w końcu spowoduje 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.
androidx.compose.runtime:runtime-*:1.0.0-alpha08
został zwolniony. Wersja 1.0.0-alpha08 zawiera te commity.
Zmiany w interfejsie API
- Dodano sprawdzanie lint pod kątem nazw i pozycji parametrów funkcji kompozytowych lambda, aby sprawdzić zgodność z wytycznymi Compose.
Zgodnie z instrukcjami i sprawdzaniem błędów niektóre interfejsy API, które używają nazwy
children
jako nazwy funkcji lambda na końcu, zostały przeniesione docontent
. (Iec48e) - Recomposer nie akceptuje już EmbeddingContext; wymagane zależności harmonogramu są pobierane z effectCoroutineContext. Interfejs FrameManager został wycofany. Integracje z platformami powinny inicjować własne globalne przetwarzanie zrzutów. (I02369)
- Funkcja RestorableStateHolder.withRestorableState została przemianowana na RestorableStateProvider (I66640)
Poprawki błędów
- wycofane ambienty o nazwach zawierających sufiks
Ambient
i zastąpione nowymi właściwościami z prefiksem Ambient zgodnie z innymi wytycznymi dotyczącymi ambientów i interfejsu Compose API; (I33440) - Usuwanie starego modułu testu UI i jego zastępników (I3a7cb)
Wersja 1.0.0-alpha07
11 listopada 2020 roku
androidx.compose.runtime:runtime-*:1.0.0-alpha07
został zwolniony. Wersja 1.0.0-alpha07 zawiera te commity.
Nowe funkcje
Zmiany w interfejsie API
- Adnotacja
@UnionType
została wycofana (I57cde) - Opcja provideDefault została dodana jako alternatywa dla provide na potrzeby dostarczania wartości ambient. Można jej używać do określania wartości ambient, które będą ustawiane tylko wtedy, gdy nie ma jeszcze wartości ambient. (Id6635, b/171024925)
- Zadanie uruchamiane zostało przemianowane na efekt uruchamiania w celu zachowania spójności z interfejsami SideEffect i DisposableEffect. Aby zachęcić do stosowania sprawdzonych metod, nie zezwalamy na używanie LaunchedEffect bez parametrów podmiotu. (Ifd3d4)
- Moduł Applier ma teraz funkcje zwrotne onBeginChanges i onEndChanges, które są wywoływane, gdy kompozytor rozpoczyna lub kończy stosowanie zmian w drzewie. W razie potrzeby można ich używać do zbiorczego zarządzania zasobami. (Icf476)
- Recomposer wymaga teraz kontekstu coroutine w czasie tworzenia (Ic4610)
- Zmiany w wewnętrznej implementacji SlotTable, które nie powinny mieć wpływu na publiczny interfejs API. (If9828)
- Usunięto przestarzałe adaptery rxjava2, które nie przyjmują wartości początkowej (Idb72f).
Poprawki błędów
- Komponent foundation.Text został wycofany i zastąpiony komponentem material.Text. Interfejs API tekstowy podstawowy, który nie używa wartości z motywu, znajdziesz w bibliotece androidx.compose.foundation.BasicText. (If64cb)
- Komponent BaseTextField został wycofany. Zamiast tego użyj pola tekstowego podstawowego. (I896eb)
- Kilka symboli związanych z układem zostało przeniesionych z androidx.compose.ui do androidx.compose.layout.ui. (I0fa98, b/170475424)
Darowizna zewnętrzna
- Dodano moduł
runtime-rxjava3
do tworzenia wiadomości. Podobne doruntime-rxjava2
(I02cbf)
Wersja 1.0.0-alpha06
28 października 2020 r.
androidx.compose.runtime:runtime-*:1.0.0-alpha06
został zwolniony. Wersja 1.0.0-alpha06 zawiera te commity.
Zmiany w interfejsie API
- Recomposer jest teraz elementem CompositionReference i prawidłowym elementem nadrzędnym kompozycji. Wyraźny Recomposer jest teraz wymagany w mniejszej liczbie miejsc. (I4036f)
- Dodano do interfejsu SideEffect interfejs DisposableEffect, który pełni rolę interfejsu onCommit-with-params, ale wymaga interfejsu onDispose.
- Dodano interfejs API rememberUpdatedState, aby publikować dane z rekompozycji w ciągłych lub długotrwałych procesach, takich jak DisposableEffects lub LaunchedTasks.
- (Id50b9)
- MutableVector implementuje teraz interfejs RandomAccess (I85d73, b/170461551).
- Dodano kompozytywny efekt uboczny, który umożliwia stosowanie efektów ubocznych kompozycji do obiektów zarządzanych przez kompozycję. SideEffect ma zastąpić kompozyt naCommit. (Ia77c2)
- Nowy eksperymentalny interfejs API RestorableStateHolder. Umożliwia zapisanie stanu zdefiniowanego za pomocą [savedInstanceState] i [rememberSavedInstanceState] dla poddrzewa przed jego usunięciem, aby umożliwić jego ponowne złożenie przy następnym uruchomieniu z przywróconym stanem. (I66884, b/166586419)
Poprawki błędów
- Włącz przejścia w komponencie ComposeTestRule. Usuń z niego opcję włączania migającego kursora. (If0de3)
Wersja 1.0.0-alpha05
14 października 2020 r.
androidx.compose.runtime:runtime-*:1.0.0-alpha05
został zwolniony. Wersja 1.0.0-alpha05 zawiera te commity.
Zmiany w interfejsie API
- Eksperymentalny modyfikator Modifier.pointerInput zawieszający modyfikator wejścia (Ia77d2)
- Wydajność przewijania kolumny/wiersza typu Lazy jest ulepszona dzięki mniejszemu obciążeniu podkompozycji przy każdym przewijaniu. Do klasy Composition dodano nową metodę hasInvalidations(). Metoda hasPendingChanges() z kompozycji została przemianowana na hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371).
- Dodaj interfejs API produceState do uruchamiania coroutines z kompozycji, które aktualizują pojedynczą wartość
State<T>
w czasie (Id4a57) - Zmiana nazwy metody launchInComposition na LaunchedTask, aby była zgodna z wytycznymi dotyczącymi interfejsu API Compose (I99a8e)
- Kolejność wywołań place() w niestandardowych układach określa teraz kolejność rysowania elementów podrzędnych (Ibc9f6)
Wersja 1.0.0-alpha04
1 października 2020 roku
androidx.compose.runtime:runtime-*:1.0.0-alpha04
został zwolniony. Wersja 1.0.0-alpha04 zawiera te commity.
Zmiany w interfejsie API
- Dodano OwnerScope, aby umożliwić zbieranie zakresów obserwacji układu i rysowania, gdy nie są już ważne. (Ic4cf8)
- Dodano interfejs derivedStateOf API do tworzenia obiektów State na podstawie obliczeń, które mogą odczytywać (i wyprowadzać) inne obiekty State (If758b).
- Dodano interfejs TestOnly API dla SnapshotStateObserver (I6e2a9).
Poprawki błędów
- Element foundation.Box został wycofany. Zamiast tego użyj elementu foundation.layout.Box. (Ie5950, b/167680279)
Wersja 1.0.0-alpha03
16 września 2020 roku
androidx.compose.runtime:runtime-*:1.0.0-alpha03
został zwolniony. Wersja 1.0.0-alpha03 zawiera te commity.
Zmiany w interfejsie API
CompositionCoroutineScope
nie implementuje już funkcjiMonotonicFrameClock
. Osoby wywołujące funkcjęwithFrameNanos
powinny jawnie zaimportować funkcję najwyższego poziomu. (Icb642, b/166778123)
Poprawki błędów
- Funkcje globalnego testowania, takie jak
onNode
lubwaitForIdle
, są teraz wycofane. Przejdź na ich nowe odpowiedniki zdefiniowane w ComposeTestRule (I7f45a). launchInComposition
nie uruchamia już współprogramów bez wysłania (Ief6af, b/166486000)
Wersja 1.0.0-alpha02
2 września 2020 r.
androidx.compose.runtime:runtime-*:1.0.0-alpha02
został zwolniony. Wersja 1.0.0-alpha02 zawiera te commity.
Zmiany w interfejsie API
- Dodaj interfejsy API
snapshotFlow
iwithMutableSnapshot
, aby korzystać z zmian danych migawek i je wprowadzać. (I3e722) Zmieniono konwencję wywoływania funkcji składanych. To zmiana powodująca niezgodność binarną. Wszystkie biblioteki muszą zostać ponownie skompilowane, aby działały z tą wersją wtyczki kompilatora Compose.
Ta zmiana nie powoduje zmiany w źródle, ponieważ jedynymi zmienionymi interfejsami API są interfejsy kompilatora, które wymagają wyraźnego włączenia. (I7afd2, b/158123185)
Usunięto metody planowania z EmbeddingContext (I7b9be)
Metoda onPreCommit została wycofana. Metoda onCommit ma teraz zachowanie takie jak onPreCommit.
Teraz funkcje onCommit i onActive są wykonywane w tym samym interwale, w którym są wprowadzane zmiany w kompozycji, a nie na początku następnego interwału. (I70403)
Wersja 1.0.0-alpha01
26 sierpnia 2020 r.
androidx.compose.runtime:runtime-*:1.0.0-alpha01
został zwolniony. Wersja 1.0.0-alpha01 zawiera te commity.
Wersja 0.1.0-dev
Wersja 0.1.0-dev17
19 sierpnia 2020 r.
androidx.compose.runtime:runtime-*:0.1.0-dev17
został zwolniony. Wersja 0.1.0-dev17 zawiera te commity.
Zmiany w interfejsie API
- Emitowanie niestandardowe może teraz deklarować, że co najmniej 1 z jego ustawiaczy może być pomijany i zmieniany niezależnie od emitowania. (Ibbd13)
Usunięto nieaktualne wywołania FrameManager.
Zmieniono wewnętrzne interfejsy API do komponowania, aby zmniejszyć nakład pracy związany z monitorowaniem obiektów stanu, takich jak
mutableStateof()
(I80ba6).Właściwość
state { ... }
została wycofana na rzecz wywołań funkcjiremember { mutableStateOf(...) }
, aby zwiększyć przejrzystość. Dzięki temu zmniejsza się ogólna powierzchnia interfejsu API i liczba pojęć związanych z zarządzaniem stanem oraz dopasowuje się do wzoruby mutableStateOf()
dotyczącego delegowania właściwości klasy. (Ia5727)Funkcja Flow.collectAsState określa teraz domyślny moduł rozsyłający na podstawie samej kompozycji, a nie domyślnie Dispatchers.Main. (I9c1d9)
Naprawiono błąd powodujący awarię, gdy w pętli for używano czegoś, co zapisuje stan. Teraz można używać tego samego klucza w savedInstanceState(), a interfejs API rejestru 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, do emitowania widoków w komponencie Compose użyj elementuAndroidView
. Pamiętaj, że w przyszłości nie będzie można bezpośrednio tworzyć widoków i grup widoków, chyba że są one elementami liściastymi w drzewie kompozycji, co można osiągnąć za pomocą AndroidView. (I29b1e, b/163871221)
Wersja 0.1.0-dev16
5 sierpnia 2020 r.
androidx.compose.runtime:runtime-*:0.1.0-dev16
został zwolniony. Wersja 0.1.0-dev16 zawiera te commity.
Zmiany w interfejsie API
Domyślna zasada mutacji w przypadku
mutableStateOf()
,ambientOf()
isavedInstanceStateOf()
została zmieniona zreferentialEqualityPolicy()
nastructuralEqualityPolicy()
.Domyślne kryterium określania, czy nowa wartość przypisana do instancji
mutableStateOf()
jest uważana za zmianę, teraz domyślnie używa parametru==
zamiast parametru===
.https://kotlinlang.org/docs/reference/equality.html
ambientOf()
isavedInstanceStateOf()
używająmutableStateOf()
w swoich implementacjach, więc zostały one zmienione, aby były zgodne zmutableStateOf()
.Używanie równości strukturalnej lepiej odpowiada oczekiwaniom programistów.
Na przykład
val state = mutableStateOf(1f)
a następnie
state.value = 1f
nie będzie już uważana za zmianę do
state
, a użyciestate
podczas tworzenia kompozycji nie będzie już wymagać ponownego skomponowania.Jest to zmiana powodująca przerwanie działania aplikacji, ale w większości przypadków (np. gdy używasz klas, które nie zastępują
equals()
) nie będzie ona miała zauważalnego wpływu na aplikację.Zajęcia, które zastępują
equals()
, takie jak zajęciadata
, mogą mieć gorszą wydajność, ponieważ ich metodyequals()
są teraz domyślnie wywoływane, gdy są przypisane do zajęćmutableStateOf()
.Aby przywrócić poprzednie działanie, dodaj parametr zasad
policy = referentialEqualityPolicy()
do wywołań funkcjimutableStateOf()
,ambientOf()
isavedInstanceStateOf()
. (Ic21a7)Funkcje
Row
iColumn
są teraz funkcjami w wierszu, co znacznie zmniejsza obciążenie związane z ich używaniem. (I75c10)
Poprawki błędów
- Metoda setViewContent została wycofana. Zamiast niej należy używać metody setContent. (I7e497, b/160335130)
Dodano zegar MonotonicFrameAnimationClock, który umożliwia użycie obiektu MonotonicFrameClock jako obiektu AnimationClockObservable, aby wypełnić lukę między nowymi zegarami opartymi na coroutines i interfejsami API, które nadal używają starych zegarów opartych na wywołaniu zwrotnym.
odpowiednikiem klasy ManualAnimationClock jest teraz klasa ManualFrameClock. (I111c7, b/161247083)
Modifier.stateDraggable został całkowicie przerobiony i przemianowany na Modifier.swipeable. Wprowadziliśmy nową klasę SwipeableState, a klasy DrawerState i BottomDrawerState zostały przebudowane, aby mogły z niej dziedziczyć. [Modal/Bottom]DrawerLayout nie przyjmuje już parametru onStateChange. (I72332, b/148023068)
Interfejs Modifier.plus został wycofany. Zamiast niego używaj interfejsu Modifier.then. „Then” ma silniejszy sygnał dotyczący kolejności, ale jednocześnie uniemożliwia wpisanie
Modifier.padding().background() + anotherModifier
, co powoduje przerwanie łańcucha i utrudnia czytanie (Iedd58, b/161529964)Dodano element SubcomposeLayout. Jest to prymityw niskiego poziomu, który umożliwia tworzenie podrzędnych podczas pomiaru, jeśli chcemy użyć niektórych wartości dostępnych dopiero później podczas pomiaru podrzędnego. Na przykład ograniczenie WithConstraints nie jest implementowane za pomocą funkcji SubcomposeLayout. (I25cc8)
Nazwa Material FilledTextField została zmieniona na TextField, a podstawowa nazwa TextField została zmieniona na BaseTextField, aby ułatwić znajdowanie i używanie najprostszego interfejsu API (Ia6242, b/155482676).
Modifier.drawBackground został przemianowany na Modifier.background (I13677)
Wersja 0.1.0-dev15
22 lipca 2020 r.
androidx.compose.runtime:runtime-*:0.1.0-dev15
został zwolniony. Wersja 0.1.0-dev15 zawiera te commity.
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. Jako alternatywy użyj funkcji state i mutableStateOf. Ta decyzja o wycofaniu została podjęta po długiej i dogłębnej dyskusji.Uzasadnienie
Uzasadnienie może obejmować m.in.:
- Zmniejszenie obszaru interfejsu API i pojęć, które musimy przekazać
- większe podobieństwo do innych porównywalnych pakietów narzędzi (Swift UI, React, Flutter);
- Odwracalna decyzja. Zawsze możemy przywrócić
@Model
później. - Usunięcie rzadko używanych funkcji i trudnych do udzielenia odpowiedzi pytań dotyczących konfigurowania
@Model
jako rzeczy, które musimy obsłużyć @Model
klasy danych, operator równości, kod hash itp.- How do I have some properties “observed” and others not?
- Jak określić, czy w obserwacji ma być używana równość strukturalna czy referencyjna?
- Zmniejsza „magię” w systemie. Zmniejszenie prawdopodobieństwa, że ktoś uzna, że system jest mądrzejszy niż jest w rzeczywistości (np. że wie, jak porównać dwie listy).
- Ułatwia intuicyjne określenie szczegółowości obserwacji.
- Ulepszenie możliwości refaktoryzacji z użycia zmiennej do właściwości klasy
- Może umożliwić ręczne optymalizowanie stanu
- Lepiej pasuje do reszty ekosystemu i zmniejsza niejednoznaczność w przypadku niezmiennych stanów lub „przyjmowania zmiennych stanów”.
Informacje o migracji
Prawie wszystkie istniejące użycia
@Model
są dość łatwo przekształcane na jeden z 2 sposobów. Przykład poniżej zawiera klasę@Model
z 2 właściwościami tylko na potrzeby przykładu i używaną w komponowalnym.@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 } ) }
Opcja 1. Użyj
State<OriginalClass>
i utwórz kopie.Takie podejście ułatwiają klasy danych w Kotlinie. W zasadzie należy przekształcić wszystkie właściwości
var
w usługival
klasy danych, a potem użyć właściwościstate
zamiastremember
i przypisać wartość stanu do sklonowanych kopii oryginału za pomocą metody ułatwiającejcopy(...)
klasy danych.Pamiętaj, że to podejście działa tylko wtedy, gdy jedyne mutacje tej klasy zostały wprowadzone w tym samym zakresie, w jakim utworzono instancję
State
. Jeśli klasa wewnętrznie mutuje się poza zakresem użycia i stosujesz obserwację tego procesu, możesz użyć tego podejścia.data class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, onXChange={ p = p.copy(x=it) } onYChange={ p = p.copy(y=it) } ) }
Alternatywa 2. Użyj funkcji mutableStateOf i delegatów właściwości
Takie podejście jest ułatwione dzięki delegatom właściwości w Kotlinie i interfejsowi API
mutableStateOf
, który umożliwia tworzenie instancji MutableState poza kompozycją. Zasadniczo należy zastąpić wszystkie właściwościvar
oryginalnej klasy właściwościamivar
z usługąmutableStateOf
jako ich delegatem. Zaletą tego jest to, że korzystanie z klasy nie ulegnie zmianie, tylko jej wewnętrzna implementacja. Zachowanie nie jest jednak całkowicie identyczne z pierwotnym przykładem, ponieważ każda usługa jest teraz obserwowana lub subskrybowana osobno, więc rekompozycje, które zobaczysz po tej zmianie, mogą być węższe (co jest dobrą rzeczą).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 wprowadzeniem tej zmiany kompilator kompozytowy przekształcał wywołania w funkcje kompozytowe. Dzięki tej zmianie modyfikujemy teraz ciało funkcji składanej, a miejsce wywołania pozostawiamy bez zmian (w większości).
Oznacza to, że większość logiki komunikującej się z runtimem usługi Compose jest wykonywana na początku ciała funkcji, a nie w miejscu wywołania.
Powinna to być zmiana zgodna ze źródłem we wszystkich przypadkach użycia funkcji Compose. Większość użytkowników usługi Compose nie powinna być zmuszona do aktualizowania kodu.
Aby umożliwić to, zmieniliśmy sygnaturę JVM wszystkich funkcji kompozytowych. Funkcja składana, która akceptuje jeden parametr, jest przekształcana w funkcję akceptującą 3 parametry. Dodatkowe parametry to kompozytor, liczba całkowita „klucza” i liczba całkowita bitowa używana do propagowania metadanych przez wywołania.
Funkcja Compose przekształca teraz również argumenty domyślne w funkcję składającą się. Robi to bez wprowadzania dodatkowego domyślnego przeciążenia 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 składane w domyślnych wyrażeniach argumentów są teraz prawidłowo subskrybowane i obsługiwane
W ramach tych prac wprowadziliśmy kilka optymalizacji: 1. Wyniki porównań parametrów są propagowane przez wykres wywołania do innych funkcji kompozytowych. Spowoduje to mniejszą liczbę porównań w czasie wykonywania, zmniejszy rozmiar tabeli slotów, a także zwiększy pomijanie funkcji kompozytowych, które wcześniej nie były pomijane. Parametry, które w czasie kompilacji zostały uznane za „statyczne”, nie są już porównywane ani przechowywane w czasie wykonywania. Zmniejsza to liczbę porównań i rozmiar tabeli slotów. 3. Struktura przepływu sterowania w ciele funkcji służy do minimalizowania liczby generowanych grup. Zmniejsza to rozmiar tabeli slotów i obciążenie środowiska uruchomieniowego. 4. Nieużywane parametry funkcji dispatch i receiver nie są uwzględniane przy określaniu możliwości pominięcia funkcji, jeśli nie są używane w jej treści.
Większość zmian dotyczyła interfejsów API, na które kompilator kieruje bezpośrednio. Nie wpłynęło to na typowe korzystanie z Compose: 1. Funkcja Composer::startExpr została usunięta. Funkcja Composer::endExpr została usunięta. Funkcja Composer::call została wycofana. Zostały usunięte przeciążenia funkcji
key
, które nie są związane z varargs. Od teraz używaj wersjivararg
. 5. Adnotacja Pivotal została wycofana. Użyjkey
jako zamiennika. 6. Zmieniono funkcję ScopeUpdateScope::updateScope, aby oczekiwała ona funkcji Function3 zamiast funkcji Function1. 7. Zaktualizowano funkcje restartableFunction i restartableFunctionN, aby uwzględniały dodatkowe parametry kompilacji (I60756, b/143464846).Dodano sortWith i removeRange do MutableVector (Icccf7)
Dodano domyślne implementacje metody CompositionLifecycleObserver (I24289)
Applier wymaga teraz metody clear() do usuwania kompozyt (Ibe697)
Dodaliśmy do klasy MutableVector metodę asMutableList(), 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 obiekt 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ść ponad inne wymagania i jest przeznaczona do użytku wewnętrznego. (I8ebd6)
Tymczasowo usunięto
StableMutableList
iStableMutableMap
, aby uniknąć problemu w wersji Kotlin Compose. Te interfejsy zostaną ponownie wprowadzone, gdy kompozytor zostanie zaktualizowany do wersji Kotlin, która nie ma tego problemu.SnapshotStateList
iSnapshotStateMap
są teraz publicznie dostępne, ale zostaną wycofane, gdy przywrócimyStableMutableList
iStableMutableMap
. (Ia7769)dodać funkcję najwyższego poziomu withFrameNanos do określania czasu animacji (Ie34c5)
Adnotacja @Untracked została wycofana. Zastąp to elementem @ComposableContract(tracked=false) (Id211e).
RestartableFunction i powiązane z nim interfejsy API zostały przemianowane na ComposableLambda itp. Te interfejsy API były kierowane tylko przez kompilator, więc nie powinny wpływać na zgodność na poziomie kodu źródłowego. Zmiana nazwy została wprowadzona głównie po to, aby lepiej informować o tym, czym jest ta klasa, gdy pojawia się w śladach stosu (I7eb25).
adnotacja @Composable nie jest już ważna w przypadku klas (Ia5f02)
Ambient<T>
ma teraz atrybuty @Stable zamiast @Immutable (I0b4bb)Przed tą zmianą wtyczka kompilatora kompozytora przechwytywała wywołania konstruktorów w funkcji @Composable, jeśli wystąpiły one w ramach (I5205a, b/158123804)
Komponent Recompose nie jest już przydatną abstrakcją. Większość ponownych skompilowań powinna nastąpić w wyniku przypisania stanu zmiennego. W przypadku innych wartości zalecamy użycie funkcji
invalidate
, aby wywołać ponowne skompilowanie bieżącego zakresu. (Ifc992)Obserwowanie nie jest już przydatną abstrakcją. Jeśli chcesz go powielić, możesz to zrobić, tworząc funkcję składającą się z parametrów, która wykonuje składany parametr lambda. Na przykład
@Composable fun Observe(body: @Composable () -> Unit) = body()
(I40d37).@Direct zostało wycofane na rzecz @ComposableContract(restartable=false) (If4708)
Dodano adapter dla niedawno wprowadzonego StateFlow, który umożliwia wstępne wypełnienie wartości początkowej, dzięki czemu zwracany stan nie może być pusty (I61dd8, b/156233789).
Dodano adapter dla Flow. Przykład użycia: val value przez flow.collectAsState() (If2198, b/153375923)
[Zmienne]Operatory delegujące właściwości stanu zostały przeniesione do rozszerzeń, aby umożliwić optymalizację delegowania właściwości w wersji Kotlin 1.4. Aby nadal korzystać z
by state { ... }
lubby mutableStateOf(...)
, dzwoniący muszą dodać importy. (I5312c)Interfejs androidx.compose.ViewComposer został przeniesiony do androidx.ui.node.UiComposer. Interfejs androidx.compose.Emittable został usunięty. Był on zbędny w porównaniu z ComponentNode. androidx.compose.ViewAdapters został usunięty. Nie są one już obsługiwane. Metoda Compose.composeInto została wycofana. Użyj w zamian pola
setContent
lubsetViewContent
. Metoda Compose.disposeComposition została wycofana. Zamiast tego użyj metodydispose
w obiekcieComposition
zwracanym przez funkcjęsetContent
. Funkcja androidx.compose.Compose.subcomposeInto została przeniesiona do androidx.ui.core.subcomposeInto. Metoda ComponentNode#emitInsertAt została przemianowana na ComponentNode#insertAt. Metoda ComponentNode#emitRemoveAt została przemianowana na ComponentNode#removeAt. Metoda ComponentNode#emitMode została przemianowana na ComponentNode#move (Idef00)Zaktualizowaliśmy flagę
ComposeFlags.COMPOSER_PARAM
natrue
, co spowoduje zmianę strategii generowania kodu w pluginie do tworzenia wiadomości. Ogólnie rzecz biorąc, powoduje to, że funkcje @Composable są generowane z dodatkowym parametrem syntetycznym, który jest przekazywany do kolejnych wywołań @Composable, aby środowisko uruchomieniowe mogło prawidłowo zarządzać wykonywaniem. Jest to istotna zmiana w binarnych danych, która jednak powinna zachować zgodność na poziomie źródłowym we wszystkich zatwierdzonych zastosowaniach compose. (I7971c)Zmiany w interfejsie API ambients. Szczegółowe informacje znajdziesz w logach i dokumentacji
Ambient<T>
(I4c7ee, b/143769776).Dodano ui-livedata – nowy element z adapterem dla LiveData. Przykład użycia: wartość val za pomocą liveData.observeAsState() (Ie9e8c, b/150465596)
Adaptery Rx bez jawnej wartości początkowej są wycofywane. Użycie wartości null nie zawsze jest najlepszym domyślnym ustawieniem. Jeśli na przykład masz listę, lepiej zacząć od emptyList() lub innego odpowiedniego domyślnego ustawienia (I00025, b/161348384).
Dodano ui-rxjava2 – nowy element z adapterami dla RxJava2. Przykład użycia: wartość val za pomocą observable.subscribeAsState() (Ifab4b, b/153369097)
savedInstanceState()
można teraz używać z typami z wartością domyślną (I6847f, b/153532190)Nowe metody listSaver() i mapSaver(), które ułatwiają pisanie niestandardowych obiektów Saver (I8cf68, b/152331508)
Nowe funkcje: savedInstanceState() i rememberSavedInstanceState(). Są podobne do state() i remember(), ale mają wbudowane obsługiwane stany zapisane w przypadku instancji (If1987, b/152025209)
Poprawki błędów
- Nazwa
runOnIdleCompose
została zmieniona narunOnIdle
(I83607) - Dodano eksperymentalny interfejs API LayoutNode (I4f2e9)
- Interfejsy androidx.ui.foundation.TextFieldValue i androidx.ui.input.EditorValue zostały wycofane. Wycofane zostały też komponenty TextField, FilledTextField i CoreTextField, które używają tego typu. Zamiast tego użyj interfejsu androidx.ui.input.TextFieldValue (I4066d, b/155211005).
- Wycofano wycofany interfejs API DrawBackground na rzecz rozszerzenia interfejsu API drawBackground w modyfikatorze. Zmodyfikowano implementacje funkcji color, brush i paint drawBackground, aby zmniejszyć ścieżki kodu oraz usunąć wymóg tworzenia modyfikatora w ramach kompozycji. (I0343a)
- Zaktualizowano interfejsy API wyższego poziomu, które udostępniają canvas, tak aby zamiast tego udostępniały CanvasScope. Dzięki temu użytkownicy nie muszą już samodzielnie zarządzać obiektami w Paint. Użytkownicy, którzy nadal potrzebują dostępu do Canvas, mogą użyć metody rozszerzenia drawCanvas, która zapewnia wywołanie zwrotne do wydawania poleceń rysowania do Canvas. (I80afd)
- Zmiana interfejsu lambda z dodatkiem Constraints. Teraz zamiast 2 parametrów ma zakres odbiornika, który oprócz ograniczeń i kierunku układu zawiera właściwości minWidth, maxWidth, minHeight i maxHeight w pikselach (I91b9a, b/149979702)
- Dodano modyfikator symetrycznego wypełnienia. (I39840)
- Zaktualizowano wrapContentWidth i wrapContentHeight, aby oczekiwały wyrównania pionowego lub poziomego zamiast dowolnego wyrównania. Modyfikator grawitacji został zaktualizowany, aby umożliwiać wyrównanie w pionie lub poziomie. Wiersz, kolumna i stos zostały zaktualizowane, aby obsługiwać niestandardowe ciągłe wyrównania. (Ib0728)
- Nazwa modułu ui-text została zmieniona na ui-text-core (I57dec).
- Ulepszenie interfejsu DrawModifier API:
- Zmiana zakresu odbiornika dla metody draw() ContentDrawScope
- Usunięto wszystkie parametry w metodzie draw().
- DrawScope ma ten sam interfejs co poprzedni CanvasScope
- ContentDrawScope ma metodę drawContent() (Ibaced, b/152919067).
- Obiekt ColoredRect został wycofany. Zamiast tego użyj
Box(Modifier.preferredSize(width, height).drawBackground(color))
. (I499fa, b/152753731) - Zastąpiono operator Modifier plus funkcjami rozszerzenia fabrycznego (I225e4).
- Elementy RowScope i ColumnScope są teraz dostępne poza elementami Row i Column. (I3a641)
- Zmieniono nazwę LayoutFlexible na LayoutWeight. Parametr tight został przemianowany na fill. (If4738)
- WithConstraints ma parametr LayoutDirection (I6d6f7)
- Zmieniono nazwę tła na DrawBackground i ustawiono domyślne zapamiętywanie (Ia0bd3).
- Zastąpiono klasę ButtonStyle funkcjami o różnych właściwościach i usunięto przeciążenie tekstu (ciągu znaków). Informacje o użyciu znajdziesz w zaktualizowanych przykładach. (If63ab, b/146478620, b/146482131)
- Funkcje
runOnIdleCompose
irunOnUiThread
są teraz funkcjami globalnymi zamiast metodami w komponencie ComposeTestRule. (Icbe8f)
Darowizna zewnętrzna
- Usuwanie z poziomu portowania Compose Runtime niepotrzebnych interfejsów API, takich jak Looper i Handler (I6847d)
- Wycofaj parametr
Flow<T>.collectAsState()
bez wartości początkowej. Użyj funkcjiStateFlow<T>
lub podaj jawną wartość początkową. (I63f98, b/157674865)