Archiwum informacji o wersji komponentów architektury

15 stycznia 2019 r.

Menedżer pracy

Zwolniono menedżera WorkManager 1.0.0-beta02. Ta wersja zawiera poprawki błędów.

Poprawki błędów

  • Naprawiono przypadek skrajny, w którym na urządzeniach z Androidem 6.0 (poziom interfejsu API 23) okresowa praca mogła być wykonywana więcej niż raz w danym okresie. b/121998363
  • Usunięto błąd ConcurrentModificationException na urządzeniach z Androidem 5.1 (poziom interfejsu API 22) lub starszym. b/121345393
  • Naprawiliśmy błędne wykonywanie zadań, gdy ograniczenia nie były spełnione na urządzeniach z Androidem 5.1 (poziom interfejsu API 22) lub niższym. b/122578012
  • Zoptymalizowana obsługa zadań wykonywanych w celu przyspieszenia w niektórych przypadkach skrajnych. b/122358129
  • Dodaliśmy zmianę, która uwzględniała potencjalne warunki wyścigu w wielu wystąpieniach obiektu LiveData używanego przez WorkManager.
  • Przeniesiono do użycia zależności Room 1.1.1 zamiast 1.1.1-rc01. Te wersje są identyczne. b/122578011

19 grudnia 2018 r.

Menedżer pracy

Zwolniono menedżera WorkManager 1.0.0-beta01. Ta wersja nie wprowadza żadnych zmian w interfejsie API. Od tej pory aplikacja WorkManager powinna pozostać stabilna do czasu następnej wersji, chyba że wystąpi problem krytyczny. Ta wersja zawiera poprawki błędów.

Poprawki błędów

  • Elementy podrzędne, które zostały wcześniej anulowane, nie będą już uruchamiane. b/120811767
  • Prawidłowo zainicjowane klasy logowania (wyświetlane głównie podczas testów).

18 grudnia 2018 r.

Nawigacja 1.0.0-alpha09 została opublikowana. Ta wersja zawiera zmiany w interfejsie API, które naruszają zasady. Zapoznaj się z sekcją „Breaking changes”, która znajduje się poniżej.

Postanowiliśmy nie kontynuować opracowywania artefaktu android.arch.navigation:navigation-testing. Chociaż okazało się to pomocne w wewnętrznych testach funkcji NavController, zdecydowanie zalecamy korzystanie z alternatywnych strategii testowania, takich jak naśladowanie wystąpienia NavController, ponieważ pozwoli to sprawdzić, czy wykonywane są prawidłowe wywołania navigate(). To podejście zostało szczegółowo omówione w prezentacji dotyczącej pojedynczego działania na AndroidDevSummit 2018. Będziemy też pracować nad dodatkową dokumentacją dotyczącą testowania z nawigacją.

Nowe funkcje

  • Obiekty MenuItem z elementem menuCategory="secondary" nie będą już wstawać wstecznego stosu, gdy są używane z metodami NavigationUI. b/120104424
  • AppBarConfiguration umożliwia teraz ustawienie wystąpienia kreacji zastępczej OnNavigateUpListener, która będzie wywoływana, gdy navController.navigateUp() zwróci false. b/79993862 b/120690961

Niezbędne zmiany

  • Gdy używasz obiektu <argument> z elementem argType="reference", nawigacja nie analizuje już odwołania, a zamiast tego udostępnia sam nieprzetworzony identyfikator zasobu. b/111736515
  • Domyślnie onNavDestinationSelected() wraca do miejsca docelowego początkowego wykresu nawigacyjnego, dzięki czemu jest zgodna z metodami setup. Dodaj menuCategory="secondary" do tablicy MenuItem, aby nie powiększyć stosu. aosp/852869
  • Metody fromBundle() wygenerowanych klas Args przyjmują teraz niepustą wartość Bundle zamiast wartości null Bundle aosp/845616

Poprawki błędów

  • Argumenty są teraz prawidłowo analizowane z precyzyjnych linków jako prawidłowe argType, a nie zawsze jako ciągi znaków b/110273284
  • Teraz Nawigacja prawidłowo eksportuje swoje zasoby publiczne b/121059552
  • Usługa Safe Args jest teraz zgodna z wtyczką Androida do obsługi Gradle w wersji 3.4 Canary 4 lub nowszej b/119662045

12 grudnia 2018 r.

Menedżer pracy

Zwolniono menedżera WorkManager 1.0.0-alpha13. Ta wersja zawiera niewielką zmianę w interfejsie API, która będzie przydatna dla niektórych użytkowników aplikacji Kotlin.

Zmiany w interfejsie API

  • Użytkownik androidx.work.Result został przeniesiony do klasy wewnętrznej użytkownika ListenableWorker. Zapobiega to konfliktom refaktoryzacji z klasą Result najwyższego poziomu Kotlin. Jest to niezgodna zmiana w interfejsie API. b/120564418

Najnowsze zmiany w interfejsie API

  • Użytkownik androidx.work.Result został przeniesiony do klasy wewnętrznej użytkownika ListenableWorker.

6 grudnia 2018 r.

Podział

Strona 2.1.0-rc01 została zwolniona bez zmian z 2.1.0-beta01.

Nawigacja 1.0.0-alpha08 została opublikowana. Ta wersja zawiera zmiany w interfejsie API, które naruszają zasady. Zapoznaj się z sekcją „Breaking changes”, która znajduje się poniżej.

Nowe funkcje

  • Etykiety miejsc docelowych używane z metodami NavigationUI będą teraz automatycznie zastępować instancje {argName} w obiekcie android:label prawidłowym argumentem b/80267266.
  • Nawigacja zależy teraz od biblioteki pomocy 28.0.0 b/120293333

Niezbędne zmiany

  • Nazwa usługi OnNavigatedListener została zmieniona na OnDestinationChangedListener b/118670572
  • OnDestinationChangedListener przekazuje teraz także Bundle argumentów aosp/837142.
  • Atrybuty app:clearTask i app:launchDocument oraz powiązane z nimi metody zostały usunięte. Użyj operatora app:popUpTo z pierwiastkiem wykresu, aby usunąć wszystkie miejsca docelowe ze stosu wstecznego. b/119628354
  • ActivityNavigator.Extras używa teraz wzorca Builder i dodaje możliwość ustawiania dowolnych flag Intent.FLAG_ACTIVITY_ aosp/828140
  • Nazwa domeny NavController.onHandleDeepLink została zmieniona na handleDeepLink aosp/836063
  • Wiele klas i metod, które nie są przeznaczone do podklas, np. NavOptions, NavInflater, NavDeepLinkBuilder i AppBarConfiguration, zostało utworzonych final aosp/835681.
  • Wycofana metoda NavHostFragment.setGraph() została usunięta aosp/835684
  • Wycofana metoda NavigationUI.navigateUp(DrawerLayout, NavController) została usunięta. aosp/835684
  • Tworzenie fragmentów kodu zostało przeniesione do FragmentNavigator, co ułatwia przekazanie procesu tworzenia fragmentów na platformę FragmentFactory. b/119054429
  • Konstruktor NavGraphNavigator nie przyjmuje już typu Context aosp/835340
  • NavigatorProvider to teraz klasa, a nie interfejs. Element NavigatorProvider zwrócony przez getNavigatorProvider() nie zmienił się. aosp/830660
  • NavDestination.navigate() został(a) usunięty(a). Zadzwoń pod numer navigate() pod numer Navigator. aosp/830663
  • Znacząca refaktoryzacja parametru Navigator eliminuje potrzebę korzystania z elementu OnNavigatorNavigatedListener. Zamiast tego navigate zwraca przekierowywany NavDestination.
  • Instancje (Navigator) nie mogą już wysyłać zdarzeń typu pop do interfejsu NavController. Rozważ użycie OnBackPressedCallback do przechwycenia naciśnięć przycisku Wstecz i wywołania navController.popBackStack(). Aosp/833716

Poprawki błędów

  • popUpTo działa teraz konsekwentnie, gdy miejscem docelowym jest element <navigation> b/116831650
  • Naprawiliśmy kilka błędów, które powodowały występowanie błędu IllegalArgumentException podczas korzystania z zagnieżdżonych wykresów b/118713731 b/113611083 b/113346925 b/113305559
  • Atrybut dataPattern miejsc docelowych <activity> będzie teraz wypełniać argumenty z argumentów innych niż ciąg znaków przez wywołanie metody toString() b/120161365

Bezpieczne argumenty

  • Bezpieczne argumenty obsługują obiekty możliwe do serializacji, w tym wartości Enum. Typy wyliczeń mogą ustawić wartość domyślną za pomocą literału wyliczeniowego bez nazwy klasy (np. app:defaultValue="READ") b/111316353
  • Bezpieczne Args obsługują tablice wszystkich obsługiwanych typów b/111487504
  • Safe Args ignoruje teraz podfoldery katalogów zasobów b/117893516
  • Tam, gdzie to możliwe, Safe Args dodaje adnotacje @Override b/117145301

5 grudnia 2018 r.

Menedżer pracy

Zwolniono menedżera WorkManager 1.0.0-alpha12. Ta wersja zawiera zmiany w interfejsie API, które naruszają zasady. Zapoznaj się z sekcją Breaking API changes poniżej. Prawdopodobnie zostanie ona opublikowana jako pierwsza wersja beta. alpha12 zawiera też obszerne aktualizacje dokumentacji.

Zmiany w interfejsie API

  • Nowy artefakt: work-rxjava2, przedstawia: RxWorker. To jest ListenableWorker, który wymaga podania wartości Single<Payload>.
  • Obsługa usługi JobDispatcher w Firebase została wycofana z powodu zbliżającego się jej wycofania. Oznacza to, że podczas przechodzenia do wersji beta artefakt work-firebase nie będzie już aktualizowany. W przyszłości rozważymy dodanie takiego rozwiązania.
  • Łączono: Payload w: Result. Result jest teraz „zaklejoną klasą” z 3 konkretnymi implementacjami, które można uzyskać za pomocą Result.success() (lub Result.success(Data)), Result.failure() (albo Result.failure(Data)) i Result.retry(). Wyniki z Twojego źródła danych (ListenableFuture) dają teraz wynik Result zamiast Payload. Metody Worker nie mają metod pobierania ani ustawiania dla danych wyjściowych Data. Jest to niezbędna zmiana.
  • Dodano atrybuty Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) i Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) oraz warianty, aby lepiej obsługiwać identyfikatory URI treści powoli aktywujące się. b/119919774
  • Dodano WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration) wariant. Ta metoda wymaga interfejsu API 26.
  • Dodano metody rozszerzenia Kotlin: Operation.await() i ListenableFuture.await().
  • Nazwa elementu Operation.getException() została zmieniona na Operation.getThrowable(). Jest to niezbędna zmiana.
  • Klasa ContentUriTriggers i metody odwołujące się do niej nie są już dostępne publicznie. Jest to niezbędna zmiana.
  • Aby uprościć interfejs API, usunięto pozostałe metody varargs w funkcjach WorkManager, WorkContinuation i OneTimeWorkRequest. Aby rozwiązać problemy z kompilacją, możesz opakować istniejące zmienne Vararg za pomocą atrybutu Arrays.asList(...). Nadal uwzględniamy wersje z jednym argumentem w każdej metodzie. Jest to niezbędna zmiana.
  • Usunięto WorkContinuation.combine(OneTimeWorkRequest, *) warianty. Prezentował interfejs API niejasny, a dotychczasowe metody combine są bardziej zrozumiałe. Jest to niezbędna zmiana.

Poprawki błędów

  • Implementacje przed Marshmallow są teraz bardziej niezawodne, jeśli chodzi o reagowanie na śmierć procesu w przypadku już wykonywanego zadania.
  • Funkcja LiveData obserwowana przez observeForever jest śledzona przez WorkManager. To jest wsteczna poprawka z Biblioteki pokoi. b/74477406
  • Data.Builder.build() zgłasza teraz wyjątek, jeśli zserializowany obiekt przekracza swój maksymalny rozmiar. Wcześniej zdarzało się to tylko w wątku w tle, w którym nie można było prawidłowo go obsłużyć.
  • Dalsze odróżnianie zadań zatrzymane i anulowane. W okresie ListenableWorker.onStopped() getWorkInfoById() zwróci WorkInfo z CANCELLED State.
  • Traktuj null Result jako niepowodzenia w ListenableWorker. b/120362353
  • Poprawka spekulacyjna dla tabletów Shield obsługującego interfejs API 24, który czasem zwracał błąd IllegalArgumentException. b/119484416

Najnowsze zmiany w interfejsie API

  • Obsługa usługi JobDispatcher w Firebase została wycofana z powodu zbliżającego się jej wycofania. Oznacza to, że podczas przechodzenia do wersji beta artefakt work-firebase nie będzie już aktualizowany. W przyszłości rozważymy dodanie takiego rozwiązania.
  • Łączono: Payload w: Result. Result jest teraz „zaklejoną klasą” z 3 konkretnymi implementacjami, które można uzyskać za pomocą Result.success() (lub Result.success(Data)), Result.failure() (albo Result.failure(Data)) i Result.retry(). Wyniki z Twojego źródła danych (ListenableFuture) dają teraz wynik Result zamiast Payload. Metody Worker nie mają metod pobierania ani ustawiania dla danych wyjściowych Data.
  • Dodano metody rozszerzenia Kotlin: Operation.await() i ListenableFuture.await().
  • Nazwa elementu Operation.getException() została zmieniona na Operation.getThrowable().
  • Klasa ContentUriTriggers i metody odwołujące się do niej nie są już dostępne publicznie.
  • Aby uprościć interfejs API, usunięto pozostałe metody varargs w funkcjach WorkManager, WorkContinuation i OneTimeWorkRequest. Aby rozwiązać problemy z kompilacją, możesz opakować istniejące zmienne Vararg za pomocą atrybutu Arrays.asList(...). Nadal uwzględniamy wersje z jednym argumentem w każdej metodzie.
  • Usunięto WorkContinuation.combine(OneTimeWorkRequest, *) warianty. Prezentował interfejs API niejasny, a dotychczasowe metody combine są bardziej zrozumiałe.

4 grudnia 2018 r.

Room

Pokój 2.1.0-alpha03 został zwolniony z obsługą współprogramów i kilkoma poprawkami błędów.

Zmiany w interfejsie API

  • Funkcja FTS tokenizer w @Fts3/@Fts4 przyjmuje teraz ciąg znaków, a nie Enum. Dzięki temu sala może używać niestandardowych tokenizatorów. Wbudowane tokenizatory są nadal zdefiniowane w FtsOptions jako stałe w postaci ciągu znaków. b/119234881

Nowe funkcje

  • Kursy: metody DAO można teraz zawieszać funkcje. Aby umożliwić obsługę funkcji zawieszania w sali, udostępniliśmy nowy artefakt room-coroutines. b/69474692
  • Metody DAO z adnotacjami @Insert, @Delete lub @Update obsługują teraz zwracany typ ListenableFuture. b/119418331

Poprawki błędów

  • Naprawiono błąd, który powodował, że funkcja Room próbowała nieprawidłowo znaleźć konstruktor z kolumnami we właściwości ignoredColumns obiektu @Entity. b/119830714
  • Naprawiliśmy błąd, który powodował, że funkcja Room nie oznaczała parametrów metody DAO jako ostatecznej implementacji. b/118015483
  • Naprawiono błąd, który powodował awarię procesora sali podczas zgłaszania błędu w zapytaniu zawierającym symbole specjalne. b/119520136
  • Poprawiliśmy błąd, który powodował, że funkcja Room odrzucała inne implementacje Collection jako argumenty wyrażenia IN. b/119884035
  • Naprawiliśmy błąd, który powodował, że funkcja LiveData zwracana z pokoju gromadziła niepotrzebne śmieci, jeśli są obserwowane na zawsze. Nie emitowały już nowych danych. b/74477406
  • Zaktualizowano blokadę ekranu urządzenia RoomDatabase, aby ograniczyć rywalizację o blokadę. b/117900450

8 listopada 2018 r.

Menedżer pracy

Zwolniono menedżera WorkManager 1.0.0-alpha11. Ta wersja zawiera wiele zmian, które staną się stabilnym interfejsem API w wersji beta. W tej wersji wprowadzono niezbędne zmiany w interfejsie API. Zapoznaj się z sekcją Breaking API changes poniżej.

Zmiany w interfejsie API

  • work-runtime-ktx przedstawia nowe urządzenie CoroutineWorker.
  • Nazwa konta WorkStatus została zmieniona na WorkInfo. Wszystkie odpowiadające im warianty metody getStatus zostały zmienione na odpowiadające im warianty getWorkInfo. Jest to niezbędna zmiana.
  • ListenableWorker.onStopped() nie akceptuje już argumentu logicznego, który wskazuje, czy element WorkRequest został anulowany. WorkManager nie wprowadza już tego rozróżnienia. Jest to niezbędna zmiana.
  • Nazwa pakietu androidx.work.test została zmieniona na pakiet androidx.work.testing. Jest to niezbędna zmiana.
  • Metody ustawiające w Constraints nie są już częścią publicznego interfejsu API. Jest to niezbędna zmiana.
  • Metody WorkerParameters.getTriggeredContentUris() i WorkerParameters.getTriggeredContentAuthorities() zwróciły wcześniej tablice. Teraz te metody zwracają kolekcje. Jest to niezbędna zmiana.
  • Nazwa aplikacji ListenableWorker.onStartWork() została zmieniona na ListenableWorker.startWork(). Jest to niezbędna zmiana.
  • Konstruktor WorkStatus nie jest już częścią publicznego interfejsu API. Jest to niezbędna zmiana.
  • Nazwy Configuration.getMaxJobSchedulerID() i Configuration.getMinJobSchedulerID() zostały zmienione na Configuration.getMinJobSchedulerId() i Configuration.getMaxJobSchedulerId(). Jest to niezbędna zmiana.
  • Do publicznego interfejsu API dodaliśmy wiele adnotacji @NonNull, aby poprawić ergonomię interfejsu API.
  • Dodaj interfejs WorkManager.enqueueUniqueWork() API, aby umieszczać w kolejce unikalne elementy OneTimeWorkRequest bez konieczności tworzenia WorkContinuation.
  • Wszystkie warianty metod enqueue i cancel w WorkManager zwracają teraz nowy typ Operation. Jest to niezbędna zmiana.
  • Żadne warianty typu enqueue nie obsługują już zmiennych zmiennych typu WorkRequest. Jest to niezbędna zmiana. Zamiast tego użyj Kolekcji. Do zmiany istniejącego kodu możesz użyć Arrays.asList(). Zrobiliśmy to, aby ograniczyć liczbę powierzchni i metod API.
  • Próba initialize WorkManager więcej niż raz na proces spowoduje teraz IllegalStateException. Jest to niezbędna zmiana.

Poprawki błędów

  • Elementy WorkRequest.Builder w artefakcie work-runtime-ktx używają teraz komponentów ListenableWorker. Poprawki b/117666259
  • Upewnij się, że następne uruchomienie instancji PeriodicWork przypada w przyszłości. Poprawki b/118204399
  • Usuń potencjalne wejście/wyjście dysku, jeśli używasz WorkManagera podczas uruchamiania aplikacji. Poprawki b/117796731
  • Popraw warunki wyścigu w: WorkConstraintsTracker. Naprawia błąd android-workmanager/issues/56.

Najnowsze zmiany w interfejsie API

  • Nazwa konta WorkStatus została zmieniona na WorkInfo. Wszystkie odpowiadające im warianty metody getStatus zostały zmienione na odpowiadające im warianty getWorkInfo.
  • ListenableWorker.onStopped() nie akceptuje już argumentu logicznego, który wskazuje, czy element WorkRequest został anulowany. WorkManager nie wprowadza już tego rozróżnienia.
  • Nazwa pakietu androidx.work.test została zmieniona na pakiet androidx.work.testing.
  • Metody ustawiające w Constraints nie są już częścią publicznego interfejsu API.
  • Metody WorkerParameters.getTriggeredContentUris() i WorkerParameters.getTriggeredContentAuthorities() zwróciły wcześniej tablice. Teraz te metody zwracają kolekcje.
  • Nazwa aplikacji ListenableWorker.onStartWork() została zmieniona na ListenableWorker.startWork().
  • Konstruktor WorkStatus nie jest już częścią publicznego interfejsu API.
  • Nazwy Configuration.getMaxJobSchedulerID() i Configuration.getMinJobSchedulerID() zostały zmienione na Configuration.getMinJobSchedulerId() i Configuration.getMaxJobSchedulerId().
  • Wszystkie warianty metod enqueue i cancel w WorkManager zwracają teraz nowy typ Operation.
  • Żadne warianty typu enqueue nie obsługują już zmiennych zmiennych typu WorkRequest.
  • Próba initialize WorkManager więcej niż raz na proces spowoduje teraz IllegalStateException.

1 listopada 2018 r.

Podział

Strona 2.1.0-beta01 została zwolniona bez zmian z 2.1.0-alpha01.

30 października 2018 r.

Room

Sala 2.1.0-alpha02 została zwolniona z kilkoma poprawkami błędów i nową funkcją.

Nowe funkcje

  • Dodano obsługę odwołania do @DatabaseView w @Relation. b/117680932

Poprawki błędów

  • Naprawiliśmy błąd polegający na tym, że pokój przeprowadzał operacje wejścia-wyjścia dysku w wątku głównym w przypadku subskrybowania i usuwania typu zwrotu Rx. b/117201279
  • Naprawiono błąd, który powodował, że funkcja Room nie znalazła odpowiedniego konwertera odpowiedniego typu dla pola w klasie encji Kotlin. b/111404868
  • Naprawiono błąd, który powodował, że funkcja Room generowała nieprawidłowy kod dla implementacji interfejsu DAO z domyślną metodą Kotlin bez argumentów. b/117527454
  • Zaktualizowaliśmy parser gramatyki SQLite w pokoju, naprawiając problem z wydajnością, który powodowałby długie czasy kompilacji. b/117401230

29 października 2018 r.

Nawigacja 1.0.0-alpha07 została opublikowana z poprawkami błędów i zmianami w interfejsie API.

Nowe funkcje

  • Nowa klasa AppBarConfiguration pozwala określić, które miejsca docelowe są uznawane za miejsca docelowe najwyższego poziomu. Więcej informacji znajdziesz w zaktualizowanej dokumentacji. b/117333663
  • Teraz możesz przekazywać argumenty do początkowego miejsca docelowego wykresu b/110300470
  • Precyzyjne linki obsługują teraz schematy niestandardowe z kropkami, łącznikami i znakami plusa. b/112806402

Niezbędne zmiany

  • Moduł navigation-testing-ktx został złożony do jednostki navigation-testing artifact i nie zostanie opublikowany.
  • Artefakt navigation-testing zależy teraz od biblioteki standardowej Kotlin. Interfejs API został zmieniony, by był bardziej zgodny z konwencjami Kotlin, ale nadal możesz go używać do testów napisanych w Javie.
  • Wykresy nawigacyjne zarejestrowanych w pliku manifestu metadanych nie są już obsługiwane. b/118355937
  • Akcji nie można już dołączać do miejsc docelowych <activity>. aosp/785539

Poprawki błędów

  • Precyzyjne linki prawidłowo analizują teraz parametry zapytania. b/110057514
  • Miejsca docelowe aktywności prawidłowo stosują teraz wszystkie animacje wejścia i wyjścia. b/117145284
  • Usunięto awarię, która występowała po zmianie konfiguracji podczas korzystania z niestandardowych nawigatorów. b/110763345

Bezpieczne argumenty

  • Bezpieczne argumenty są teraz uzależnione od wtyczki Androida do obsługi Gradle w wersji 3.2.1. b/113167627
  • Można teraz generować wskazówki dojazdu dla klas wewnętrznych. b/117407555
  • Rozwiązaliśmy problem z generowaniem wskazówek dojazdu do wykresu <include>. b/116542123

12 października 2018 r.

Podział

Udostępniliśmy 2.1.0-alpha01 stronicowanie z 2 głównymi dodatkami – usuwaniem stron i bibliotekami rozszerzeń KTX dla każdego artefaktu. Wprowadziliśmy też kilka innych zmian w interfejsie API i poprawki błędów.

Zmiany w interfejsie API

  • Dodano PagedList.Config.Builder.setMaxSize() w celu ograniczenia liczby wczytywanych elementów w pamięci.
  • Dodano: androidx.paging.Config() jako alternatywę Kotlin dla: PagedList.Config.Builder
  • Dodano: androidx.paging.PagedList() jako alternatywę Kotlin dla: PagedList.Builder
  • Dodano: DataSourceFactory.toLiveData() jako alternatywę Kotlin dla: LivePagedListBuilder
  • Dodano DataSourceFactory.toObservable() i toFlowable() jako alternatywy dla Kotlin dla: RxPagedListBuilder
  • Dodano element AsyncPagedListDiffer.addPagedListListener() do nasłuchiwania w przypadku zamiany PagedList na inną. b/111698609
  • Dodano PagedListAdapter.onCurrentListChanged() wariant, który przekazuje starą i nową listę, oraz wycofano poprzedni wariant.
  • Dodano PagedListAdapter/AsyncPagedListDiffer.submitList() wariantów, które przyjmują dodatkowe wywołanie zwrotne, jeśli wyświetlana jest lista stron po różnicy. Pozwala to na synchronizację zamiany PagedList z innymi aktualizacjami interfejsu użytkownika. b/73781068
  • Dodano PagedList.getLoadedCount(), aby poinformować Cię, ile elementów jest w pamięci. Pamiętaj, że jeśli symbole zastępcze są wyłączone, wartość zwracana jest zawsze równa .size().

Poprawki błędów

  • Poprawiono warunek wyścigu w przypadku różnicowania w przypadku ponownego użycia list b/111591017
  • PagedList.loadAround() zwraca teraz błąd IndexOutOfBoundsException, gdy indeks jest nieprawidłowy. Wcześniej mógł ulec awarii z niejasnym innym wyjątkiem.
  • Rozwiązano problem, w którym bardzo mały rozmiar początkowy wczytywany w połączeniu z niezmienionymi danymi uniemożliwiał dalsze wczytywanie pliku b/113122599

11 października 2018 r.

Menedżer pracy

Udostępniamy platformę WorkManager 1.0.0-alpha10 z obsługą pracy asynchronicznej kontrolowanej przez dewelopera. W tej wersji wprowadzono niezbędne zmiany w interfejsie API. Zapoznaj się z sekcją Breaking API changes poniżej.

Przewidujemy, że WorkManager wchodzi w ostatnie fazy okresu alfa. Spodziewamy się, że interfejs API będzie stabilny w wersji beta, dlatego poświęć trochę czasu na przesłanie opinii w naszym narzędziu do śledzenia problemów.

Zmiany w interfejsie API

  • Usunięto wszystkie metody i klasy, które wcześniej deprecated, a zwłaszcza domyślny konstruktor Worker. Jest to niezgodna zmiana w interfejsie API.
  • Nazwa NonBlockingWorker została zmieniona na ListenableWorker, która jest teraz odkrytą klasą publiczną i jest gotowa do użycia.
    • Metoda ListenableWorker zapewnia dostęp do 1 metody abstrakcyjnej ListenableFuture<Payload> onStartWork(), która jest wywoływana w wątku głównym. To Ty musisz rozpocząć i przetwarzać asynchroniczną pracę. Gdy skończysz, musisz odpowiednio zaktualizować ListenableFuture. Referencyjne implementacje ListenableFuture są dostępne w pakiecie Futures w języku alpha02 (patrz sekcja WorkManager poniżej).
    • Komponent Worker rozszerza zakres ListenableWorker i nadal działa jak wcześniej, z użyciem metody abstrakcyjnej Result doWork().
    • Niektóre metody i członków zostały losowo zmienione z Worker na ListenableWorker.
    • Wkrótce udostępnimy referencyjne implementacje ListenableWorker, które używają współprogramów Kotlin (po opublikowaniu stabilnych wersji) i RxJava2.
  • Interfejs WorkerFactory i konkretna implementacja DefaultWorkerFactory zostały scalone w klasę abstrakcyjną o nazwie WorkerFactory. Implementacja zapewnia, że domyślne zachowanie oparte na odczuciach jest wywoływane w ramach ostatniej próby w przypadku wszystkich instancji WorkerFactory utworzonych przez użytkowników. Jest to niezbędna zmiana.
  • Usunięto metody WorkManager.synchronous() i WorkContinuation.synchronous() oraz wszystkie powiązane metody. Dodano ListenableFuture<Void> jako zwracany typ wielu metod w interfejsie API. Jest to niezgodna zmiana w interfejsie API.
    • Możesz teraz synchronicznie pobierać i obserwować zdjęcia, korzystając z komponentów ListenableFuture. Na przykład WorkManager.enqueue() zwracał kiedyś wynik void, a teraz zwraca wartość ListenableFuture<Void>. Możesz wywołać ListenableFuture.addListener(Runnable, Executor) lub ListenableFuture.get(), aby uruchomić kod po zakończeniu operacji.
    • Pamiętaj, że te ListenableFuture nie informują o tym, czy operacja się udała czy nie. tylko o jego zakończeniu. Aby uzyskać te informacje, nadal musisz powiązać metody WorkManager w łańcuch.
    • Ignorujemy wywołania cancel() dotyczące tych obiektów, ponieważ są one niejasne i trudne w uzasadnieniu (czy anulujesz operację czy wynikową pracę?). Zgodnie z umową Future.
    • Aby zachować spójność z synchronicznymi metodami getStatus*, udostępniliśmy warianty ListenableFuture i zmieniliśmy nazwy istniejących wariantów, które zwracały wartości LiveData, tak aby zawierały „LiveData” w nazwie (np. getStatusesByIdLiveData(UUID)). Jest to niezbędna zmiana w interfejsie API.

Poprawki błędów

  • Naprawiono znany problem z wersji alfa09 dotyczący zduplikowanych plików androidx-annotations.pro. Możesz usunąć obejście z poprzednich informacji o wersji, usuwając exclude 'META-INF/proguard/androidx-annotations.pro' z pliku Gradle.
  • Dodano konfiguracje Prokoparda, by zachować nowy konstruktor Worker. b/116296569
  • Popraw potencjalną wartość NullPointerException w warunkach wyścigu, dla których zadanie było REPLACE. b/116253486 i b/116677275
  • WorkContinuation.combine() akceptuje teraz co najmniej 1 komponent WorkContinuation zamiast 2 lub więcej elementów. b/117266752

Najnowsze zmiany w interfejsie API

  • Usunięto wszystkie metody i klasy, które wcześniej deprecated, a zwłaszcza domyślny konstruktor Worker.
  • Interfejs WorkerFactory i konkretna implementacja DefaultWorkerFactory zostały scalone w klasę abstrakcyjną o nazwie WorkerFactory.
  • Usunięto WorkManager.synchronous() i WorkContinuation.synchronous().
  • Metody WorkManager.getStatus*() zwracają teraz wartości ListenableFuture. WorkManager.getStatus*LiveData(): powrót LiveData.

Transakcje terminowe

Opublikowano transakcje terminowe 1.0.0-alpha02.

Zmiany w interfejsie API

  • Deweloperzy mogą teraz używać ResolvableFuture i AbstractResolvableFuture jako lekkich, konkretnych implementacji ListenableFuture.

8 października 2018 r.

Room

Sala 2.1.0-alpha01 została zwolniona.

Nowe funkcje

  • FTS: sala obsługuje teraz elementy z tabelą mapowania FTS3 lub FTS4. Do klas z adnotacjami @Entity można teraz dodać adnotacje @Fts3 lub @Fts4, aby zadeklarować klasę z mapowaniem pełnotekstowej tabeli wyszukiwania. Opcje FTS umożliwiające dalsze dostosowanie są dostępne w metodach adnotacji. b/62356416
  • Widoki danych: w sali można teraz deklarować klasę jako zapisane zapytanie (nazywane też widokiem danych) z użyciem adnotacji @DatabaseView. b/67033276
  • Wartość automatyczna: pokój obsługuje teraz deklarowanie klas z adnotacjami AutoValue jako encji i POJO. Adnotacje dotyczące sal @PrimaryKey, @ColumnInfo, @Embedded i @Relation można teraz zadeklarować w metodach abstrakcyjnych klasy z adnotacjami automatycznymi. Pamiętaj, że do tych adnotacji musi towarzyszyć atrybut @CopyAnnotations, aby można było je poprawnie odczytać. b/62408420
  • Dodatkowa obsługa typów zwrotów Rx: metody DAO z adnotacjami @Insert, @Delete lub @Update obsługują teraz typy zwrotów Rx Completable, Single<T> i Maybe<T>. b/63317956
  • Typy stałe z @Relation: pola z adnotacjami, które wcześniej @Relation musiały być konfigurowane, ale teraz mogą być parametrami konstruktora.
  • enableMultiInstanceInvalidation: to nowy interfejs API w RoomDatabase.Builder, który umożliwia unieważnianie wielu wystąpień RoomDatabase przy użyciu tego samego pliku bazy danych. Ten mechanizm unieważniania wielu instancji działa również w wielu procesach. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: to nowy interfejs API w RoomDatabase.Builder, który automatycznie odtwarza bazę danych w przypadku przejścia na niższą wersję. b/110416954
  • ignoredColumns: to nowy interfejs API w adnotacji @Entity, który może służyć do wyświetlania ignorowanych pól według nazwy. Ta opcja jest przydatna do ignorowania pól dziedziczonych w encji. b/63522075

Zmiany w interfejsie API lub zachowaniu

  • mCallback i mDatabase w sali RoomDatabase to teraz @Deprecated i zostaną usunięte z następnej głównej wersji pokoju. b/76109329

Poprawki błędów

  • Rozwiązaliśmy 2 problemy, które powodowały, że podczas inicjowania sala nie mogła prawidłowo przywrócić danych z uszkodzonej bazy danych lub nieprawidłowej migracji. b/111504749 i b/111519144
  • Usługa Room będzie teraz prawidłowo używać głównego konstruktora Kotlin w klasach danych, dzięki czemu nie trzeba będzie zadeklarować pól jako vars. b/105769985

1 października 2018 r.

Sala 2.0.0 została zwolniona bez zmian z 2.0.0-rc01. Strona 2.0.0 została opublikowana z jedną poprawką.

Podział

Poprawki błędów

  • Usunięto awarię, która mogła wystąpić w przypadku bardzo szybkiego przewijania przy użyciu elementu PositionalDataSource i obiektów zastępczych b/114635383.

21 września 2018 r.

Cykl życia 2.0.0 został opublikowany z jedną poprawką z błędu z 2.0.0-rc01 w ViewModel.

Cykl życia

Poprawki błędów

  • Naprawiono regułę ViewModel Prokopard, która nieprawidłowo usuwała konstruktory b/112230489

20 września 2018 r.

Nawigacja 1.0.0-alpha06 została opublikowana z poprawkami błędów i zmianami w interfejsie API.

Nowe funkcje

Zmiany w interfejsie API

  • Zmiana wymagająca: metoda Nawigatora navigate() przyjmuje teraz parametr Navigator.Extras.
  • Metoda getGraph() kontrolera NavController to teraz NonNull b/112243286

Poprawki błędów

  • NavigationUI.setupWithNavController() nie ujawnia już wyświetleń, jeśli jest używany z widokami z poszczególnych miejsc docelowych b/111961977
  • Nawigator onSaveState() jest teraz wywoływany tylko raz b/112627079

Bezpieczne argumenty

  • Klasy wskazówek dojazdu do miejsca docelowego nawigacji rozszerzają teraz klasę Directions swoich elementów nadrzędnych (o ile taka istnieje w klasie b/79871405).
  • Klasy kierunków i args mają teraz przydatną implementację toString() b/111843389

19 września 2018 r.

Menedżer pracy

Udostępniliśmy system WorkManager 1.0.0-alpha09 z poprawkami błędów, aktualizacjami infrastruktury i zmianami w interfejsie API.

Znany problem

Jeśli napotkasz ten problem: „Znaleziono więcej niż 1 plik ze ścieżką niezależną od systemu operacyjnego „META-INF/proguard/androidx-annotations.pro”, umieść poniższy kod w pliku Gradle jako tymczasowe obejście do czasu, gdy rozwiążemy ten problem w wersji alfa10:

Odlotowy

android {
    packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
}

Kotlin

android {
    packagingOptions {
        exclude("META-INF/proguard/androidx-annotations.pro")
    }
}

Poprawki błędów

  • Dodaliśmy kolejną poprawkę niezbędną do wystąpienia błędu „100 zadań”. b/115560696
  • Dodaliśmy kilka poprawek błędów związanych z ograniczeniami klucza obcego spowodowanymi warunkami wyścigu. b/114705286
  • Przekazano wywołania ConstraintTrackingWorker.onStopped(boolean) do bazowej instancji Worker. b/114125093
  • Wymuszaj prawidłowe minimalne opóźnienie ponowienia dla Firebase JobDispatcher. b/113304626
  • Ulepszona funkcja podziału na wątki gwarantuje wewnętrzny charakter biblioteki.
  • Napraw potencjalny problem z wewnętrznym usuwaniem duplikatów LiveData.

Zmiany w interfejsie API

  • Możesz teraz tworzyć własne instancje Worker w czasie działania, określając WorkerFactory w komponencie WorkManager.Configuration. Fabryka zastępcza to DefaultWorkerFactory. Pasuje do wcześniejszych wersji WorkManagera.
    • Domyślne konstruktory Worker i NonBlockingWorker są teraz oznaczone jako wycofane. Użyj nowego konstruktora (Worker(Context, WorkerParameters)) i wywołaj super(Context, WorkerParameters). W przyszłych wersjach WorkManagera zostanie usunięty domyślny konstruktor.
  • Zaczęliśmy korzystać z nowego artefaktu ListenableFuture wewnętrznie (bez zależności Gujawa). W kolejnych wersjach wprowadzimy do interfejsu API ListenableFutures. Ta zmiana umożliwi późniejsze odkrycie elementu NonBlockingWorker.
  • Dodano możliwość uruchamiania pracy na czas w aplikacji TestDriver za pomocą TestDriver.setInitialDelayMet(UUID) i TestDriver.setPeriodDelayMet(UUID). b/113360060

Niezbędne zmiany

  • Domyślne konstruktory Worker i NonBlockingWorker zostały wycofane. Jak najszybciej przejdź na nowy konstruktor. W kolejnych wersjach zostanie usunięty domyślny konstruktor.

27 sierpnia 2018 r.

Menedżer pracy

Udostępniamy platformę WorkManager 1.0.0-alpha08 z poprawkami błędów.

Poprawki błędów

  • Wyraźnie oznaczono komponenty WorkManagera jako nieświadome i nie są one uruchamiane bezpośrednio podczas rozruchu bezpośredniego. W przyszłości udostępnimy wersję WorkManagera z bezpośrednim rozruchem. b/112665532
  • Rozwiązaliśmy problem, który powodował, że ponawiana praca nie była uruchamiana. b/112604021
  • Ustalona praca okresowa nie powtarzała się wielokrotnie (związane z tym problemem). b/112859683
  • Uznawane zasady wycofywania, gdy proces aplikacji jest już uruchomiony.
  • Poprawiliśmy komunikaty o wyjątkach w pliku Data, aby wskazać, że limit wynosi 10 KB.
  • Zmniejszono maksymalną wartość z Configuration.setMaxSchedulerLimit(int) do 50, aby uwzględnić czas oczekiwania na zakończenie przetwarzania JobScheduler. b/112817355

16 sierpnia 2018 r.

Menedżer pracy

Udostępniliśmy system WorkManager 1.0.0-alpha07 z poprawkami błędów i drobnymi zmianami w interfejsie API.

Poprawki błędów

  • Naprawiono potencjalne zapytanie SQL z ujemnymi limitami, które mogło zwracać nieograniczoną liczbę wyników.
  • Zadania, których wykonanie zostało ukończone, są teraz prawidłowo anulowane wszystkie oczekujące kopie tej pracy w innych algorytmach szeregowania. Doprowadziło to do przekroczenia limitu JobScheduler zadań. b/111569265
  • Naprawiono ConcurrentModificationException w ConstraintTracker. b/112272753
  • Adnotacje typu zwracanego kodu Data.getBooleanArray(String) i Data.getIntArray(String) zostały zmienione na @Nullable zamiast @NonNull. b/112275229

Zmiany w interfejsie API

  • Worker przedłuża teraz nowe zajęcia: NonBlockingWorker. Nie ma to wpływu na bieżące wykorzystanie. W przyszłości NonBlockingWorker stanie się w pełni obsługiwanym elementem w przypadku niestandardowych rozwiązań do obsługi wątków.
  • Adnotacje typu zwracanego kodu Data.getBooleanArray(String) i Data.getIntArray(String) zostały zmienione na @Nullable zamiast @NonNull. b/112275229
  • Rozszerzenia Kotlin: wycofano interfejs Map.toWorkData() i dodano workDataOf(vararg Pair<String, Any?>) najwyższego poziomu, aby zapewnić większą spójność z istniejącymi interfejsami API.

10 sierpnia 2018 r.

Nawigacja 1.0.0-alpha05 została opublikowana z poprawkami błędów.

Poprawki błędów

  • Popraw błąd, który powoduje nieprawidłowe działanie cofania. b/111907708
  • Popraw błąd w equals() klasach wygenerowanych argumentów. b/111450897
  • Napraw błąd kompilacji w Safe Args. b/109409713
  • Jak naprawić konwersję z identyfikatorów zasobów na nazwy Java b/111602491
  • Naprawianie komunikatów o błędach dotyczących wartości null we wtyczce Safe Args.
  • Dodaj brakujące adnotacje wartości null.

6 sierpnia 2018 r.

Wersje AndroidaX cyklu życia, pokoju i stron są dostępne w wersji 2.0.0-rc01. Żadne artefakty nie zostały zmienione od 2.0.0-beta01.

1 sierpnia 2018 r.

Menedżer pracy

Udostępniamy platformę WorkManager 1.0.0-alpha06 z poprawkami błędów.

Poprawki błędów

  • Zapobiegaj blokadzie bazy danych podczas planowania pracy. b/111801342
  • Popraw błąd, przez który PeriodicWork nie uruchamia się zgodnie z harmonogramem w trybie uśpienia. b/111469837
  • Napraw warunki wyścigu, gdy śledzisz ograniczenia, które powodują awarię WorkManager. googlecodelabs/android-workmanager/issues/56
  • Jeśli używasz WorkRequest.Builder#build(), utwórz niepowtarzalne elementy WorkRequest. b/111408337
  • Włącz korzystanie z właściwości RescheduleReceiver tylko wtedy, gdy potrzebne są komponenty WorkRequest. b/111765853

24 lipca 2018 r.

Menedżer pracy

Udostępniliśmy system WorkManager 1.0.0-alpha05 z ważnymi poprawkami błędów i zmianami w logowaniu.

Zmiany w interfejsie API

  • Adnotacje WorkManager.getInstance() mają teraz postać @NonNull zamiast @Nullable. Jeśli natomiast singleton nie zostanie poprawnie zainicjowany w przypadku inicjowania ręcznego, metoda spowoduje zgłoszenie błędu IllegalStateException. Jest to przełomowa zmiana w interfejsie API.
  • Dodaliśmy nowy interfejs API Configuration.Builder.setMinimumLoggingLevel(int), który może kontrolować szczegółowość w usłudze WorkManager. Domyślnie WorkManager rejestruje dane Log.INFO i nowsze.
  • Zmieniono podpis interfejsu Data.getString(), więc nie przyjmuje on już wartości domyślnej (domyślnie null). Jest to niezgodna zmiana w interfejsie API.
  • Niektóre metody potrzebne tylko do użytku wewnętrznego oznaczono jako @hide. Obejmuje to konstruktor Constraints, Data.toByteArray() i Data.fromByteArray(byte[]). Jest to niezgodna zmiana w interfejsie API.

Poprawki błędów

  • WorkManager nie wykonuje już zadań w znanych przypadkach automatycznej kopii zapasowej. Mogło to spowodować awarię. b/110564377
  • Poprawiono podwójne harmonogramy PeriodicWorkRequest s przy korzystaniu z metody JobScheduler. b/110798652
  • Naprawiono problem z prawidłowym działaniem funkcji PeriodicWorkRequest po uśpieniu urządzenia. b/111469837
  • Rozwiązaliśmy problem z początkowymi opóźnieniami podczas korzystania z Firebase JobDispatcher. b/111141023
  • Naprawiliśmy kilka potencjalnych problemów z warunkami i czasem wyścigu.
  • Prawidłowo zwolniono BroadcastReceiver elementy, które nie były już potrzebne.
  • Zoptymalizowano przekładanie wydajności na ponowne uruchomienie aplikacji po wymuszeniu zamknięcia.
  • Zezwolono na wywołanie funkcji TestScheduler.setAllConstraintsMet(UUID) przed umieszczeniem danego elementu WorkRequest w kolejce lub po nim. b/111238024

Niezbędne zmiany

  • Adnotacje WorkManager.getInstance() mają teraz postać @NonNull zamiast @Nullable.
  • Zmieniono podpis elementu Data.getString(), więc nie przyjmuje już wartości domyślnej (domyślnie null).
  • Niektóre metody potrzebne tylko do użytku wewnętrznego oznaczono jako @hide. Obejmuje to konstruktor Constraints, Data.toByteArray() i Data.fromByteArray(byte[]).

19 lipca 2018 r.

Nawigacja 1.0.0-alpha04 i powiązana z nią wtyczka Safe Args Gradle zawiera szereg zmian w interfejsie API oraz zmian w działaniu i poprawkach.

Zmiany w interfejsie API lub zachowaniu

  • NavHostFragment zawsze ustawia bieżący fragment jako główny fragment nawigacyjny, upewniając się, że menedżery fragmentów podrzędnych są umieszczane przed wypełnieniem zewnętrznego kontrolera NavController b/111345778.

Bezpieczne argumenty

  • Zmiana powodująca niezgodność: app:type została zmieniona na app:argType, aby uniknąć konfliktów z innymi bibliotekami, takimi jak ConstraintLayout 2.0.0-alpha1 b/111110548
  • Komunikaty o błędach z bezpiecznych argumentów można teraz kliknąć b/111534438
  • Klasy Args potwierdzają teraz, że atrybuty NonNull w rzeczywistości nie mają wartości null b/111451769
  • Do klas wygenerowanych na podstawie polecenia NavDirections i Args zostały dodane dodatkowe adnotacje NonNull b/111455455 b/111455456.

Poprawki błędów

  • Naprawiono problem z systemowym przyciskiem Wstecz po zastosowaniu precyzyjnego linku do miejsca docelowego fragmentu b/111515685

12 lipca 2018 r.

Nawigacja 1.0.0-alpha03 i powiązana z nią wtyczka Safe Args Gradle zawiera szereg zmian w interfejsie API oraz zmian w działaniu i poprawkach.

Zmiany w interfejsie API lub zachowaniu

  • Dodano metodę NavigationUI.setupWithNavController do paska narzędzi Toolbar b/109868820
  • Wprowadzono metodę NavigationUI.setupWithNavController do klasy CollapsingToolbarUkład: b/110887183
  • popBackStack() zwraca teraz wartość „false”, gdy stos wsteczny jest pusty lub gdy podany identyfikator miejsca docelowego nie znajduje się w stosie wstecznym b/110893637
  • FragmentNavigator ignoruje teraz operacje nawigacji po zapisaniu stanu FragmentManager, unikając wyjątków „Nie można wykonać tego działania po onSaveInstanceState” b/110987825

Bezpieczne argumenty

  • Zmiana zmieniająca: znaki inne niż alfanumeryczne w nazwach działań i argumentów zostaną zastąpione wielkością liter wielbłąda w odpowiednich nazwach metod NavDirections.
    • Np. DemoController.index zmieni się na setDemoControllerIndex b/79995048
    • Np. action_show_settings zmieni się na actionShowSettings b/79642240
  • Niezgodna zmiana: domyślnie argumenty nie mają wartości zero. Aby zezwolić na wartości null w ciągu znaków i argumentach typu parcelable, dodaj app:nullable="true" b/79642307
  • Możesz teraz używać app:type="long" z wartością defaultValues w postaci „123L” b/79563966
  • Argumenty typu Parcelable są teraz obsługiwane przy użyciu w pełni kwalifikowanej nazwy klasy w funkcji app:type. Jedyną obsługiwaną wartością domyślną jest "@null" b/79563966
  • Klasy ARG implementują teraz equals() i hashCode() b/79642246
  • Wtyczkę Safe Args możesz teraz stosować w projektach biblioteki b/80036553
  • Wtyczka Safe Args można teraz stosować do projektów cech b/110011752

Poprawki błędów

  • Rozwiązaliśmy problemy z nawigacją w ramach metod cyklu życia fragmentu b/109916080
  • Rozwiązanie problemów z wielokrotnym nawigacją po zagnieżdżonych wykresach b/110178671
  • Rozwiązanie problemów z usługą setPopUpTo z pierwszym miejscem docelowym na wykresie b/109909461
  • Rozwiązanie problemu polegającego na tym, że wszystkie wartości app:defaultValue były przekazywane jako ciągi znaków b/110710788
  • aapt2 w pakiecie z wtyczką Androida do obsługi Gradle 3.2 Beta 01 dodaje teraz reguły Keep dla każdego atrybutu android:name w plikach XML nawigacji b/79874119
  • Usunięto wyciek pamięci podczas zastępowania domyślnego obiektu FragmentNavigator b/110900142

2 lipca 2018 r.

Wersje AndroidaX cyklu życia, pokoju i stron są dostępne w wersji 2.0.0-beta01.

Cykl życia

Poprawki błędów

  • Naprawiliśmy regułę Promocji wykorzystującą usługę LifecycleObserver, która zachowywała tylko implementacje bez interfejsów podrzędnych b/71389427
  • Naprawiono reguły Prompard w ViewModel, które pozwalały na zaciemnianie i zmniejszanie wartości

Room

Zmiany w interfejsie API lub zachowaniu

  • Dodano RoomDatabase.Builder.setQueryExecutor(), aby umożliwić dostosowanie miejsca wykonywania zapytań
  • Dodano obsługę RxJava2 Observable
  • Wygenerowane implementacje DAO i bazy danych są już ostateczne

Poprawki błędów

  • Podaj nazwę klasy/pola w błędzie „Nie można znaleźć metody pobierania dla pola” b/73334503
  • Poprawiono wsteczną zgodność RoomOpenHelper ze starszymi wersjami pokoju b/110197391

Podział

Poprawki błędów

  • Naprawiono znikanie treści w niektórych przypadkach przedrostka (obiekty zastępcze wyłączone, PositionalDataSource) b/80149146
  • (Już dostępna w wersji 1.0.1) Naprawiono awarie, które powodowały, że PagedListAdapter i AsyncPagedListDiffer nie sygnalizowały zdarzeń przeniesienia. b/110711937

26 czerwca 2018 r.

Podział

Strona 1.0.1 została opublikowana z jedną poprawką w wersji runtime. Zdecydowanie zalecamy korzystanie z 1.0.1 ze względu na stabilność. Udostępniono również stronę rxJava2 1.0.1, która jest identyczna jak 1.0.0-rc1.

Poprawki błędów

  • Naprawiono awarie, które powodowały, że PagedListAdapter i AsyncPagedListDiffer nie sygnalizowały zdarzeń przeniesienia. b/110711937

Menedżer pracy

Zwolniono menedżera WorkManager 1.0.0-alpha04.

Poprawki błędów

  • Harmonogramy PeriodicWorkRequest są teraz prawidłowo przekładane w przypadku korzystania z implementacji opartej na AlarmManager.

  • Naprawiono potencjalny błąd ANR, który występował podczas przekładania wszystkich instancji roboczych po wymuszeniu zatrzymania lub ponownym uruchomieniu. b/110507716

  • Dodano adnotacje wartości null do różnych interfejsów API WorkManager. b/110344065

  • Loguj niewykryte wyjątki, które występują podczas wykonywania instancji roboczej. b/109900862

  • Dozwolone niszczycielskie migracje bazy danych w przypadku przywrócenia starszej wersji WorkManagera. b/74633270

  • Naprawiono awarię migracji podczas tworzenia zduplikowanych tagów niejawnych. Jest to bardzo rzadki problem, który występuje tylko wtedy, gdy samodzielnie używasz tego samego formatu tagu niejawnego.

19 czerwca 2018 r.

Room

Sala 1.1.1 została zwolniona. Ta wersja jest identyczna z pokojem 1.1.1-rc1.

Menedżer pracy

Zwolniono menedżera WorkManager 1.0.0-alpha03.

Poprawki błędów

  • Naprawiono warunek wyścigu w implementacji opartej na AlarmManager. b/80346526.

  • Naprawiono zduplikowane zadania podczas korzystania z JobScheduler po ponownym uruchomieniu urządzenia.

  • Zadania z aktywatorami identyfikatora URI treści są teraz zachowywane również po ponownym uruchomieniu. b/80234744

  • Aktualizacje dokumentacji: b/109827628, b/109758949, b/80230748

  • Naprawiono awarię podczas ponownego dodawania do kolejki elementu WorkRequest. b/109572353.

  • Naprawiliśmy ostrzeżenia kompilatora Kotlin podczas korzystania z zależności work-runtime-ktx.

  • WorkManager używa teraz Room w wersji 1.1.1-rc1.

Zmiany w interfejsie API

  • Dodano synchroniczną wersję systemu WorkContinuation.getStatuses() getStatusesSync().

  • Worker potrafi odróżnić anulowanie inicjowane przez użytkownika od tymczasowego zatrzymania na żądanie systemu operacyjnego. Worker.isStopped() zwraca wartość true, jeśli przesłano żądanie postoju. Worker.isCancelled() zwraca wartość true, gdy zadanie zostało wyraźnie anulowane. b/79632247

  • Dodano obsługę JobParameters#getNetwork() w interfejsie API 28. Ta reklama jest widoczna w aplikacji Worker.getNetwork().

  • Dodano dyrektywę Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit), aby umożliwić Ci wymuszenie wysyłania liczby zadań do wysyłania do JobScheduler lub AlarmManager. Dzięki temu WorkManager nie zajmie wszystkich dostępnych JobScheduler miejsc.

  • Dodano funkcję Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId), która pomaga zdefiniować zakres identyfikatorów zadań JobScheduler, których WorkManager może używać. b/79996760

  • Worker.getRunAttemptCount() zwraca bieżącą liczbę uruchomień dla danego parametru Worker. B/79716516

  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) umożliwia umieszczenie w kolejce unikalnych kluczy PeriodicWorkRequest. b/79600647

  • WorkManager.cancelAllWork() anuluje wszystkie Worker. Biblioteki zależne od WorkManager mogą wysyłać zapytania, gdy ta metoda została wywołana jako ostatnia, używając WorkManager.getLastCancelAllTimeMillis() w celu dodatkowego czyszczenia stanu wewnętrznego.

  • Dodano polecenie WorkManager.pruneWork(), aby usunąć ukończone zadania z wewnętrznej bazy danych. b/79950952, b/109710758

Zmiany w działaniu

  • Dodaliśmy niejawny tag do wszystkich elementów WorkRequest, który jest w pełni kwalifikowaną nazwą klasy na potrzeby klasy Worker. Ta opcja umożliwia usuwanie komponentów WorkRequest bez elementów tag lub gdy id jest niedostępny. b/109572351

Niezbędne zmiany

  • Nazwa elementu Worker.WorkerResult została zmieniona na Worker.Result.

  • Worker.onStopped ma teraz dodatkowy parametr isCancelled ustawiony na true, gdy zdarzenie Worker zostało bezpośrednio anulowane.

7 czerwca 2018 r.

Nawigacja 1.0.0-alpha02 została opublikowana.

Zmiany w działaniu

  • FragmentNavigator używa teraz konta setReorderingAllowed(true). b/109826220

  • Teraz nawigacja URLDekoduje argumenty URL-e analizowane z adresów URL precyzyjnych linków. b/79982454

Poprawki błędów

  • Naprawiono błąd IllegalStateException podczas wywoływania przechodzenia z metod cyklu życia fragmentu. b/79632233

  • Aby rozwiązać problem migotania podczas używania animacji, nawigacja korzysta teraz z Biblioteki pomocy w wersji 27.1.1. b/80160903

  • Poprawiono błąd IllegalArgumentException w przypadku użycia parametru defaultNavHost="true" jako fragmentu podrzędnego. b/79656847

  • Naprawiono błąd StackOverflowError podczas korzystania z NavDeepLinkBuilder. b/109653065

  • Naprawiono błąd IllegalArgumentException podczas przechodzenia z powrotem do zagnieżdżonego wykresu. b/80453447

  • Naprawiono problem z nakładającymi się fragmentami przy korzystaniu z funkcji launchSingleTop. b/79407969

  • Nawigacja tworzy teraz prawidłowy syntetyczny stos wsteczny dla zagnieżdżonych wykresów. b/79734195

  • Podczas korzystania z zagnieżdżonego wykresu jako elementu MenuItem interfejs NavigationUI wyróżnia teraz właściwy element. b/109675998

Zmiany w interfejsie API

  • Atrybut clearTask działań i powiązany interfejs API w NavOptions zostały wycofane. b/80338878

  • Atrybut launchDocument działań i powiązany interfejs API w NavOptions zostały wycofane. b/109806636

24 maja 2018 r.

Zwolniono menedżera WorkManager 1.0.0-alpha02.

Menedżer pracy

Poprawki błędów

  • Poprawiono błąd NullPointerException w dniu State.isFinished(). B/79550068

  • Rozwiązaliśmy problem, który powodował, że harmonogram spotkań Worker został przełożony na Application.onCreate(). B/79660657

  • Rozwiązaliśmy problem, który powodował, że można było zaplanować więcej zadań niż jest to dozwolone w systemie operacyjnym. b/79497378

  • Przenieśliśmy czyszczenie blokad uśpienia powiązanych z urządzeniami Worker do wątku w tle.

  • Implementacja AlarmManager jest teraz prawidłowo czyszczona po zakończeniu wszystkich oczekujących zadań.

  • Usunięto problem z zapytaniami SQL czyszczenia, które wpływały na języki inne niż angielski. b/80065360

  • Dodano obsługę komponentów float w usłudze Data. b/79443878

  • Data.Builder.putAll() zwraca teraz wystąpienie Builder. b/79699162

  • Więcej plików javadoc i poprawek w dokumentacji. b/79691663

Zmiany w interfejsie API

  • Worker może zareagować na zatrzymanie. Worker.isStopped() może zostać użyty do sprawdzenia, czy Worker został zatrzymany. Worker.onStopped() może służyć do wykonywania prostych operacji czyszczenia.

  • Interfejs Worker.getTags() API zwraca Set tagów powiązanych z Worker.

  • Dodano przeciążenia (javax.time.Duration) w przypadku interfejsów API, które wymagają kombinacji czasu trwania i TimeUnit. Strzeżony przez @RequiresApi(26).

  • Rozszerzenia (WorkManager) zostały przeniesione z pakietu androidx.work.ktx do pakietu androidx.work. Stare rozszerzenia zostały wycofane i zostaną usunięte w przyszłej wersji.

  • Interfejs Configuration.withExecutor() został wycofany. Użyj w zamian zasady Configuration.setExecutor().

16 maja 2018 r.

Udostępniliśmy strony RxJava2 1.0.0-rc1 i pokój 1.1.1-rc1 dla stron docelowych. Jeśli używasz migracji, zdecydowanie zalecamy użycie pokoju 1.1.1-rc1 zamiast 1.1.0.

Room

Naprawiono błąd, który powodował, że sala nie obsługiwała prawidłowo inicjowania po migracji b/79362399

Podział

Strona rxjava2 zostanie przeniesiona do wersji kandydującej do wersji bez zmian w stosunku do początkowej wersji alfa.

8 maja 2018 r.

Strona 1.0, nawigacja i WorkManager (alfa), sala 1.1, AndroidX

Opublikowano tempo 1.0.0 i Sala 1.1.0 oraz wersje alfa 2 nowych komponentów architektury – nawigacji i WorkManager.

Podział na strony i pokój nie zmieniły się od czasu wprowadzenia najnowszych wersji kandydujących.

Nowa biblioteka: nawigacja

Nawigacja stanowi platformę do tworzenia nawigacji w aplikacji. Pierwsza wersja to 1.0.0-alpha01.

Nowa biblioteka: WorkManager

Usługa WorkManager upraszcza planowanie i wykonywanie gwarantowanych zadań w tle z uwzględnieniem ograniczeń. Ta pierwsza wersja to 1.0.0-alpha01.

AndroidX

Przenosimy komponenty architektury, takie jak zaktualizowane nazwy pakietów i nazwy artefaktów, oraz zależności od innych bibliotek AndroidX, które staną się częścią Androida. Są one publikowane w wersji 2.0.0-alpha1 i można ich używać w połączeniu z innymi bibliotekami AndroidaX.

Rozszerzenia Kotlin

ViewModel, ReactiveStreams i Sqlite (dawniej komponent „Database” rozwiązania Room) mają biblioteki rozszerzeń Kotlin dodane w wersji alfa AndroidaX. Dodatkowo Nawigacja i WorkManager zawierają moduły -ktx. Każdy z nich znajdziesz w sekcji Dodawanie komponentów.

2 maja 2018 r.

  • Kandydat do udostępnienia sali 1.1.0
  • Sala 1.1.0-rc1 została zwolniona.

Poprawki błędów

  • Pokój jest teraz zgodny z systemem Kotlin 1.2.40. B/78328708

19 kwietnia 2018 r.

Kandydat do udostępnienia strony

Tempo 1.0.0-rc1 i pokój 1.1.0-beta3 zostały zwolnione.

Podział

Nie mamy więcej znanych problemów ani nowych funkcji przeznaczonych dla etapu 1.0.0. Uaktualnij projekty, aby używały 1.0.0-rc1. Pomóż nam je przetestować, żebyśmy mogli wysłać solidny 1.0.0.

Brak zmian w tej wersji. Jest taka sama jak w 1.0.0-beta1.

Room

Poprawki błędów

  • Poprawianie błędu kompilacji, gdy POJO w Kotlin odwołuje się do encji relacji zdefiniowanej w Javie b/78199923

5 kwietnia 2018 r.

Udostępniono pokój 1.1.0-beta2, strony 1.0.0-beta1 i stronowanie RxJava 1.0.0-alpha1.

Przez krótki czas będzie ona dostępna w wersji beta, zanim zostanie udostępniona w wersji kandydującej do opublikowania. Nie planujemy dalszych zmian w interfejsie API w przypadku Paging 1.0, a jeśli chodzi o wszelkie zmiany w interfejsie API, jest bardzo wysoki.

Obsługa strony w języku alfa (RxJava2) na potrzeby obsługi stron docelowych została opublikowana jako osobny opcjonalny moduł (android.arch.paging:rxjava2:1.0.0-alpha1) i tymczasowo będzie miała osobną wersję do momentu ustabilizowania się stanu.

Ta nowa biblioteka stanowi alternatywę dla języka LivePagedListBuilder w języku RxJava2, która umożliwia tworzenie komponentów Observable i Flowable, przyjmując Scheduler s zamiast Executor:

Kotlin

val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50)
        .setFetchScheduler(myNetworkScheduler)
        .buildObservable()

Java

Observable<PagedList<Item>> pagedItems =
        RxPagedListBuilder(myDataSource, /* page size */ 50)
                .setFetchScheduler(myNetworkScheduler)
                .buildObservable();

Podział

Nowe funkcje

  • Element RxPagedListBuilder został dodany za pomocą nowego artefaktu android.arch.paging:rxjava2.

Zmiany w interfejsie API

  • Zmiany w interfejsie API mające na celu wyjaśnienie roli wykonawców w kreatorach:

    • Zmieniono nazwę z setBackgroundThreadExecutor() na setFetchExecutor() (w PagedList.Builder i LivePagedListBuilder)

    • Zmieniono nazwę setMainThreadExecutor() na setNotifyExecutor() (w PagedList.Builder).

  • Zmieniono ustawienie PagedList.mCallbacks użytkownika jako prywatnego.

Poprawki błędów

  • LivePagedListBuilder aktywuje początkowe obciążenie PagedList we wskazanym wykonawcy, a nie na puli wątków operacji wejścia-wyjścia w komponentach Arch Komponenty.

  • Naprawiono nieprawidłowe zachowanie w wewnętrznych kodach DataSource (używane do implementacji interfejsu DataSource.map oraz ładowania funkcji PositionalDataSource z wyłączeniem zastępczym) b/77237534.

Room

Poprawki błędów

  • Naprawiliśmy krytyczny błąd w implementacjach Single i Maybe sali, w którym dochodziło do ponownego wykorzystania zapytania z wyprzedzeniem, co powodowało problemy w przypadku dodania więcej niż 1 obserwatora do zwracanego zdarzenia Single lub Maybe. b/76031240

  • RoomDatabase.clearAllTables nie będzie VACUUM bazy danych, jeśli zostanie ona wywołana w ramach transakcji. b/77235565

21 marca 2018 r.

Anulowano rezerwację sal 1.1.0-beta1, stron 1.0.0-alpha7 i cykli życia 1.1.1.

Room

Zmiany w interfejsie API

Poprawki błędów

  • Metoda RoomDatabase.clearAllTables próbuje teraz zwrócić przestrzeń dyskową z powrotem do systemu operacyjnego, ustawiając punkt kontroli WAL i VACUUMustawiając bazę danych.

  • @RawQuery akceptuje teraz dowolne Pojo dla właściwości observedEntities, o ile Pojo odwołuje się do co najmniej 1 encji za pomocą pól Embedded lub elementów Relation. b/74041772

  • Strona dla sali: implementacja DataSource w pokoju prawidłowo obsługuje zależności z wieloma tabelami (np. relacje i złączenia). Wcześniej te działania nie aktywowały nowych wyników lub mogły się nie skompilować. b/74128314

Cykle życia

Jedna niewielka zmiana: element android.arch.core.util.Function został przeniesiony z arch:runtime do arch:common. Dzięki temu można z niego korzystać bez uzależniania środowiska wykonawczego, np. w paging:common poniżej.

lifecycle:common jest zależność od lifecycle:runtime, więc ta zmiana nie ma bezpośredniego wpływu na lifecycle:runtime, a jedynie moduły bezpośrednio bazujące na lifecycle:common, tak jak ma to miejsce na stronie.

Podział

Tempo 1.0.0-alpha7 jest dostępne razem z cyklami życia 1.1.1. Strona alfa 7 zależy od przeniesienia klasy Function opisanej powyżej, więc musisz zaktualizować zależność lifecycle:runtime do android.arch.lifecycle:runtime:1.1.1.

Strona alpha7 ma być ostatnią wersją przed premierami wersji beta.

Zmiany w interfejsie API

  • Obiekty DataSource.LoadParams mają teraz publiczny konstruktor, a obiekty DataSource.LoadCallback są teraz abstrakcyjne. Umożliwia to pakowanie funkcji DataSource lub bezpośrednie testowanie DataSource z przykładowym wywołaniem zwrotnym. b/72600421
  • twórcy map dla DataSource i DataSource.Factory,
    • map(Function<IN,OUT>) umożliwia przekształcanie, zawijanie i dekorowanie wyników ładowanych przez DataSource.
    • mapByPage(<List<IN>,List<OUT>>) umożliwia te same funkcje w przetwarzaniu wsadowym (np. jeśli elementy wczytane z SQL muszą dodatkowo wysyłać zapytania do oddzielnej bazy danych, można to zrobić w ramach wsadu).
  • Dodano metodę PagedList#getDataSource() jako zapewniającą wygodę: b/72611341
  • Wszystkie wycofane klasy zostały usunięte z interfejsu API, w tym pozostałości pakietu recyclerview.extensions i LivePagedListProvider.
  • Język DataSource.Factory został zmieniony z interfejsu na klasę abstrakcyjną, aby umożliwić działanie mapy.

Poprawki błędów

  • Zmieniono konstruktorów na ostateczne. b/70848565
  • Implementacja pokoju DataSource jest teraz naprawiona, aby obsługiwać zapytania z wieloma tabelami – ta poprawka występuje w salach od wersji 1.1.0-beta1 (patrz wyżej).
  • Naprawiono błąd, który powodował, że funkcja BoundaryCallback.onItemAtEndLoaded nie była wywoływana w przypadku funkcji PositionalDataSource, gdy włączone są symbole zastępcze, a łączny rozmiar jest dokładną wielokrotnością rozmiaru strony.

2 marca 2018 r.

Sala 1.1.0-alpha3 została zwolniona. To ostatnia planowana wersja alfa sali 1.1.0.

Zmiany w interfejsie API

  • Metody addObserver i removeObserver obiektu InvalidationTracker są teraz synchroniczne i należy je wywoływać w wątku bez interfejsu użytkownika. Zapobiega to wyświetlaniu niektórych warunków wyścigowych podczas obserwacji tabel.

  • Dostępna jest nowa metoda clearAllTables() w klasie RoomDatabase, która umożliwia skrócenie zawartości tabeli. b/63807999

  • SupportSQLiteQuery ma teraz metodę getArgCount(), która zwraca liczbę parametrów zapytania. b/67038952

Poprawki błędów

  • Zapytanie @RawQuery jest teraz prawidłowo obsługiwane w przypadku zapytań stronicowania. b/72600425

  • Nazwy sal Dao mają teraz prawidłowe nazwy, dzięki czemu można uniknąć konfliktów nazw, jeśli co najmniej 2 interfejsy Dao są klasami wewnętrznymi w tym samym pakiecie i mają tę samą nazwę. b/73536380

  • Ogólne typy pól w elementach Pojo są prawidłowo analizowane jako należące do klasy rozszerzenia. b/73534868

  • Parametry zapytania w interfejsach Dao dziedziczone z artefaktów zależności są teraz prawidłowo analizowane. b/68118746

  • Zapytania generowane dla zapytań @Relation teraz prawidłowo zmieniają znaczenie nazw pól. b/70925483

27 lutego 2018 r.

Strona 1.0.0-alpha6 została opublikowana razem z Biblioteką pomocy w wersji 27.1.0. ListAdapter i kilka powiązanych z nimi klas zostały przeniesione bezpośrednio z biblioteki stron docelowych do Recyclerview. Wprowadziliśmy też kilka zmian, aby ułatwić korzystanie z funkcji niektórych klas. Ta wersja alfa podziału na strony może być ostatnią z istotnymi zmianami powodującymi niezgodność z zasadami interfejsu API.

Zmiany w interfejsie API

  • Klasy przeniesione do recyclerview-v7:
    • ListAdapter
  • Zajęcia zostały zmienione i przeniesione do recyclerview-v7:
    • ListAdapterHelper -> AsyncListDiffer
    • ListAdapterConfig -> AsyncDifferConfig
    • DiffCallback -> DiffUtil.ItemCallback
  • Nazwy klas w środowisku wykonawczym stronicowania:
    • PagedListAdapterHelper -> AsyncPagedListDiffer

Przeniesione klasy były przydatne razem z widokiem RecyclerView niezależnie od biblioteki stronicowania. Oznacza to, że można ich używać bez potrzeby w zależności od wersji alfa strony, ale aplikacje korzystające ze strony również muszą jednocześnie uaktualnić wersję alfa 6 i Bibliotekę pomocy 27.1.0.

** Przewodnik po migracji dla strony alfa 6: **

  • Zaktualizuj zależności stronicowania i widoku recyclerview na android.arch.paging:runtime:1.0.0-alpha6 i com.android.support:recyclerview-v7:27.1.0
    • Należy to zrobić jednocześnie, ponieważ element ListAdapter został przeniesiony z sekcji Paging do RecyclerView
  • Zaktualizuj odwołania do ListAdapterHelper do AsyncListDiffer
    • Usunięto getItem(index)/getItemCount() na rzecz wzorca wywoływania getCurrentList().getItem(index) i getCurrentList().size(), które są bardziej jednoznaczne.
  • Zaktualizuj odwołania do ListAdapterConfig do AsyncDifferConfig
  • Zaktualizuj odwołania do DiffCallback do DiffUtil.IttemCallback
  • Zaktualizuj odwołania do PagedListAdapterHelper do AsyncPagedListDiffer
  • Aktualizacja odwołań do setList() do submitList()
    • została zmieniona w celu wyjaśnienia asynchronicznego charakteru różnic list

Poprawki błędów

  • Naprawiono przekazywanie nieprawidłowej pozycji początkowej do początkowego wczytania, gdy wyłączone są obiekty zastępcze. b/73513780

15 lutego 2018 r.

Sala 1.1.0-alpha2 została zwolniona.

Nowe funkcje

  • Sala obsługuje teraz otwieranie bazy danych w trybie zapisywania z wyprzedzeniem. W tym trybie zapisy nie będą już blokować zapytań odczytu. Mimo że zużywa więcej pamięci (ze względu na wiele połączeń), ten tryb jest zwykle szybszy. Domyślnie funkcja w sali używa funkcji WAL, jeśli urządzenie ma API 16 lub więcej pamięci i nie ma mało pamięci. Możesz kontrolować to zachowanie za pomocą metody setJournalMode() w RoomDatabase.Builder. B/67757002

  • Pomoc dotycząca Guawy: pokój obsługuje teraz zwracanie wartości Guava Optional<T> lub ListenableFuture<T> w DAO zapytaniach. Aby użyć ListenableFuture<T>, musisz zaimportować guava artefakt z pokoju (android.arch.persistence.room:guava:1.1.0-alpha2).

  • Sale mogą teraz zwracać wyniki java.util.Optional<T> z poziomu DAO zapytań.

  • Metody interfejsu z implementacjami domyślnymi są teraz obsługiwane w metodach @Transaction w klasach DAO. Dotyczy to zarówno Java 8, jak i Kotlin. b/72416735

Poprawki błędów

  • Konstruktory z atrybutem @Relation nie będą powodować błędu kompilacji, jeśli można użyć innego konstruktora. b/72884434

  • Nazwy tabel ze zmianą znaczenia za pomocą funkcji ' w metodach @Query mają teraz odpowiednie znaczenie na potrzeby śledzenia unieważnień. b/72366965

  • Usługa Room korzysta teraz z adnotacji Kotlin @Metadata do odczytu struktury klas podczas przetwarzania adnotacji. Oznacza to, że nawet jeśli element pojo jest dziedziczony z zależności, nazwy jego parametrów konstruktora mogą zostać prawidłowo odczytane. b/67181813

  • Problem ze znalezieniem ścieżek migracji do starszej wersji został rozwiązany. b/72153525

  • Niedomyślne typy kolumn są teraz prawidłowo obsługiwane podczas migracji z istniejącej bazy danych do pokoju. b/71953987

  • Sala prawidłowo obsługuje teraz zachowywanie pól boolean? w klasach Kotlin. b/72786402

22 stycznia 2018 r.

Zwolniono cykle życia 1.1.0, salę 1.1.0-alpha1 i tempo 1.0.0-alpha5.

Cykl życia 1.1.0

Zmiany w pakiecie

Dostępne są teraz nowe, znacznie mniejsze zależności:

  • android.arch.lifecycle:livedata:1.1.0
  • android.arch.lifecycle:viewmodel:1.1.0

Zmiany w interfejsie API

  • Wycofane LifecycleActivity i LifecycleFragment zostały usunięte. Użyj instrukcji FragmentActivity, AppCompatActivity lub pomocy Fragment.
  • Adnotacje (@NonNull) zostały dodane do sekcji ViewModelProviders i ViewModelStores
  • Konstruktor ViewModelProviders został wycofany – użyj bezpośrednio jego metod statycznych
  • Interfejs ViewModelProviders.DefaultFactory został wycofany – użyj komponentu ViewModelProvider.AndroidViewModelFactory
  • Dodano statyczną metodę ViewModelProvider.AndroidViewModelFactory.getInstance(Application), aby pobierać statyczną metodę Factory odpowiednią do tworzenia instancji ViewModel i AndroidViewModel.

Pokój 1.1.0-alfa1

Nowe funkcje

  • RawQuery: ten nowy interfejs API zezwala metodom @Dao na otrzymywanie SQL jako parametru zapytania b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: ten nowy interfejs API w usłudze RoomDatabase.Builder daje bardziej szczegółową kontrolę nad tym, w którym początkowym okresie migracje zawierające niszczycielskie wersje schematu są dozwolone (w porównaniu z faktyczną migrację zastępcząToDestructiveMigrate) b/64989640
  • Sala obsługuje teraz tylko nowsze interfejsy API stron (w wersji alfa-4 lub nowszej), a wycofane interfejsy LivePagedListProvider nie są już obsługiwane. Aby korzystać z nowej wersji alfa pokoju, musisz użyć podziału na strony alpha-4 lub wyższego poziomu i przejść z LivePagedListProvider na LivePagedListBuilder (w miarę możliwości).

Poprawki błędów

  • Ulepszona obsługa typów Kotlin Kapt. b/69164099
  • Kolejność pól nie unieważnia już schematu. b/64290754

Strona 1.0.0–alfa5

Poprawki błędów

  • Naprawianie wczytywania strony, gdy obiekty zastępcze są wyłączone b/70573345
  • Dodatkowe logowanie na potrzeby śledzenia błędu b/70360195 związanego z zasadą IllegalArgumentException (oraz spekulacyjna poprawka po stronie pokoju)
  • Poprawki przykładowego kodu w języku Javadoc: b/70411933, b/71467637

11 grudnia 2017 r.

Strona alpha4-1 została zwolniona. To jest poprawka błędów strony alfa 4.

Poprawki błędów

  • Nie sprawdzaj parametrów wywołania zwrotnego pod kątem nieprawidłowych źródeł danych. b/70353706, b/70360195

7 grudnia 2017 r.

Udostępniono stronę alpha4 z poważnymi zmianami i dodatkami. Kierowanie obejmuje głównie sieci, sieci i bazę danych.

Zmiany w interfejsie API

  • DataSource to teraz asynchroniczny interfejs API, który ułatwia stronicowanie bezpośrednio z sieci:

    • Jeden punkt wejścia dla początkowego rozmiaru i danych
    • Umożliwia ponawianie próby połączenia z siecią przez wstrzymanie wywołania zwrotnego i wysłanie w późniejszym czasie.
    • Wywołania zwrotne Threadsafe umożliwiają asynchroniczne ładowanie przy tworzeniu pojedynczego wspieranego przez sieć PagedList w wątku interfejsu użytkownika.
    • Bardziej przejrzyste zachowanie błędów dotyczących parametrów wstępnego wczytywania
  • Nazwa TiledDataSource została zmieniona na PositionalDataSource, aby odzwierciedlić indeksowanie oparte na pozycji oraz fakt, że nie jest kafelkowy, gdy symbole zastępcze są wyłączone.

  • Dodano PageKeyedDataSource, aby umożliwić obsługę następnych/poprzednich tokenów umieszczonych podczas wczytywania stron sieciowych. KeyedDataSource zmienił nazwę na ItemKeyedDataSource, aby podkreślić różnicę.

  • LivePagedListBuilder i DataSource.Factory zastępują LivePagedListProvider. Kreator daje te same możliwości, ale pozwala większe dostosowywanie i prostsze ustawienia domyślne. Fabryka pozwala kodowi generowania DataSource zachować niezależność od LiveData.

  • Dodano PagedList.BoundaryCallback na potrzeby bazy danych i sieci.

  • Konstruktor PagedList.Builder przyjmuje parametry DataSource + PagedList.Config, które są teraz bardziej podobne do LivePagedListBuilder, i pozwala na operator diamentowy w języku Java lub na wywnioskowane typy w Kotlin.

  • Dodano użytkownika PagedList.getConfig(), a PagedList.Config ma teraz właściwości użytkowników publicznych.

  • KeyedDataSource.loadBefore() nie oczekuje już odwrócenia wyników.

  • Element PagedListAdapter.onCurrentListChanged() został dodany, aby nasłuchiwać aktualizacji, które są wyświetlane na liście PagedList.

Poprawki błędów

  • Poprawiono wyjątek IndexOutOfBoundsException w PagedListAdapter(Helper) b/67883658

1.0.0 – 6 listopada 2017 r.

Wszystkie główne komponenty (oprócz stronicowania) mają teraz stan 1.0.0. Jest to taka sama wersja jak w rc1, z wyjątkiem jednej zmiany w bibliotece reactivestreams.

Poprawki błędów

Proponowana wersja – 18 października 2017 r.

Wszystkie główne artefakty (oprócz stronicowania) mają teraz stan 1.0.0-rc1.

Nie mamy żadnych znanych problemów ani nowych funkcji, które planujemy wprowadzić w wersji 1.0.0. Uaktualnij projekty, aby używały 1.0.0-rc1. Pomóż nam przetestować to rozwiązanie, żebyśmy mogli wysłać solidny 1.0.0.

Zmiana w działaniu

  • W tej wersji usługa Lifecycle.Event#ON_STOP jest teraz wysyłana po wywołaniu funkcji onSaveInstanceState (wcześniej była oznaczona jako CREATED bez wysyłania ON_STOP). Więcej informacji na ten temat znajdziesz w dokumentacji cyklu życia.

Poprawki błędów

  • Pokój:

    • Pokój zależy teraz od najnowszego artefaktu Xerial, który rozwiązuje problemy z OutOfMemory podczas kompilacji. b/62473121
    • Do metod Query można teraz dodawać adnotacje za pomocą atrybutu @Transaction. Więcej informacji znajdziesz w dokumentacji @Transaction. b/65112315
    • Klasa StringUtil w Room została usunięta z publicznego interfejsu API (nigdy nie miała ona służyć jako publiczny interfejs API).
  • Cykle życia:

    • LiveData działa prawidłowo, gdy aktywność jest częściowo pokryta przez interfejs API < 24. b/65665621

    • Metody OnLifecycleEvent w klasach nadrzędnych są teraz prawidłowo wywoływane lub podczas kompilacji wyświetlane jest ostrzeżenie. b/63474615

    • Cykl życia powoduje teraz powrót do atrybutu WeakReference będącego jego właścicielem cyklu życia, aby uniknąć wycieku informacji o wartości cyklu życia, jeśli cykl życia jest przechowywany w pamięci dłużej niż zwykle (jest to tylko zabezpieczenie, nie wyciekaj tutaj elementu Lifecycle).

9 października 2017 r.

Udostępniono tempo alpha-3, dzięki czemu jest ono zgodne z wersją Cykle życia i pomieszczenia na beta 2.

Poprawki błędów

  • Dokumentacja ulepszonego stronicowania.

5 października 2017 r.

Wszystkie główne artefakty (oprócz stronicowania) mają teraz stan beta 2. W tej wersji nie ma nowej wersji stronicowania.

Poprawki błędów

  • Cykle życia:

    • Teraz LiveDataReactiveStreams prawidłowo anuluje subskrypcję wydawcy źródłowego, gdy domena LiveData jest nieaktywna. b/62609183
    • Zdarzenia cyklu życia są prawidłowo rozpowszechniane do klas nadrzędnych, gdy klasa nadrzędna pochodzi z innego modułu. b/63474615
    • LiveData prawidłowo obsługuje obserwatorów, którzy rezygnują z subskrypcji podczas tworzenia subskrypcji. b/66337741
    • FullLifecycleObserver dla artefaktu języka Java 8 jest teraz dostępny w drzewie zależności. b/66525578

    • W przypadku ProParda dodaj do pliku Prokopard te wiersze. (Nie będzie to konieczne, gdy zostanie wysłany 1.0.0).

      • -keep class * implements android.arch.lifecycle.GeneratedAdapter {<init>(...);}
  • Pokój:

    • Funkcja Room wyświetla teraz błąd w czasie kompilacji, gdy zwrócone pole Pojo w metodzie @Query zawiera pole @NonNull, które nie pasuje do żadnej kolumny w odpowiedzi na zapytanie. Jeśli pole ma wartość @Nullable, sala wyświetla tylko ostrzeżenie. b/67115337
    • Usługa Room weryfikuje indeksy w nowszych wersjach systemów operacyjnych. b/63132683
    • Jeśli w Pojo znajduje się wiele pasujących konstruktorów, pokój domyślnie wybiera konstruktor bez argumentu. b/67353427
    • Jednokolumnowy klucz podstawowy może mieć postać Nullable, jeśli jest to Integer lub Long. B/67086876
    • Narzędzie do śledzenia unieważnień prawidłowo obsługuje ponowne wprowadzanie danych w trybie testowym. b/65471397
    • Funkcja Room sprawdza teraz, czy w nazwach kolumn i tabel nie ma nieprawidłowych znaków podczas kompilacji (nieprawidłowe znaki: `, "). b/64749111

21 września 2017 r.

W tej wersji wszystkie moduły komponentów architektury docierają do co najmniej beta 1 (z wyjątkiem nowej biblioteki stronicowania, która wynosi alpha 2).

Nie planujemy dalszych zmian w interfejsie API. Nieplanowane zmiany mogą się zdarzyć, ale słupek związany ze zmianą dowolnego interfejsu API przed wprowadzeniem stabilnej wersji 1.0.0 jest bardzo wysoki i mało prawdopodobne, że wystąpią.

  • LifecycleActivity i LifecycleFragment zostaną usunięte przed stabilizacją 1.0.0. Nie są one potrzebne, gdy używasz Biblioteki pomocy w wersji 26.1.0 lub nowszej.

W przeciwieństwie do fazy alfa etap beta będzie trwał bardzo krótko.

Zmiany wersji

  • Rozszerzenia cyklu życia i pokoje są teraz beta 1
  • Strona jest teraz ustawiona na: alpha 2
  • Brak zmian w cyklach życia (środowisko wykonawcze, wspólne) i Ar Core (często). Oba artefakty są w wersji 1.0.0 od 13 września.

Nowe artefakty

  • Cykle życia mają teraz nowy artefakt o nazwie common-java8. Ten artefakt zawiera nowy interfejs o nazwie DefaultLifecycleObserver, który ma domyślne implementacje dla wszystkich metod cyklu życia. Jeśli używasz języka Java 8, wolisz ten artefakt zamiast adnotacji.

    • Z powodu błędu w beta1 musisz dodać wyraźną zależność od modułu android.arch.lifecycle:common:1.0.1, aby móc używać nowego artefaktu common-java8. Ten problem zostanie rozwiązany w beta2.

Zmiany w pakiecie

  • Element android.arch.persistence.room.db został przeniesiony do folderu android.arch.persistence.db
  • Domena android.arch.persistence.room.db-impl została przeniesiona i zmieniona na android.arch.persistence.db-framework

Oba te artefakty są już zależne od sali, więc jeśli nie były używane bezpośrednio, nie musisz wprowadzać żadnych zmian w plikach kompilacji.

Zmiany w interfejsie API

  • Pokój:

    • Adnotacja @ColumnInfo umożliwia teraz ustawianie metody porównywania w kolumnie. b/62007004
    • Pola transient są teraz domyślnie ignorowane, chyba że mają adnotacje @ColumnInfo, @Embedded lub @Relation. B/62600692
    • Klucze podstawowe muszą mieć adnotacje @NonNull, chyba że są generowane automatycznie. b/64292391
      • Ta zmiana może wymagać migracji schematu. Przepraszamy za niedogodności.
    • Dodaliśmy nową adnotację dogodną (@Transaction), która zastępuje metodę DAO i uruchamia ją w transakcji.
  • Obsługuj bazę danych SQLite:

  • Strona:

    • Ulepszona dokumentacja stron z większą liczbą przykładów i adnotacjami wątków.

Poprawki błędów

  • Pomieszczenie:
    • Wielowierszowe ciągi tekstowe Kotlin w metodach @Query są obsługiwane prawidłowo. b/65809374
  • Podział na strony:
    • Artefakt strony nie zależy już od jednostki junit. b/65690261

1.0.0 Alpha 9–1 – 13 września 2017 r.

To jest główna wersja, w której podstawowe artefakty cyklu życia (czas działania, typowe) i rdzeń łuku (wspólne) osiągają stabilną wersję 1.0.0.

W związku z tą zmianą biblioteka pomocy w wersji 26.1.0 zależy teraz od tych bibliotek. Zarówno AppCompatActivity, jak i fragment kodu pomocy implementują teraz interfejs LifecycleOwner.

Aby można było korzystać z nowej integracji, ta wersja wymaga też użycia biblioteki pomocy 26.1.0.

Nowa biblioteka: stronicowanie

Ta wersja zawiera również nową bibliotekę o nazwie Paging, która w razie potrzeby umożliwia łatwe wczytywanie dużych zbiorów danych do widoku RecyclerView. Paging jest dostępny jako alpha1 i będzie miał własny cykl wydania.

Zmiany w interfejsie API

Poprawki błędów

  • Wygenerowane klasy są teraz oznaczone adnotacją @Generated, jeśli aplikacja ma odpowiednią adnotację w ścieżce klasy. b/35754819

  • Naprawiliśmy błąd związany z porównywaniem obserwatorów w usłudze MediatorLiveData. b/64413274

  • [LiveData] obsługuje teraz zapytania SQLite WITH. [ref-LiveData] b/62510164

  • Naprawiono błąd, który powodował, że element invalidationTracker nie wysyłał właściwej listy w przypadku zarejestrowania więcej niż jednej tabeli. b/65099281

  • Naprawiono błąd, który powodował generowanie różnych plików w systemie Windows przez pokój. b/64470691

  • Obiekty LifecycleObservers w pakiecie głównym są teraz obsługiwane. b/62310817

1.0.0 alfa 9 – 16 sierpnia 2017 r.

Poprawki błędów

  • Naprawiliśmy błąd w funkcji LiveData, który powodował, że drugi obserwator był ignorowany, gdy pierwszy z nich został usunięty ze metody onChanged. b/64285805

1.0.0 alfa 8 – 1 sierpnia 2017 r.

Zmiany w działaniu

  • W przypadku kolumn typów podstawowych lub kolumn z adnotacjami NonNull dodano ograniczenie NOT NULL. Spowoduje to zmianę struktury tabel, więc jeśli korzystasz już z komponentów Architecture Komponent w wersji alfa lub starszej, musisz wdrożyć migrację, jeśli chcesz zachować dane, lub użyć metody fallbackToDestructiveMigration() w kreatorze. b/62007004

Zmiany w interfejsie API

1.0.0 alfa 7 – 26 lipca 2017 r.

Poprawki błędów

1.0.0 alfa 6 – 25 lipca 2017 r.

Zmiany w działaniu

  • Zmieniono kolejność wywołań narzędzia LifecycleObserver. Wcześniej obserwatorzy byli zawsze wywoływani w kolejności ich dodania: jeśli zdarzenie observer1 zostało dodane przed observer2, otrzyma zdarzenie ON_CREATE i wszystkie pozostałe zdarzenia przed observer2. Nie dotyczy to już zdarzeń zniszczenia, dla których obserwatorzy są wywoływane w odwrotnej kolejności dodawania. Obecne działanie wygląda więc tak: jeśli zdarzenie observer1 zostało dodane przed observer2, to ON_CREATE jest wysyłane najpierw do observer1, a potem do observer2 (to samo dzieje się w przypadku ON_START i ON_RESUME), ale zdarzenie ON_PAUSE jest wysyłane jako pierwsze do observer2, a potem tylko do observer1 (to samo dotyczy ustawień ON_STOP i ON_DESTROY).

  • Jeśli brakuje migracji, sala zgłasza wyjątek. Wcześniej usługa Room wyczyściła tylko bazę danych, ale teraz ulega awarii. Deweloperzy mogą wyrazić zgodę na działanie czyszczenia, wywołując interfejs API kreatora. b/63872392

Zmiany w interfejsie API

  • Do narzędzia RoomDatabase.Builder dodano metodę fallbackToDestructiveMigration(), która pozwala wyczyścić bazę danych w razie braku migracji. b/63872392

  • Komponenty architektury zależą teraz od biblioteki pomocy 26.0.0

Poprawki błędów

  • Poprawiono obsługę elementu @Relation zagnieżdżonego w elemencie @Embedded. b/63736065

  • Naprawiono migracje testowe dla tabel z automatycznie przyrostowym kluczem podstawowym. b/63393618

  • Teraz @Zapytania, które uruchamiają zapytania DELETE lub UPDATE, prawidłowo otrzymują argumenty. b/63872538

  • Obecnie obiekty ViewModels są zachowywane, gdy fragment właściciela znajduje się w wstecznym stosie, a zmiana konfiguracji następuje 2 razy. b/38445801

1.0.0 alfa 5 – 18 lipca 2017 r.

Zmiany w interfejsie API

Aby dodać obsługę RxJava do pokoju, musisz korzystać z artefaktu android.arch.persistence.room:rxjava2.

Poprawki błędów

  • Poprawiono zapytania @Delete bez parametrów. b/63608092

  • Naprawiono sprawdzanie typu pomieszczenia w przypadku metod pobierania i ustawiania. b/63733651

1.0.0 alfa 4 – 11 lipca 2017 r.

Zmiany w interfejsie API

  • Do bazy danych RoomDatabase dodaliśmy nową metodę zapewniającą wygodę (runInTransaction()).

  • Metody @Insert, @Delete i @Update mogą teraz zawierać parametry z różnych typów encji. b/62682405

Poprawki błędów

  • Poprawiono obsługę byte[] w metodach @Dao. b/62460045

  • Sprawdzanie migracji w sali konferencyjnej używa teraz porównania bez rozróżniania wielkości liter. b/62875382

  • Naprawiono konfigurację Pro4ard dla artefaktu Cykl życia. b/62113696

1.0.0 Alpha 3 – 15 czerwca 2017 r.

Zmiany w interfejsie API

  • @OnLifecycleEvent obsługuje obecnie tylko 1 parametr zdarzenia. Jest to zmiana w ramach przygotowań do obsługi języka Java 8, która pozwoli nam w przyszłości przeprowadzić migrację do interfejsów z metodami domyślnymi. W związku z tą zmianą tylko metody z adnotacjami @OnLifecycleEvent(ON_ANY) mogą otrzymać drugi parametr typu Event (pierwszy parametr to LifecycleOwner). Szczegółowe informacje znajdziesz w dokumentacji Cykl życia.

  • Klasy LifecycleActivity i LifecycleFragment są przenoszone do artefaktu android.arch.lifecycle:extensions.

  • Aby odczytać schemat z zasobów testowych i utworzyć bazę danych w kontekście aplikacji, migracjaTestHelper otrzymuje instancję Instrumentation zamiast Context.

  • Adnotacje @Insert, @Delete i @Update w metodach @DAO mogą teraz mieć typ parametru Iterable. b/62259820

Poprawki błędów

  • Zastąpione metody ze zdarzeniami cyklu życia nie są już wywoływane wiele razy.

  • Wiele parametrów IN jest teraz obsługiwanych prawidłowo. b/62608681

  • Abstrakcyjne klasy DAO mogą teraz mieć konstruktor, który odbiera wystąpienie @Database. b/38488747

  • Obiekty DAO mogą teraz mieć superklasę/interfejs z parametrami typu. b/62103620

1.0.0 Alpha 2 – 2 czerwca 2017 r.

Zmiany w interfejsie API

Poprawki błędów

  • Pliki Proguard dla cykli życia. (b/62113696)
  • Utrata danych w przypadku konwersji typów. (b/62100716)
  • Zezwalaj na zwracanie wartości Long[] z zapytań @Insert.

1.0.0 alfa 1 – 17 maja 2017 r.

MinSDK: 14

Zalecenia ogólne

  • Przed premierą przeprowadziliśmy wiele testów, ale Komponenty architektury są obecnie w wersji alfa. Jeśli tworzysz aplikację w wersji produkcyjnej, pamiętaj, że interfejs API zmieni się przed wersją 1.0 i może nie być w pełni kompletny. Jeśli nie potrafisz debugować problemów w bibliotekach, których używasz, zalecamy najpierw wypróbowanie komponentów architektury w projektach pobocznych.

  • Nie zalecamy przeprowadzania migracji już dziś. Przygotowaliśmy przewodnik po migracji dla komponentów architektury w wersji 1.0.

Znane ograniczenia i problemy