Środowisko wykonawcze Compose

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.
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.

GrupaOpis
compose.animationtworzyć animacje w aplikacjach Jetpack Compose, aby wzbogacać wrażenia użytkowników.
compose.compilerPrzekształcaj funkcje @Composable i włącz optymalizacje za pomocą wtyczki kompilatora Kotlin.
compose.foundationPisać aplikacje Jetpack Compose za pomocą gotowych elementów składowych i rozwijać podstawy, aby tworzyć własne elementy systemu projektowania.
compose.materialTworzenie 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.material3Twó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.runtimePodstawowe 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.uiPodstawowe 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.5"
    implementation "androidx.compose.runtime:runtime-livedata:1.7.5"
    implementation "androidx.compose.runtime:runtime-rxjava2:1.7.5"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.runtime:runtime:1.7.5")
    implementation("androidx.compose.runtime:runtime-livedata:1.7.5")
    implementation("androidx.compose.runtime:runtime-rxjava2:1.7.5")
}

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ą.

Tworzenie nowego zgłoszenia

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 na androidx.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 typu Long do listy Snapshot i wycofano certyfikat id. Identyfikator snapshotu zmieniono z Int na Long, 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 jako Int lub innego typu na platformach, które nie mają natywnego typu Long. Platformy, które nie mają natywnej funkcji Long, np. JavaScript, powinny unikać wysokich częstotliwości klatek (ponad 1000 FPS), które powodują przepełnienie Int mniej więcej co 24 godziny. (I38ac3, b/374821679)

Poprawki błędów

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 tablicy SnapshotIdSet. (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.

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ą funkcji providesComputed zamiast provides.
  • 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 zamiast current, 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 funkcji mutableStateOf(). Początkowy stan elementów mutableStateListOf()mutableStateMapOf() jest pusty.
  • Dodano właściwości Snapshot.isInSnapshot i Snapshot.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 co onForgotten. (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ą funkcji providesComputed zamiast provides.
  • 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 zamiast current, 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 funkcji mutableStateOf(). Początkowy stan elementów mutableStateListOf()mutableStateMapOf() jest pusty.
  • Dodano właściwości Snapshot.isInSnapshot i Snapshot.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 ramach snapshotFlow. (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 na ScatterSet (db572)
  • Optymalizacja removeScope w ScopeMap (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 co onForgotten. (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 aplikacji SnapshotIdSet. (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 co onForgotten. (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 aplikacji DerivedState. (21862e)
  • Użyj wartości IntRef dla typu danych int SnapshotThreadLocal w funkcji DerivedState. (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 jako RandomAccess, 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 funkcja stateSaver 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 funkcji DerivedState, 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łanie remember. (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 obiektach State bez naliczania kar za automatyczne zaokrąglanie. Aby z nich korzystać, użyj nowych metod fabrycznych mutableIntState(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łania withFrameNanos 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ń fillSlotTable.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 funkcji DerivedState, 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 to AutoboxingStateCreation. 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ąc warning "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 funkcji DerivedState, 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łanie remember. (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 obiektach State bez naliczania kar za automatyczne zaokrąglanie. Aby z nich korzystać, użyj nowych metod fabrycznych mutableIntState(Int), mutableFloatStateOf(Float) itp. (I48e43)

Poprawki błędów

  • Wywołanie onEndChanges podczas usuwania kompozycji. Węzły fokusowe usunięte podczas Composition.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 funkcji Snapshot.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łania withFrameNanos 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ń fillSlotTable.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 danych CompositionLocals, implementując interfejs CompositionLocalConsumerModifierNode. (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 lub SnapshotStateMap 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ługi ComposableMethod 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-beta02androidx.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 do Composer.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-alpha05androidx.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 do java.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 SnapshotStateListSnapshotStateMap są teraz jawnie zaimplementowane odpowiednio toList()toMap(). 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ą funkcji snapshotFlow 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

Śledzenie kompozycji

Interfejsy API do składania zapytań

Poprawki w czasie działania

System zrzutów

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 rememberrememberCoroutineScope zmieniono na crossinline. 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 API movableContentOf 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

Wydajność w 1.2

Poprawki błędów w 1.2

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 interfejsu CompositionTracer. (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, ComposableTargetMarkerComposableOpenTarget, 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 lub ReusableComposeNode, muszą dodać adnotację CompoableTarget dla funkcji i wszystkich typów parametrów funkcji składanych lambda. Zalecamy jednak utworzenie adnotacji z oznaczeniem ComposableTargetMarker, a następnie używanie tej adnotacji z oznaczeniem zamiast bezpośrednio ComposableTarget. Kompozytowa adnotacja oznaczona symbolem ComposableTargetMarker jest równoważna atrybucie ComposbleTarget z pełną nazwą klasy atrybutu jako parametrem aplikatora. Przykład użycia funkcji ComposableTargetMarker znajdziesz w sekcji anroidx.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 pola CompositionData, 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

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 elementem Recomposer.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 Kotlina 1.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 AGP 7.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 katalogu src/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 z adb 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ów H, S lub P, 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 klasa androidx.compose.runtime.SlotTable miałaby opis Landroidx/compose/runtime/SlotTable;.

  • <METHOD_SIGNATURE> to sygnatura metody, która zawiera nazwę, typy parametrów i typ zwracany metody. Na przykład metoda fun isPlaced(): Boolean w klasie LayoutNode ma sygnaturę isPlaced()Z.

  • Te wzorce mogą zawierać symbole wieloznaczne (**, *?), 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 teraz State<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 funkcji ComposeNode. (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 parametru count. 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 funkcji withFrameNanos lub Recomposer.runRecomposeAndApplyChanges bez parametru MonotonicFrameClock spowoduje wyjątek IllegalStateException. (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 przypadku compositionLocalOf i staticCompositionLocalOf 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 parametry selectedonClick.
    • Zmieniono nazwę parametru alwaysShowLabels w elementach BottomNavigationItem na alwaysShowLabel.
    • Parametry bodyContent w kilku komponentach zostały przemianowane na content.
    • 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 do darkColors(). Ten kolor jest zwykle taki sam jak secondary 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 tabeli Slider na onValueChangeFinished i nadano jej atrybuty nullable.
    • Zmieniono nazwę parametru text w sekcji Snackbar na content, aby zachować spójność.
    • Do parametru DropdownMenuItem dodano parametr contentPadding, aby umożliwić dostosowywanie domyślnego wypełnienia, a parametr content został rozszerzeniem parametru RowScope.
    • Nazwa ModalDrawerLayout została zmieniona na ModalDrawer.
    • Nazwa BottomDrawerLayout została zmieniona na BottomDrawer.
    • (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)

  • snapshotFlowwithMutableSnapshot 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ępuje CompositionLifecycleObserver 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, funkcja onRemembered jest wywoływana w przypadku każdego odwołania, w którym funkcja onEnter jest wywoływana tylko raz. onEnter został wywołany wielokrotnie, jeśli obiekt był używany w podkompozycjach, takich jak WithConstraintsScaffold, co sprawia, że gwarancja pojedynczego wywołania onEnter jest niewiarygodna i została usunięta z RememberObserver.

    RememberObserver dodaje onAbandoned, które jest wywoływane, jeśli instancja RememberObserver zostanie zwrócona z połączenia zwrotnego przekazanego do remember, ale nie została zapamiętana w stanie kompozycji. W związku z tym nigdy nie zostanie wywołane onRemembered. 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 instancja RememberObserver po zalecanej powyżej rekomendacji dotyczącej jednego odwołania śledzi zasób zewnętrzny, zarówno onForgotten, jak i onAbandoned wskazują, że zasób nie jest już potrzebny. Jeśli obiekt śledzi pracę rozpoczętą lub zasoby przydzielone w funkcji onRemembered, można zignorować funkcję onAbandoned, ponieważ nie zostanie ona wywołana, gdy wywołana zostanie funkcja onRemembered. (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 na insertTopDown().

    Dodano nową metodę insertBottomUp().

    Aplikator wstawia węzły do drzewa, które modyfikuje, za pomocą funkcji insertTopDown() lub insertBottomUp(), w zależności od tego, która z nich działa lepiej.

    Niektóre drzewa, np. LayoutNodeView, 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ępuje Applier przez insertBottomUp(), aby tworzyć drzewo od dołu do góry, oraz insertTopDown(), 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 do content. (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 do runtime-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ż funkcji MonotonicFrameClock. 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 lub waitForIdle, 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 i withMutableSnapshot, 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ń funkcji remember { 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 wzoru by 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 elementu AndroidView. 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()savedInstanceStateOf() została zmieniona z referentialEqualityPolicy() na structuralEqualityPolicy().

    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()savedInstanceStateOf() używają mutableStateOf() w swoich implementacjach, więc zostały one zmienione, aby były zgodne z mutableStateOf().

    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życie state 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ęcia data, mogą mieć gorszą wydajność, ponieważ ich metody equals() 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ń funkcji mutableStateOf(), ambientOf()savedInstanceStateOf(). (Ic21a7)

  • Funkcje RowColumn 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ługi val klasy danych, a potem użyć właściwości state zamiast remember i przypisać wartość stanu do sklonowanych kopii oryginału za pomocą metody ułatwiającej copy(...) 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ści var oryginalnej klasy właściwościami var 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:

    1. Niektóre połączenia będą pomijane w miejscach, w których wcześniej nie były pomijane.
    2. 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 wersji vararg. 5. Adnotacja Pivotal została wycofana. Użyj key 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 StableMutableListStableMutableMap, 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.

    SnapshotStateListSnapshotStateMap są teraz publicznie dostępne, ale zostaną wycofane, gdy przywrócimy StableMutableListStableMutableMap. (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 { ... } lub by 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 lub setViewContent. Metoda Compose.disposeComposition została wycofana. Zamiast tego użyj metody dispose w obiekcie Composition 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 na true, 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 na runOnIdle (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 runOnIdleComposerunOnUiThread 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 funkcji StateFlow<T> lub podaj jawną wartość początkową. (I63f98, b/157674865)