Архив примечаний к выпускам компонентов архитектуры

15 января 2019 г.

WorkManager

Выпущен WorkManager 1.0.0-beta02. В этой версии исправлены некоторые ошибки.

Исправление ошибок

  • Исправлена ошибка, из-за которой периодическая работа могла выполняться более одного раза за интервал на устройствах с Android 6.0 (уровень API 23). b/121998363
  • Исправлена ошибка ConcurrentModificationException на устройствах с Android 5.1 (уровень API 22) или более ранней версии. b/121345393
  • Исправлена ошибка, из-за которой на устройствах с Android 5.1 (уровень API 22) или более ранней версии задачи выполнялись, даже если ограничения не соблюдались. b/122578012
  • Оптимизирована обработка завершения работы, чтобы ускорить ее в некоторых пограничных случаях. b/122358129
  • Добавлено изменение, устраняющее потенциальные состояния гонки между несколькими экземплярами LiveData, которые использует WorkManager.
  • Вместо зависимости 1.1.1-rc01 теперь используется зависимость Room 1.1.1. Эти версии идентичны. b/122578011

19 декабря 2018 г.

WorkManager

Выпущен WorkManager 1.0.0-beta01. В этом выпуске нет изменений API. В дальнейшем API WorkManager будет оставаться стабильным до следующей версии, если не возникнет критическая проблема. В этой версии исправлены некоторые ошибки.

Исправление ошибок

  • Ранее отмененные дочерние задачи успешно выполненных родительских задач больше не будут запускаться. b/120811767
  • Классы ведения журнала инициализируются правильно (в основном это проявлялось во время тестирования).

18 декабря 2018 г.

Навигация 1.0.0-alpha09 выпущена. В этой версии есть критические изменения API. Подробную информацию о них вы найдете в разделе Критические изменения ниже.

Мы решили прекратить разработку артефакта android.arch.navigation:navigation-testing. Хотя этот метод полезен для внутреннего тестирования NavController, мы настоятельно рекомендуем использовать альтернативные стратегии тестирования, например имитацию экземпляра NavController, чтобы убедиться, что выполняются правильные вызовы navigate(). Этот подход подробно обсуждается в докладе Single Activity на AndroidDevSummit 2018. Мы также планируем подготовить дополнительную документацию по тестированию с помощью Navigation.

Новые функции

  • MenuItem с menuCategory="secondary" больше не будут извлекать обратный стек при использовании с методами NavigationUI. b/120104424
  • Теперь AppBarConfiguration позволяет задать резервный экземпляр OnNavigateUpListener, который будет вызываться, когда navController.navigateUp() возвращает false. b/79993862 b/120690961

Критические изменения

  • При использовании <argument> с argType="reference" Navigation больше не анализирует ссылку, а предоставляет идентификатор необработанного ресурса. b/111736515
  • onNavDestinationSelected() теперь по умолчанию возвращается к начальному пункту назначения навигационного графа, что соответствует методам setup. Добавьте menuCategory="secondary" в MenuItem, чтобы избежать извлечения из обратного стека. aosp/852869
  • Методы fromBundle() сгенерированных классов Args теперь принимают ненулевой Bundle вместо допустимого значения NULL Bundle. aosp/845616

Исправление ошибок

  • Аргументы теперь правильно анализируются из ссылок на контент как правильный argType, а не всегда как строки. b/110273284
  • Теперь Navigation правильно экспортирует общедоступные ресурсы. b/121059552
  • Safe Args теперь совместим с плагином Android Gradle 3.4 Canary 4 и более поздними версиями. b/119662045

12 декабря 2018 г.

WorkManager

Выпущен WorkManager 1.0.0-alpha13. В этом выпуске содержится небольшое изменение API, которое будет полезно для некоторых пользователей Kotlin.

Изменения в API

  • Класс androidx.work.Result стал внутренним классом ListenableWorker. Это позволяет избежать конфликтов рефакторинга с классом верхнего уровня Result в Kotlin. Это критическое изменение API. b/120564418

Критические изменения в API

  • Класс androidx.work.Result стал внутренним классом ListenableWorker.

6 декабря 2018 г.

Страницы

Выпущена версия Paging 2.1.0-rc01 без изменений по сравнению с 2.1.0-beta01.

Навигация 1.0.0-alpha08 выпущена. В этой версии есть критические изменения API. Подробную информацию о них вы найдете в разделе Критические изменения ниже.

Новые функции

  • Ярлыки целевых страниц, используемые с методами NavigationUI, теперь будут автоматически заменять экземпляры {argName} в android:label правильным аргументом. b/80267266
  • Навигация теперь зависит от библиотеки поддержки версии 28.0.0. b/120293333

Критические изменения

  • OnNavigatedListener has been renamed to OnDestinationChangedListener b/118670572
  • OnDestinationChangedListener теперь также передает Bundle аргументов. aosp/837142
  • Удалены атрибуты app:clearTask и app:launchDocument и связанные с ними методы. Используйте app:popUpTo с корнем графа, чтобы удалить все пункты назначения из обратного стека. b/119628354
  • ActivityNavigator.Extras теперь использует шаблон Builder и позволяет устанавливать любые флаги Intent.FLAG_ACTIVITY_. aosp/828140
  • NavController.onHandleDeepLink переименован в handleDeepLink. aosp/836063
  • Многие классы и методы, не предназначенные для создания подклассов, такие как NavOptions, NavInflater, NavDeepLinkBuilder и AppBarConfiguration, были сделаны final. aosp/835681
  • Удален устаревший метод NavHostFragment.setGraph(). aosp/835684
  • Удален устаревший метод NavigationUI.navigateUp(DrawerLayout, NavController). aosp/835684
  • Создание фрагментов перенесено в FragmentNavigator, что упрощает делегирование создания фрагментов в FragmentFactory. b/119054429
  • Конструктор для NavGraphNavigator больше не принимает Context aosp/835340
  • NavigatorProvider теперь является классом, а не интерфейсом. Функциональность NavigatorProvider, возвращаемого getNavigatorProvider(), не изменилась. aosp/830660
  • Ресурс NavDestination.navigate() уже удален. Вместо этого вызовите navigate() для Navigator. aosp/830663
  • Значительный рефакторинг Navigator, устраняющий необходимость в OnNavigatorNavigatedListener. Вместо этого navigate возвращает NavDestination, к которому был выполнен переход.
  • Экземпляры Navigator больше не могут отправлять события POP в NavController. Рекомендуем использовать OnBackPressedCallback, чтобы перехватывать нажатия кнопки "Назад" и вызывать navController.popBackStack(). aosp/833716

Исправление ошибок

  • popUpTo теперь работает стабильно, когда целевым является элемент <navigation>. b/116831650
  • Исправлен ряд ошибок, которые приводили к возникновению IllegalArgumentException при использовании вложенных графов: b/118713731 b/113611083 b/113346925 b/113305559
  • Атрибут dataPattern целевых страниц <activity> теперь будет заполнять аргументы из аргументов, не являющихся строками, вызывая toString(). b/120161365

Safe Args

  • Safe Args поддерживает сериализуемые объекты, в том числе значения Enum. Для типов Enum можно задать значение по умолчанию, используя литерал enum без названия класса (например, app:defaultValue="READ"). b/111316353
  • Safe Args поддерживает массивы всех поддерживаемых типов. b/111487504
  • Safe Args теперь игнорирует подпапки каталогов ресурсов. b/117893516
  • Safe Args добавляет аннотации @Override, где это необходимо. b/117145301

5 декабря 2018 г.

WorkManager

Выпущен WorkManager 1.0.0-alpha12. В этой версии есть критические изменения API. Подробная информация о них приведена в разделе Критические изменения API ниже. Скорее всего, эта версия будет выпущена как первая бета-версия. В alpha12 также содержится множество обновлений документации.

Изменения в API

  • Новый объект "work-rxjava2" представляет RxWorker. Это ListenableWorker, для которого требуется Single<Payload>.
  • Поддержка Firebase JobDispatcher прекращена, так как этот инструмент скоро будет отключен. Это означает, что артефакт work-firebase больше не будет обновляться по мере перехода к бета-версии. В будущем мы планируем добавить альтернативный вариант.
  • Payload объединено с Result. Result теперь является запечатанным классом с тремя конкретными реализациями, которые можно получить с помощью Result.success() (или Result.success(Data)), Result.failure() (или Result.failure(Data)) и Result.retry(). Теперь ваши ListenableFuture приводят к Result вместо Payload. В Worker нет методов получения и установки для выходного значения Data. Это критическое изменение.
  • Добавлены Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) и Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) и варианты для лучшей поддержки URI контента с медленным запуском. b/119919774
  • Добавлен вариант WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration). Для этого метода требуется API 26.
  • Добавлены методы расширения Kotlin Operation.await() и ListenableFuture.await().
  • Название "Operation.getException()" изменено на "Operation.getThrowable()". Это критическое изменение.
  • Класс ContentUriTriggers и методы, ссылающиеся на него, больше не доступны для общего использования. Это критическое изменение.
  • Удалены остальные методы с переменным числом аргументов в WorkManager, WorkContinuation и OneTimeWorkRequest, чтобы упростить API. Чтобы устранить проблемы со сборкой, вы можете обернуть существующие аргументы переменной длины в Arrays.asList(...). Мы по-прежнему включаем версии каждого метода с одним аргументом. Это критическое изменение.
  • Удалено вариантов: WorkContinuation.combine(OneTimeWorkRequest, *). Они усложняли API, а существующие методы combine более понятны. Это критическое изменение.

Исправление ошибок

  • В версиях до Marshmallow улучшено восстановление после завершения процесса уже выполняющейся задачи.
  • LiveData, наблюдаемый через observeForever, отслеживается с помощью WorkManager. Это бэкпорт исправления библиотеки Room. b/74477406
  • Теперь Data.Builder.build() выдает исключение, если сериализованный объект превышает максимальный размер. Раньше это происходило только в фоновом потоке, где вы не могли правильно обработать ошибку.
  • Добавлено различие между остановленной и отмененной работой. getWorkInfoById() возвращает WorkInfo с CANCELLED State во время ListenableWorker.onStopped().
  • Считать null Result ошибками в ListenableWorker. b/120362353
  • Предположительное исправление для планшетов Shield с API 24, на которых иногда возникала ошибка IllegalArgumentException. b/119484416

Критические изменения в API

  • Поддержка Firebase JobDispatcher прекращена, так как этот инструмент скоро будет отключен. Это означает, что артефакт work-firebase больше не будет обновляться по мере перехода к бета-версии. Мы планируем добавить альтернативный вариант в будущем.
  • Payload объединено с Result. Result теперь является запечатанным классом с тремя конкретными реализациями, которые можно получить с помощью Result.success() (или Result.success(Data)), Result.failure() (или Result.failure(Data)) и Result.retry(). Теперь ваши ListenableFuture приводят к Result вместо Payload. В Worker нет методов получения и установки для выходного значения Data.
  • Добавлены методы расширения Kotlin Operation.await() и ListenableFuture.await().
  • Название "Operation.getException()" изменено на "Operation.getThrowable()".
  • Класс ContentUriTriggers и методы, которые на него ссылаются, больше не доступны для общего использования.
  • Удалены остальные методы с переменным числом аргументов в WorkManager, WorkContinuation и OneTimeWorkRequest, чтобы упростить API. Чтобы устранить проблемы со сборкой, вы можете обернуть существующие аргументы переменной длины в Arrays.asList(...). Мы по-прежнему включаем версии каждого метода с одним аргументом.
  • Удалено вариантов: WorkContinuation.combine(OneTimeWorkRequest, *). Они усложняли API, а существующие методы combine более понятны.

4 декабря 2018 г.

Комната

Выпущена версия Room 2.1.0-alpha03 с поддержкой сопрограмм и исправлением нескольких ошибок.

Изменения в API

  • FTS tokenizer в @Fts3/@Fts4 теперь принимает строку вместо перечисления. Это позволяет использовать в Room собственные токенизаторы. Встроенные токенизаторы по-прежнему определяются в FtsOptions как строковые константы. b/119234881

Новые функции

  • Сопрограммы. Методы DAO теперь могут быть функциями приостановки. Для поддержки функций приостановки в Room был выпущен новый артефакт room-coroutines. b/69474692
  • Методы DAO, аннотированные с помощью @Insert, @Delete или @Update, теперь поддерживают ListenableFuture в качестве типа возвращаемого значения. b/119418331

Исправление ошибок

  • Исправлена ошибка, из-за которой Room пытался найти конструктор со столбцами в свойстве ignoredColumns класса @Entity. b/119830714
  • Исправлена ошибка, из-за которой Room не помечал параметры метода DAO как final в сгенерированной реализации. b/118015483
  • Исправлена ошибка, из-за которой процессор Room аварийно завершал работу при сообщении об ошибке в запросе со специальными символами. b/119520136
  • Исправлена ошибка, из-за которой Room отклонял различные реализации Collection в качестве аргументов выражения IN. b/119884035
  • Исправлена ошибка, из-за которой LiveData, возвращенные из Room, собирались как мусор при постоянном наблюдении, что приводило к прекращению выдачи новых данных. b/74477406
  • Обновлена блокировка закрытия RoomDatabase, чтобы уменьшить конфликт блокировок. b/117900450

8 ноября 2018 г.

WorkManager

Выпущен WorkManager 1.0.0-alpha11. В этом выпуске много изменений, которые станут стабильными в API beta. В этом выпуске есть критические изменения API. Ознакомьтесь с разделом Критические изменения API ниже.

Изменения в API

  • work-runtime-ktx представляет новый CoroutineWorker.
  • Сервисный аккаунт WorkStatus переименован. Новое название: WorkInfo. Все варианты метода getStatus переименованы в соответствующие варианты getWorkInfo. Это критическое изменение.
  • ListenableWorker.onStopped() больше не принимает логический аргумент, указывающий, был ли отменен WorkRequest. В WorkManager такого различия больше нет. Это критическое изменение.
  • Пакет androidx.work.test переименован в androidx.work.testing. Это критическое изменение.
  • Сеттеры в Constraints больше не являются частью общедоступного API. Это критическое изменение.
  • Ранее для показателей WorkerParameters.getTriggeredContentUris() и WorkerParameters.getTriggeredContentAuthorities() возвращались массивы. Теперь эти методы возвращают коллекции. Это критическое изменение.
  • ListenableWorker.onStartWork() переименован в ListenableWorker.startWork(). Это критическое изменение.
  • Конструктор для WorkStatus больше не является частью общедоступного API. Это критическое изменение.
  • Configuration.getMaxJobSchedulerID() и Configuration.getMinJobSchedulerID() переименованы в Configuration.getMinJobSchedulerId() и Configuration.getMaxJobSchedulerId() соответственно. Это критическое изменение.
  • В общедоступный API добавлено много аннотаций @NonNull, чтобы сделать его более удобным.
  • Добавьте API WorkManager.enqueueUniqueWork(), чтобы ставить в очередь уникальные OneTimeWorkRequest без создания WorkContinuation.
  • Все варианты методов enqueue и cancel в WorkManager теперь возвращают новый тип Operation. Это критическое изменение.
  • Все варианты enqueue больше не принимают аргументы переменной длины для WorkRequest. Это критическое изменение. Используйте подборки. Вы можете использовать Arrays.asList(), чтобы изменить существующий код. Это позволило уменьшить количество методов и область применения API.
  • Попытка вызвать initialize WorkManager более одного раза за процесс теперь приведет к ошибке IllegalStateException. Это критическое изменение.

Исправление ошибок

  • WorkRequest.Builder в объекте work-runtime-ktx теперь используют ListenableWorker. Исправлена ошибка b/117666259.
  • Убедитесь, что время следующего запуска для PeriodicWork находится в будущем. Исправлена ошибка b/118204399.
  • Удалите потенциальные операции ввода-вывода на диске при использовании WorkManager во время запуска приложения. Исправлена ошибка b/117796731.
  • Исправьте состояние гонки в WorkConstraintsTracker. Исправлена ошибка android-workmanager/issues/56.

Критические изменения в API

  • Сервисный аккаунт WorkStatus переименован. Новое название: WorkInfo. Все варианты метода getStatus переименованы в соответствующие варианты getWorkInfo.
  • ListenableWorker.onStopped() больше не принимает логический аргумент, указывающий, был ли отменен WorkRequest. В WorkManager такого различия больше нет.
  • Пакет androidx.work.test переименован в androidx.work.testing.
  • Методы Set в Constraints больше не являются частью общедоступного API.
  • Ранее для показателей WorkerParameters.getTriggeredContentUris() и WorkerParameters.getTriggeredContentAuthorities() возвращались массивы. Теперь эти методы возвращают коллекции.
  • ListenableWorker.onStartWork() переименован в ListenableWorker.startWork().
  • Конструктор для WorkStatus больше не является частью общедоступного API.
  • Configuration.getMaxJobSchedulerID() и Configuration.getMinJobSchedulerID() переименованы в Configuration.getMinJobSchedulerId() и Configuration.getMaxJobSchedulerId() соответственно.
  • Все варианты методов enqueue и cancel в WorkManager теперь возвращают новый тип Operation.
  • Все варианты enqueue больше не принимают аргументы переменной длины для WorkRequest.
  • Попытка вызвать initialize WorkManager более одного раза за процесс теперь приведет к ошибке IllegalStateException.

1 ноября 2018 г.

Страницы

Выпущена версия Paging 2.1.0-beta01 без изменений по сравнению с 2.1.0-alpha01.

30 октября 2018 г.

Комната

Выпущена версия Room 2.1.0-alpha02 с несколькими исправлениями ошибок и новой функцией.

Новые функции

  • Добавлена поддержка ссылок на @DatabaseView в @Relation. b/117680932

Исправление ошибок

  • Исправлена ошибка, из-за которой Room выполнял операции I/O на диске в основном потоке при подписке и удалении из типа возвращаемого значения Rx. b/117201279
  • Исправлена ошибка, из-за которой Room не удавалось найти подходящий преобразователь типов для поля в классе сущности Kotlin. b/111404868
  • Исправлена ошибка, из-за которой Room генерировал неправильный код для реализации интерфейса DAO, содержащего метод Kotlin по умолчанию без аргументов. b/117527454
  • Обновлен синтаксический анализатор грамматики SQLite в Room, что позволило устранить проблему производительности, которая приводила к увеличению времени сборки. b/117401230

29 октября 2018 г.

Выпущена версия Navigation 1.0.0-alpha07 с исправленными ошибками и изменениями API.

Новые функции

  • Новый класс AppBarConfiguration позволяет настраивать, какие целевые страницы считаются страницами верхнего уровня. Подробную информацию вы найдете в обновленной документации. b/117333663
  • Теперь вы можете передавать аргументы в начальный пункт назначения графа. b/110300470
  • Ссылки на контент теперь поддерживают специальные схемы с точками, дефисами и знаками плюса. b/112806402

Критические изменения

  • Модуль navigation-testing-ktx был объединен с модулем navigation-testing artifact и больше не будет публиковаться.
  • Артефакт navigation-testing теперь зависит от стандартной библиотеки Kotlin. API был изменен, чтобы лучше соответствовать соглашениям Kotlin, но вы можете продолжать использовать его для тестов, написанных на Java.
  • Графы навигации, зарегистрированные в манифесте метаданных, больше не поддерживаются. b/118355937
  • Действия больше нельзя прикреплять к целевым объектам <activity>. aosp/785539

Исправление ошибок

  • Ссылки на контент теперь корректно анализируют параметры запроса. b/110057514
  • Теперь в Activity destinations правильно применяются все анимации входа и выхода. b/117145284
  • Исправлена ошибка, приводившая к сбоям после изменения конфигурации при использовании собственных навигаторов. b/110763345

Safe Args

  • Safe Args теперь имеет фиксированную зависимость от плагина Android Gradle 3.2.1. b/113167627
  • Теперь можно генерировать маршруты для внутренних классов. b/117407555
  • Исправлена ошибка, из-за которой не удавалось создать маршруты для графа <include>. b/116542123

12 октября 2018 г.

Страницы

В Paging 2.1.0-alpha01 добавлены две основные функции: удаление страниц и библиотеки расширений KTX для каждого артефакта. Также внесены изменения в API и исправлены ошибки.

Изменения в API

  • Добавлен параметр PagedList.Config.Builder.setMaxSize(), позволяющий ограничить количество загружаемых в память объектов.
  • Добавлен метод androidx.paging.Config() в качестве альтернативы PagedList.Config.Builder для Kotlin.
  • Добавлен метод androidx.paging.PagedList() как альтернатива PagedList.Builder для Kotlin.
  • Добавлен метод DataSourceFactory.toLiveData() в качестве альтернативы LivePagedListBuilder для Kotlin.
  • Добавлены DataSourceFactory.toObservable() и toFlowable() в качестве альтернатив Kotlin для RxPagedListBuilder.
  • Добавлен метод AsyncPagedListDiffer.addPagedListListener() для прослушивания при замене PagedList. b/111698609
  • Добавлен вариант PagedListAdapter.onCurrentListChanged(), который передает старый и новый списки. Предыдущий вариант больше не поддерживается.
  • Добавлены варианты PagedListAdapter/AsyncPagedListDiffer.submitList(), которые принимают дополнительный обратный вызов, срабатывающий, если/когда отображается pagedlist, после сравнения. Это позволяет синхронизировать замену PagedList с другими обновлениями интерфейса. b/73781068
  • Добавлено PagedList.getLoadedCount(), чтобы вы знали, сколько элементов в памяти. Обратите внимание, что если заполнители отключены, возвращаемое значение всегда равно .size().

Исправление ошибок

  • Исправлено состояние гонки при сравнении, если списки используются повторно b/111591017.
  • Теперь PagedList.loadAround() выдает IndexOutOfBoundsException, если индекс недействителен. Ранее в таких случаях происходил сбой с неясным исключением.
  • Исправлена ошибка, из-за которой при очень маленьком размере начальной загрузки и неизменных данных дальнейшая загрузка не выполнялась b/113122599.

11 октября 2018 г.

WorkManager

Выпущен WorkManager 1.0.0-alpha10 с поддержкой асинхронных задач, управляемых разработчиком. В этом выпуске есть критические изменения API. Ознакомьтесь с разделом Критические изменения API ниже.

Мы ожидаем, что WorkManager вступает в заключительную фазу альфа-тестирования. Мы ожидаем, что API будет стабильно работать в бета-версии, поэтому просим вас уделить время и оставить отзыв в нашей системе отслеживания ошибок.

Изменения в API

  • Удалены все методы и классы deprecated, в частности конструктор по умолчанию Worker. Это критическое изменение API.
  • Класс NonBlockingWorker переименован в ListenableWorker. Теперь он является общедоступным и готов к использованию.
    • ListenableWorker предоставляет доступ к одному абстрактному методу ListenableFuture<Payload> onStartWork(), который вызывается в основном потоке. Вы сами решаете, когда начинать и выполнять работу. После этого обновите ListenableFuture. Эталонные реализации ListenableFuture приведены в пакете Futures в alpha02 (см. раздел WorkManager ниже).
    • Worker расширяет ListenableWorker и работает как раньше, с абстрактным методом Result doWork().
    • Некоторые методы и элементы перенесены из Worker в ListenableWorker.
    • Скоро мы предоставим примеры реализации ListenableWorker с использованием сопрограмм Kotlin (после выпуска стабильных версий) и RxJava2.
  • Интерфейс WorkerFactory и конкретная реализация DefaultWorkerFactory были объединены в абстрактный класс WorkerFactory. Реализация гарантирует, что поведение по умолчанию, основанное на отражении, вызывается в крайнем случае для любых созданных пользователем экземпляров WorkerFactory. Это критическое изменение.
  • Удалены классы WorkManager.synchronous() и WorkContinuation.synchronous() и все связанные с ними методы. Добавлен тип возвращаемого значения ListenableFuture<Void> для многих методов в API. Это критическое изменение API.
    • Теперь вы можете синхронно получать и отслеживать данные с помощью ListenableFuture. Например, WorkManager.enqueue() раньше возвращал void, а теперь возвращает ListenableFuture<Void>. Вы можете вызвать ListenableFuture.addListener(Runnable, Executor) или ListenableFuture.get(), чтобы запустить код после завершения операции.
    • Обратите внимание, что эти ListenableFuture не сообщают, была ли операция успешной или нет, а только то, что она завершена. Чтобы получить эту информацию, вам все равно нужно будет связать методы WorkManager.
    • Мы игнорируем вызовы cancel() для этих объектов, поскольку они могут запутать и усложнить понимание (вы отменяете операцию или результат работы?). Это предусмотрено договором с компанией "Future".
    • Чтобы сохранить паритет с синхронными методами getStatus*, мы добавили варианты ListenableFuture и переименовали существующие методы, которые возвращали LiveData, явно указав LiveData в названии (например, getStatusesByIdLiveData(UUID)). Это критическое изменение API.

Исправление ошибок

  • Исправлена известная проблема из alpha09, связанная с дублированием файлов androidx-annotations.pro. Вы можете удалить временное решение из предыдущих примечаний к выпуску, удалив exclude 'META-INF/proguard/androidx-annotations.pro' из файла gradle.
  • Добавлены конфигурации proguard для сохранения нового конструктора Worker. b/116296569
  • Исправлена потенциальная ошибка NullPointerException в состоянии гонки, когда работа была REPLACE. b/116253486 и b/116677275
  • WorkContinuation.combine() теперь принимает один или несколько WorkContinuation вместо двух или более. b/117266752

Критические изменения в API

  • Удалены все методы и классы deprecated, в частности конструктор по умолчанию Worker.
  • Интерфейс WorkerFactory и конкретная реализация DefaultWorkerFactory были объединены в абстрактный класс WorkerFactory.
  • Удалены WorkManager.synchronous() и WorkContinuation.synchronous().
  • Методы WorkManager.getStatus*() теперь возвращают ListenableFuture. WorkManager.getStatus*LiveData(): возврат LiveData.

Фьючерсы

Выпущены фьючерсы 1.0.0-alpha02.

Изменения в API

  • Теперь разработчики могут использовать ResolvableFuture и AbstractResolvableFuture в качестве легковесных конкретных реализаций ListenableFuture.

8 октября 2018 г.

Комната

Бронирование переговорной комнаты "2.1.0-alpha01" отменено.

Новые функции

  • FTS. Room теперь поддерживает объекты с таблицей сопоставления FTS3 или FTS4. Классы, аннотированные с помощью @Entity, теперь можно дополнительно аннотировать с помощью @Fts3 или @Fts4, чтобы объявить класс с таблицей сопоставления полнотекстового поиска. Дополнительные настройки полнотекстового поиска доступны в методах аннотации. b/62356416
  • Представления. Теперь Room поддерживает объявление класса как сохраненного запроса, также известного как представление, с помощью аннотации @DatabaseView. b/67033276
  • Auto Value. Теперь Room поддерживает объявление классов с аннотацией AutoValue как сущностей и POJO. Аннотации Room @PrimaryKey, @ColumnInfo, @Embedded и @Relation теперь можно объявлять в абстрактных методах класса с аннотацией AutoValue. Обратите внимание, что эти аннотации также должны сопровождаться @CopyAnnotations, чтобы Room правильно их понимал. b/62408420
  • Дополнительная поддержка типов возвращаемых значений Rx. Методы DAO, аннотированные с помощью @Insert, @Delete или @Update, теперь поддерживают типы возвращаемых значений Rx Completable, Single<T> и Maybe<T>. b/63317956
  • Неизменяемые типы с @Relation. Ранее для Room требовалось, чтобы поля с аннотацией @Relation были настраиваемыми, но теперь они могут быть параметрами конструктора.
  • enableMultiInstanceInvalidation – новый API в RoomDatabase.Builder, который позволяет аннулировать несколько экземпляров RoomDatabase, использующих один и тот же файл базы данных. Этот механизм аннулирования нескольких экземпляров также работает в нескольких процессах. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade – новый API в RoomDatabase.Builder, который автоматически заново создает базу данных в случае понижения версии. b/110416954
  • ignoredColumns – новый API в аннотации @Entity, который можно использовать для перечисления игнорируемых полей по названию. Полезно для игнорирования унаследованных полей в объекте. b/63522075

Изменения в API и поведении

  • mCallback и mDatabase в RoomDatabase теперь @Deprecated и будут удалены в следующей основной версии Room. b/76109329

Исправление ошибок

  • Исправлены две ошибки, из-за которых Room не восстанавливался должным образом после повреждения базы данных или неудачного переноса во время инициализации. b/111504749 и b/111519144
  • Теперь Room будет правильно использовать основной конструктор Kotlin в классах данных, что позволит не объявлять поля как vars. b/105769985

1 октября 2018 г.

Бронирование переговорной комнаты "2.0.0" отменено без изменений со стороны пользователя 2.0.0-rc01. Выпущена библиотека Paging 2.0.0 с одним исправлением.

Страницы

Исправление ошибок

  • Исправлен сбой, который мог возникать при очень быстрой прокрутке с использованием PositionalDataSource и плейсхолдеров b/114635383.

21 сентября 2018 г.

Выпущена версия Lifecycle 2.0.0 с одним исправлением ошибки из версии 2.0.0-rc01 в ViewModel.

Жизненный цикл

Исправление ошибок

  • Исправлено правило ProGuard для ViewModel, которое ошибочно удаляло конструкторы b/112230489.

20 сентября 2018 г.

Выпущена версия Navigation 1.0.0-alpha06 с исправленными ошибками и изменениями API.

Новые функции

Изменения в API

  • Критическое изменение. Метод Navigator navigate() теперь принимает параметр Navigator.Extras.
  • Метод getGraph() класса NavController теперь NonNull b/112243286

Исправление ошибок

  • NavigationUI.setupWithNavController() больше не допускает утечки представлений при использовании с представлениями из отдельных целевых объектов b/111961977
  • Navigator onSaveState() теперь вызывается только один раз b/112627079

Safe Args

  • Классы Directions для пункта назначения теперь расширяют родительский класс Directions, если он существует b/79871405.
  • Классы Directions и Args теперь имеют полезную реализацию toString() b/111843389.

19 сентября 2018 г.

WorkManager

Выпущен WorkManager 1.0.0-alpha09 с исправленными ошибками, обновленной инфраструктурой и изменениями в API.

Известная проблема

Если вы столкнулись с ошибкой "More than one file was found with OS independent path 'META-INF/proguard/androidx-annotations.pro'", добавьте в файл gradle следующий код. Это временное решение, пока мы не исправим ошибку в alpha10.

Яркий

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

Kotlin

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

Исправление ошибок

  • Добавлено ещё одно исправление, необходимое для устранения ошибки "100 заданий". b/115560696
  • Исправлены некоторые ошибки, связанные с ограничениями внешнего ключа, которые возникали из-за состояния гонки. b/114705286
  • Делегировано ConstraintTrackingWorker.onStopped(boolean) вызовов базовому Worker. b/114125093
  • Принудительно задавать правильную минимальную задержку повторной попытки для Firebase JobDispatcher. b/113304626
  • Улучшены гарантии потоковой передачи в библиотеке.
  • Устранена потенциальная проблема с дедупликацией LiveData.

Изменения в API

  • Теперь вы можете создавать собственные экземпляры Worker во время выполнения, указав WorkerFactory как часть WorkManager.Configuration. Резервная фабрика – DefaultWorkerFactory, что соответствует поведению предыдущих версий WorkManager.
    • Конструкторы по умолчанию для Worker и NonBlockingWorker теперь помечены как устаревшие. Используйте новый конструктор (Worker(Context, WorkerParameters)) и вызовите super(Context, WorkerParameters). В будущих версиях WorkManager конструктор по умолчанию будет удален.
  • Мы начали использовать новый артефакт ListenableFuture (без зависимостей Guava). В будущих выпусках мы добавим в API ListenableFutures. Это изменение позволит в будущем показывать NonBlockingWorker.
  • Добавьте возможность запускать работу по времени в TestDriver с помощью TestDriver.setInitialDelayMet(UUID) и TestDriver.setPeriodDelayMet(UUID). b/113360060

Критические изменения

  • Конструкторы Worker и NonBlockingWorker по умолчанию больше не поддерживаются. Рекомендуем как можно скорее перейти на новый конструктор. В будущих версиях конструктор по умолчанию будет удален.

27 августа 2018 г.

WorkManager

Выпущена версия WorkManager 1.0.0-alpha08 с исправленными ошибками.

Исправление ошибок

  • Компоненты WorkManager явно помечены как не поддерживающие режим прямого запуска, поэтому они не будут запускаться в этом режиме. В будущем мы предоставим версию WorkManager, которая поддерживает режим прямой загрузки. b/112665532
  • Исправлена ошибка, из-за которой не выполнялись повторные попытки. b/112604021
  • Исправлена ошибка, из-за которой периодическая работа не выполнялась повторно (связана с проблемой выше). b/112859683
  • Соблюдение правил экспоненциальной задержки, когда процесс приложения уже запущен.
  • Исправлены сообщения об исключениях в Data, чтобы указать, что ограничение составляет 10 КБ.
  • Максимальное значение Configuration.setMaxSchedulerLimit(int) снижено до 50, чтобы учесть задержку при завершении обработки JobScheduler. b/112817355

16 августа 2018 г.

WorkManager

Выпущена версия WorkManager 1.0.0-alpha07 с исправленными ошибками и незначительными изменениями API.

Исправление ошибок

  • Исправлена ошибка, из-за которой SQL-запрос с отрицательными ограничениями мог возвращать неограниченное количество результатов.
  • Теперь после завершения задачи все ее копии, ожидающие выполнения в других планировщиках, корректно отменяются. Это привело к превышению лимита в JobScheduler заданий. b/111569265
  • Устранено исключение ConcurrentModificationException в классе ConstraintTracker. b/112272753
  • Аннотации типа возвращаемого значения Data.getBooleanArray(String) и Data.getIntArray(String) изменены на @Nullable вместо @NonNull. b/112275229

Изменения в API

  • Worker теперь расширяет новый класс NonBlockingWorker. Это не повлияет на текущее использование. В будущем NonBlockingWorker станет полностью поддерживаемым объектом для пользовательских решений по созданию цепочек.
  • Аннотации типа возвращаемого значения Data.getBooleanArray(String) и Data.getIntArray(String) изменены на @Nullable вместо @NonNull. b/112275229
  • Расширения Kotlin: прекращена поддержка Map.toWorkData() и добавлен элемент верхнего уровня workDataOf(vararg Pair<String, Any?>) для обеспечения совместимости с существующими API.

10 августа 2018 г.

Выпущена версия Navigation 1.0.0-alpha05 с исправленными ошибками.

Исправление ошибок

  • Исправлена ошибка, из-за которой стек возврата работал некорректно. b/111907708
  • Исправлена ошибка в equals() сгенерированных классов Args. b/111450897
  • Исправлена ошибка сборки в Safe Args. b/109409713
  • Исправлено преобразование идентификаторов ресурсов в имена Java b/111602491.
  • Исправлены сообщения об ошибках, связанных с допустимостью значения NULL в плагине Safe Args.
  • Добавьте отсутствующие аннотации о допустимости значения NULL.

6 августа 2018 г.

Версии AndroidX для Lifecycle, Room и Paging выпуска 2.0.0-rc01. Все артефакты не изменились с 2.0.0-beta01.

1 августа 2018 г.

WorkManager

Выпущена версия WorkManager 1.0.0-alpha06 с исправленными ошибками.

Исправление ошибок

  • Предотвращена блокировка базы данных при планировании работы. b/111801342
  • Исправлена ошибка, из-за которой PeriodicWork не запускался по расписанию в спящем режиме. b/111469837
  • Исправлено состояние гонки при отслеживании ограничений, которое приводило к сбою WorkManager. googlecodelabs/android-workmanager/issues/56
  • Создавайте уникальные WorkRequest, когда используете WorkRequest.Builder#build(). b/111408337
  • Включайте RescheduleReceiver, только если это необходимо для WorkRequest. b/111765853

24 июля 2018 г.

WorkManager

Выпущена версия WorkManager 1.0.0-alpha05 с важными исправлениями ошибок и изменениями в ведении журналов.

Изменения в API

  • WorkManager.getInstance() теперь аннотируется как @NonNull вместо @Nullable. Если синглтон не инициализирован должным образом вручную, метод выдаст ошибку IllegalStateException. Это критическое изменение API.
  • Добавлен новый API Configuration.Builder.setMinimumLoggingLevel(int), который может управлять детализацией WorkManager. По умолчанию WorkManager регистрирует сообщения уровня Log.INFO и выше.
  • Изменена сигнатура Data.getString(), поэтому она больше не принимает значение по умолчанию (неявно null). Это критическое изменение API.
  • Некоторые методы, необходимые только для внутреннего использования, помечены как @hide. Это относится к конструктору Constraints, а также к методам Data.toByteArray() и Data.fromByteArray(byte[]). Это критическое изменение API.

Исправление ошибок

  • WorkManager больше не выполняет работу во время автоматического резервного копирования. Это могло привести к сбою. b/110564377
  • Исправлена ошибка, из-за которой при использовании JobScheduler объекты PeriodicWorkRequest планировались дважды. b/110798652
  • Исправлена ошибка, из-за которой PeriodicWorkRequest не выполнялись корректно после спящего режима устройства. b/111469837
  • Исправлена ошибка, из-за которой при использовании Firebase JobDispatcher возникали задержки. b/111141023
  • Исправлены некоторые потенциальные состояния гонки и проблемы с синхронизацией.
  • Освобождено BroadcastReceiver, которые больше не нужны.
  • Оптимизировано планирование при перезапуске приложений после принудительного закрытия.
  • Теперь TestScheduler.setAllConstraintsMet(UUID) можно вызывать до или после постановки в очередь заданного WorkRequest. b/111238024

Критические изменения

  • WorkManager.getInstance() теперь аннотируется как @NonNull вместо @Nullable.
  • Изменена сигнатура Data.getString(), поэтому она больше не принимает значение по умолчанию (неявно null).
  • Некоторые методы, необходимые только для внутреннего использования, помечены как @hide. Это относится к конструктору Constraints, а также к методам Data.toByteArray() и Data.fromByteArray(byte[]).

19 июля 2018 г.

В Navigation 1.0.0-alpha04 и связанном с ним плагине Safe Args gradle внесены изменения в API и поведение, а также исправлены ошибки.

Изменения в API и поведении

  • NavHostFragment всегда будет устанавливать текущий фрагмент в качестве основного фрагмента навигации, гарантируя, что дочерние менеджеры фрагментов будут извлечены до извлечения внешнего NavController b/111345778.

Safe Args

  • Критическое изменение. app:type заменено на app:argType, чтобы избежать конфликтов с другими библиотеками, такими как ConstraintLayout 2.0.0-alpha1 b/111110548.
  • Сообщения об ошибках от Safe Args теперь кликабельны b/111534438.
  • Классы Args теперь подтверждают, что атрибуты NonNull не равны null b/111451769.
  • В сгенерированные классы NavDirections и Args добавлены дополнительные аннотации NonNull b/111455455 b/111455456.

Исправление ошибок

  • Исправлена ошибка, из-за которой системная кнопка "Назад" не работала после перехода по ссылке на контент в целевой фрагмент (b/111515685).

12 июля 2018 г.

В Navigation 1.0.0-alpha03 и связанном с ним плагине Safe Args gradle внесен ряд изменений в API и поведение, а также исправлены ошибки.

Изменения в API и поведении

  • Добавлен метод NavigationUI.setupWithNavController для панели инструментов b/109868820.
  • Добавлен метод NavigationUI.setupWithNavController для CollapsingToolbarLayout b/110887183.
  • Теперь popBackStack() возвращает значение false, если обратный стек пуст или в нем нет указанного идентификатора целевого объекта b/110893637.
  • FragmentNavigator теперь игнорирует операции навигации после того, как FragmentManager сохранил состояние, что позволяет избежать исключений "Can not perform this action after onSaveInstanceState" (b/110987825).

Safe Args

  • Критическое изменение. Символы, не являющиеся буквами или цифрами, в названиях действий и аргументов будут заменены на верблюжий регистр в соответствующих названиях методов NavDirections.
    • Например, DemoController.index станет setDemoControllerIndex b/79995048.
    • Например, action_show_settings станет actionShowSettings b/79642240
  • Критическое изменение. Теперь аргументы по умолчанию считаются ненулевыми. Чтобы разрешить нулевые значения в аргументах string и parcelable, добавьте app:nullable="true" b/79642307.
  • Теперь вы можете использовать app:type="long" с defaultValues в формате "123L" b/79563966.
  • Теперь поддерживаются аргументы Parcelable, использующие полное имя класса для app:type. Единственное поддерживаемое значение по умолчанию – "@null" b/79563966.
  • Классы Args теперь реализуют equals() и hashCode() b/79642246.
  • Плагин Safe Args теперь можно применять к проектам библиотек b/80036553.
  • Плагин Safe Args теперь можно применять к проектам функций b/110011752.

Исправление ошибок

  • Исправлены ошибки, возникавшие при навигации во время выполнения методов жизненного цикла фрагмента (b/109916080).
  • Исправлены ошибки, возникавшие при многократной навигации по вложенным графикам b/110178671.
  • Исправлены ошибки, возникавшие при использовании setPopUpTo с первым пунктом назначения на графике b/109909461.
  • Устранена проблема, из-за которой все значения app:defaultValue передавались как строки b/110710788.
  • Инструмент aapt2, входящий в состав плагина Android Gradle 3.2 Beta 01, теперь добавляет правила сохранения для каждого атрибута android:name в XML-файлах Navigation b/79874119.
  • Устранена утечка памяти при замене FragmentNavigator по умолчанию b/110900142.

2 июля 2018 г.

Версии AndroidX для Lifecycle, Room и Paging выпуска 2.0.0-beta01.

Жизненный цикл

Исправление ошибок

  • Исправлено правило ProGuard для LifecycleObserver, чтобы сохранять только реализации, а не субинтерфейсы (b/71389427).
  • Исправлены правила ProGuard для ViewModel, чтобы разрешить обфускацию и сжатие.

Комната

Изменения в API и поведении

  • Добавлено поле RoomDatabase.Builder.setQueryExecutor(), позволяющее настраивать, где выполняются запросы.
  • Добавлена поддержка RxJava2 Observable.
  • Сгенерированные реализации DAO и базы данных теперь являются окончательными.

Исправление ошибок

  • Укажите название класса/поля в ошибке "не удается найти метод получения для поля" b/73334503
  • Исправлена обратная совместимость RoomOpenHelper с более старыми версиями Room b/110197391.

Страницы

Исправление ошибок

  • Исправлена ошибка, из-за которой контент исчезал в некоторых случаях добавления в начало (плейсхолдеры отключены, PositionalDataSource) b/80149146.
  • (Уже выпущено в 1.0.1) Исправлены сбои, при которых PagedListAdapter и AsyncPagedListDiffer не могли сигнализировать о событиях перемещения. b/110711937

26 июня 2018 г.

Страницы

Выпущена библиотека Paging 1.0.1 с одним исправлением в runtime. Для стабильной работы рекомендуем использовать 1.0.1. Также выпущена библиотека Paging RxJava2 1.0.1, которая идентична 1.0.0-rc1.

Исправление ошибок

  • Исправлены сбои, при которых PagedListAdapter и AsyncPagedListDiffer не могли сигнализировать о событиях перемещения. b/110711937

WorkManager

Выпущен WorkManager 1.0.0-alpha04.

Исправление ошибок

  • Теперь при использовании реализации на основе AlarmManager PeriodicWorkRequests переносятся корректно.

  • Исправлена потенциальная ошибка ANR при перепланировании всех рабочих процессов после принудительной остановки или перезагрузки. b/110507716

  • В различные API WorkManager добавлены аннотации о допустимости значения NULL. b/110344065

  • Регистрировать необработанные исключения, возникающие во время выполнения Worker. b/109900862

  • Разрешены деструктивные переносы баз данных на случай, если вы решите вернуться к более старой версии WorkManager. b/74633270

  • Устранена причина сбоя, возникавшего при создании дубликатов неявных тегов. Это очень редкая проблема, которая возникала, только если вы сами использовали тот же формат неявных тегов.

19 июня 2018 г.

Комната

Бронирование переговорной комнаты "1.1.1" отменено. Этот выпуск идентичен выпуску Room 1.1.1-rc1.

WorkManager

Выпущен WorkManager 1.0.0-alpha03.

Исправление ошибок

  • Исправлено состояние гонки в реализации на основе AlarmManager. b/80346526.

  • Исправлена ошибка, из-за которой при использовании JobScheduler после перезагрузки устройства создавались дублирующиеся задания.

  • Задания с триггерами URI контента теперь сохраняются после перезагрузки. b/80234744

  • Обновлена документация. b/109827628, b/109758949, b/80230748

  • Исправлена ошибка, возникающая при повторной постановке WorkRequest в очередь. b/109572353.

  • Исправлены предупреждения компилятора Kotlin при использовании зависимости work-runtime-ktx.

  • WorkManager теперь использует Room версии 1.1.1-rc1.

Изменения в API

  • Добавлен метод getStatusesSync(), синхронная версия WorkContinuation.getStatuses().

  • Worker может различать отмену, инициированную пользователем, и временную остановку по запросу ОС. Worker.isStopped() возвращает true, если был запрошен любой тип остановки. Worker.isCancelled() возвращает true, когда работа была явно отменена. b/79632247

  • Добавлена поддержка JobParameters#getNetwork() в API 28. Для этого используется Worker.getNetwork().

  • Добавлено правило Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit), позволяющее ограничить количество заданий, которые можно отправить на JobScheduler или AlarmManager. Это позволяет избежать ситуации, когда WorkManager занимает все доступные слоты JobScheduler.

  • Добавлен параметр Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId), который помогает определить диапазон идентификаторов заданий JobScheduler, безопасных для использования в WorkManager. b/79996760

  • Worker.getRunAttemptCount() возвращает текущее количество запусков для заданного Worker. b/79716516

  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) позволяет ставить в очередь уникальные PeriodicWorkRequest. b/79600647

  • WorkManager.cancelAllWork() отменяет все Worker. Библиотеки, зависящие от WorkManager, могут запрашивать время последнего вызова этого метода с помощью WorkManager.getLastCancelAllTimeMillis() для дополнительной очистки внутреннего состояния.

  • Добавлен параметр WorkManager.pruneWork(), позволяющий удалять выполненные задания из внутренней базы данных. b/79950952, b/109710758

Изменения в поведении

  • Добавлен неявный тег для всех WorkRequest, который является полным именем класса для Worker. Это позволяет удалять WorkRequest без tag или когда id недоступен. b/109572351

Критические изменения

  • Название "Worker.WorkerResult" изменено на "Worker.Result".

  • В Worker.onStopped теперь есть дополнительный параметр isCancelled, который принимает значение true, когда Worker явно отменяется.

7 июня 2018 г.

Навигация 1.0.0-alpha02 выпущена.

Изменения в поведении

  • Теперь в доме "FragmentNavigator" используется setReorderingAllowed(true). b/109826220

  • Теперь Navigation декодирует URL аргументов, полученных из URL ссылок на контент. b/79982454

Исправление ошибок

  • Исправлена ошибка IllegalStateException, возникавшая при вызове навигации из методов жизненного цикла фрагмента. b/79632233

  • Для устранения мерцания при использовании анимации Navigation теперь зависит от Support Library 27.1.1. b/80160903

  • Исправлена ошибка IllegalArgumentException, возникавшая при использовании defaultNavHost="true" в качестве дочернего фрагмента. b/79656847

  • Исправлена ошибка StackOverflowError при использовании NavDeepLinkBuilder. b/109653065

  • Исправлена ошибка IllegalArgumentException, возникавшая при возврате к вложенному графу. b/80453447

  • Исправлена проблема с перекрывающимися фрагментами при использовании launchSingleTop. b/79407969

  • Теперь Navigation создает правильный синтетический обратный стек для вложенных графов. b/79734195

  • NavigationUI теперь выделяет правильный элемент при использовании вложенного графа в качестве MenuItem. b/109675998

Изменения в API

  • Атрибут clearTask для действий и связанный с ним API в NavOptions больше не поддерживаются. b/80338878

  • Атрибут launchDocument для действий и связанный с ним API в NavOptions больше не поддерживаются. b/109806636

24 мая 2018 г.

Выпущен WorkManager 1.0.0-alpha02.

WorkManager

Исправление ошибок

  • Устранено исключение NullPointerException в классе State.isFinished(). b/79550068

  • Исправлена ошибка, из-за которой Worker переносились на Application.onCreate(). b/79660657

  • Исправлена ошибка, из-за которой можно было запланировать больше задач, чем разрешено ОС. b/79497378

  • Очистка запретов блокировки, связанных с Worker, перенесена в фоновый поток.

  • Теперь реализация AlarmManager корректно очищает данные, когда вся ожидающая работа завершена.

  • Исправлены SQL-запросы на очистку, которые влияли на неанглоязычные регионы. b/80065360

  • Добавлена поддержка float в Data. b/79443878

  • Data.Builder.putAll() теперь возвращает экземпляр Builder. b/79699162

  • Добавлены комментарии Javadoc и исправлены ошибки в документации. b/79691663

Изменения в API

  • Worker может реагировать на остановку. Worker.isStopped() можно использовать, чтобы проверить, остановлен ли Worker. Worker.onStopped() можно использовать для выполнения простых операций очистки.

  • Worker.getTags() API возвращает Set тегов, связанных с Worker.

  • Добавлены перегрузки javax.time.Duration для API, которые принимают комбинацию длительности и TimeUnit. Это защищено @RequiresApi(26).

  • WorkManager расширение перенесено из пакета androidx.work.ktx в пакет androidx.work. Старые расширения больше не поддерживаются и будут удалены в одной из следующих версий.

  • Configuration.withExecutor() больше не поддерживается. Используйте вместо него Configuration.setExecutor().

16 мая 2018 г.

Выпущены Paging RxJava2 1.0.0-rc1 и Room 1.1.1-rc1. Если вы используете миграции, мы настоятельно рекомендуем использовать Room 1.1.1-rc1 вместо 1.1.0.

Комната

Исправлена ошибка, из-за которой Room не обрабатывал инициализацию после переноса (b/79362399).

Страницы

Paging rxjava2 переходит в статус релиз-кандидата без изменений по сравнению с первоначальной альфа-версией.

8 мая 2018 г.

Paging 1.0, альфа-версии Navigation и WorkManager, Room 1.1, AndroidX

Выпущены Paging 1.0.0 и Room 1.1.0, а также альфа-версии двух новых компонентов архитектуры – Navigation и WorkManager.

В Paging и Room нет изменений с момента выхода последних релиз-кандидатов.

Новая библиотека: Navigation

Navigation – фреймворк для создания навигации в приложении. Первая версия – 1.0.0-alpha01.

Новая библиотека: WorkManager

WorkManager упрощает планирование и выполнение гарантированных фоновых задач с учетом ограничений. Первая версия – 1.0.0-alpha01.

AndroidX

Компоненты архитектуры переносятся в AndroidX. При этом обновляются названия пакетов, артефактов и зависимостей от других библиотек AndroidX. Они выпускаются в версии 2.0.0-alpha1 для использования в сочетании с другими библиотеками AndroidX.

Расширения Kotlin

В альфа-версию AndroidX добавлены библиотеки расширений Kotlin для ViewModel, ReactiveStreams и Sqlite (ранее – компонент Database в Room). Кроме того, Navigation и WorkManager включают модули -ktx. Каждый из этих модулей расширения можно найти в разделе Добавление компонентов.

2 мая 2018 г.

  • Релиз-кандидат Room 1.1.0
  • Бронирование переговорной комнаты "1.1.0-rc1" отменено.

Исправление ошибок

  • Room теперь совместим с Kotlin 1.2.40. b/78328708

19 апреля 2018 г.

Релиз-кандидат Paging

Пейджинг 1.0.0-rc1 и комната 1.1.0-beta3 освобождены.

Страницы

У нас нет других известных проблем или новых функций, запланированных для выпуска Paging 1.0.0. Обновите свои проекты, чтобы использовать 1.0.0-rc1, и помогите нам протестировать эту версию, чтобы мы могли выпустить надежную 1.0.0.

В этом выпуске нет изменений, он такой же, как 1.0.0-beta1.

Комната

Исправление ошибок

  • Исправлена ошибка компиляции, возникавшая, когда POJO-класс Kotlin ссылался на объект отношения, определенный в Java b/78199923.

5 апреля 2018 г.

Выпущены Room 1.1.0-beta2, Paging 1.0.0-beta1 и Paging RxJava 1.0.0-alpha1.

Библиотека Paging будет находиться в бета-версии в течение короткого времени, прежде чем перейти к релиз-кандидату. Мы не планируем дальнейших изменений API для Paging 1.0, и планка для любых изменений API очень высока.

Альфа-версия RxJava2 с поддержкой Paging выпущена как отдельный необязательный модуль (android.arch.paging:rxjava2:1.0.0-alpha1). Пока она не станет стабильной, у нее будет отдельная версия.

Эта новая библиотека предоставляет альтернативу RxJava2 для LivePagedListBuilder, способную создавать Observable и Flowable, принимая Scheduler вместо 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();

Страницы

Новые функции

  • RxPagedListBuilder добавляется через новый артефакт android.arch.paging:rxjava2.

Изменения в API

  • Изменения в API, уточняющие роль исполнителей в сборщиках:

    • Название "setBackgroundThreadExecutor()" изменено на "setFetchExecutor()" (в PagedList.Builder и LivePagedListBuilder)

    • Название файла "setMainThreadExecutor()" изменено на "setNotifyExecutor()" (в папке "PagedList.Builder").

  • Доступ к элементу PagedList.mCallbacks ограничен.

Исправление ошибок

  • LivePagedListBuilder запускает начальную загрузку PagedList в указанном исполнителе, а не в пуле потоков ввода-вывода компонентов архитектуры.

  • Исправлено поведение аннулирования во внутренних оболочках DataSource (используется для реализации DataSource.map, а также загрузки PositionalDataSource с отключенным плейсхолдером) b/77237534.

Комната

Исправление ошибок

  • Исправлена критическая ошибка в реализациях Rx Single и Maybe в Room, из-за которой запрос перезапускался раньше времени. Это приводило к проблемам, если вы добавляли более одного наблюдателя к возвращенным экземплярам Single или Maybe. b/76031240

  • RoomDatabase.clearAllTables не будет VACUUM базу данных, если вызывается внутри транзакции. b/77235565

21 марта 2018 г.

Выпущены Room 1.1.0-beta1, Paging 1.0.0-alpha7 и Lifecycles 1.1.1.

Комната

Изменения в API

  • По результатам проверки API метод @RawQuery больше не принимает String в качестве параметра запроса. Вам нужно использовать SupportSQLiteQuery. (см. SimpleSQLiteQuery, чтобы легко создать экземпляр SupportSQLiteQuery с поддержкой аргументов).
  • Метод fallbackToDestructiveMigrationFrom в RoomDatabase.Builder теперь принимает vararg int вместо vararg Integer.

Исправление ошибок

  • RoomDatabase.clearAllTables теперь пытается вернуть место операционной системе, устанавливая контрольную точку WAL и выполняя команду VACUUM для базы данных.

  • @RawQuery теперь принимает любой объект POJO для свойства observedEntities, если POJO ссылается на один или несколько объектов через свои поля Embedded или Relation. b/74041772

  • Paging: реализация DataSource в Room теперь корректно обрабатывает зависимости между несколькими таблицами (например, отношения и соединения). Ранее такие запросы не приводили к получению новых результатов или не компилировались. b/74128314

Жизненные циклы

Есть только одно небольшое изменение: android.arch.core.util.Function перенесено с arch:runtime на arch:common. Это позволяет использовать его без зависимости от среды выполнения, например в paging:common ниже.

lifecycle:common – это зависимость lifecycle:runtime, поэтому изменение не влияет на lifecycle:runtime напрямую, а только на модули, которые напрямую зависят от lifecycle:common, как Paging.

Страницы

Библиотека Paging 1.0.0-alpha7 выпущена вместе с Lifecycles 1.1.1. Поскольку Paging alpha7 зависит от перемещения класса Function, упомянутого выше, вам нужно будет обновить зависимость lifecycle:runtime до android.arch.lifecycle:runtime:1.1.1.

Paging alpha7 планируется как финальный выпуск перед бета-версией.

Изменения в API

  • Объекты DataSource.LoadParams теперь имеют общедоступный конструктор, а объекты DataSource.LoadCallback стали абстрактными. Это позволяет упаковать DataSource или напрямую протестировать DataSource с помощью макета обратного вызова. b/72600421
  • Преобразователи для DataSource и DataSource.Factory
    • map(Function<IN,OUT>) позволяет преобразовывать, упаковывать или оформлять результаты, загруженные с помощью DataSource.
    • mapByPage(<List<IN>,List<OUT>>) позволяет делать то же самое для пакетной обработки (например, если для объектов, загруженных из SQL, требуется дополнительно запросить отдельную базу данных, это можно сделать в виде пакета).
  • Добавлен метод PagedList#getDataSource(). b/72611341
  • Из API удалены все устаревшие классы, включая остатки пакета recyclerview.extensions и LivePagedListProvider.
  • DataSource.Factory теперь является не интерфейсом, а абстрактным классом, что позволяет использовать функции карт.

Исправление ошибок

  • Классы Builder теперь являются финальными. b/70848565
  • Реализация Room DataSource теперь исправлена для обработки запросов к нескольким таблицам. Это исправление содержится в Room 1.1.0-beta1, см. выше.
  • Исправлена ошибка, из-за которой BoundaryCallback.onItemAtEndLoaded не вызывался для PositionalDataSource, если плейсхолдеры включены, а общий размер кратен размеру страницы.

2 марта 2018 г.

Бронирование переговорной комнаты "1.1.0-alpha3" отменено. Это последний запланированный альфа-выпуск для Room 1.1.0.

Изменения в API

  • Методы addObserver и removeObserver класса InvalidationTracker теперь синхронные и должны вызываться в потоке, отличном от потока UI. Это предотвращает некоторые состояния гонки при наблюдении за таблицами.

  • В класс RoomDatabase добавлен новый метод clearAllTables(), который усекает содержимое всех таблиц. b/63807999

  • В SupportSQLiteQuery теперь есть метод getArgCount(), который возвращает количество параметров запроса. b/67038952

Исправление ошибок

  • Теперь @RawQuery корректно поддерживается для запросов Paging. b/72600425

  • Теперь Room правильно называет сгенерированные классы Dao, чтобы избежать конфликтов имен, когда два или более интерфейсов Dao являются внутренними классами в одном пакете и имеют одинаковое имя. b/73536380

  • Общие типы полей в Pojo правильно анализируются как элементы расширяющего класса. b/73534868

  • Параметры запроса в интерфейсах Dao, унаследованные от артефактов зависимостей, теперь анализируются правильно. b/68118746

  • Запросы, созданные для @Relation, теперь правильно экранируют названия полей. b/70925483

27 февраля 2018 г.

Библиотека Paging 1.0.0-alpha6 выпущена вместе с библиотекой поддержки версии 27.1.0. ListAdapter и несколько связанных классов были перенесены из библиотеки Paging непосредственно в Recyclerview. Кроме того, некоторые классы были переименованы, чтобы их назначение стало понятнее. Эта альфа-версия разбивки на страницы, скорее всего, последняя, в которой есть значительные критические изменения API.

Изменения в API

  • Классы, перенесенные в recyclerview-v7:
    • ListAdapter
  • Классы, которые были переименованы и перенесены в recyclerview-v7:
    • ListAdapterHelper -> AsyncListDiffer
    • ListAdapterConfig -> AsyncDifferConfig
    • DiffCallback -> DiffUtil.ItemCallback
  • Классы, переименованные в paging-runtime:
    • PagedListAdapterHelper -> AsyncPagedListDiffer

Перемещенные классы были полезны вместе с RecyclerView, независимо от библиотеки Paging. Это означает, что их можно использовать без зависимости от альфа-версии Paging, но также означает, что приложения, использующие Paging, должны одновременно обновиться до Alpha 6 и Support Library 27.1.0.

** Руководство по переходу на Paging Alpha6: **

  • Обновите зависимости paging и recyclerview до версий android.arch.paging:runtime:1.0.0-alpha6 и com.android.support:recyclerview-v7:27.1.0.
    • Это нужно сделать одновременно, так как ListAdapter был перемещен из Paging в RecyclerView.
  • Замените все упоминания ListAdapterHelper на AsyncListDiffer.
    • getItem(index)/getItemCount() удалены. Вместо них рекомендуется использовать более понятные getCurrentList().getItem(index) и getCurrentList().size().
  • Замените все упоминания ListAdapterConfig на AsyncDifferConfig.
  • Замените все упоминания DiffCallback на DiffUtil.IttemCallback.
  • Замените все упоминания PagedListAdapterHelper на AsyncPagedListDiffer.
  • Обновите ссылки с setList() на submitList().
    • переименовано, чтобы уточнить асинхронный характер сравнения списков

Исправление ошибок

  • Исправлена передача неверной начальной позиции в начальную загрузку, когда плейсхолдеры отключены. b/73513780

15 февраля 2018 г.

Бронирование переговорной комнаты "1.1.0-alpha2" отменено.

Новые функции

  • Теперь Room поддерживает открытие базы данных в режиме журналирования с упреждающей записью. В этом режиме операции записи больше не будут блокировать запросы на чтение. Хотя в этом режиме расходуется больше памяти (из-за нескольких подключений), обычно он работает быстрее. По умолчанию Room будет использовать WAL, если на устройстве установлена ОС API 16 или более поздней версии и оно не относится к устройствам с малым объемом памяти. Вы можете управлять этим поведением с помощью метода setJournalMode() в RoomDatabase.Builder. b/67757002

  • Поддержка Guava. Room теперь поддерживает возврат Guava Optional<T> или ListenableFuture<T> в запросах DAO. Чтобы использовать ListenableFuture<T>, необходимо импортировать артефакт guava из Room (android.arch.persistence.room:guava:1.1.0-alpha2).

  • Теперь Room поддерживает возврат java.util.Optional<T> из запросов DAO.

  • Методы интерфейса с реализациями по умолчанию теперь поддерживаются в методах @Transaction в классах DAO. Это работает как для Java 8, так и для Kotlin. b/72416735

Исправление ошибок

  • Конструкторы с @Relation не вызовут ошибку компиляции, если есть другой конструктор, который можно использовать. b/72884434

  • Названия таблиц, экранированные с помощью ' в методах @Query, теперь правильно экранируются для отслеживания недействительности. b/72366965

  • Теперь Room использует аннотации Kotlin @Metadata для чтения структуры классов во время обработки аннотаций. Это означает, что даже если POJO наследуется от зависимости, имена параметров его конструктора могут быть прочитаны правильно. b/67181813

  • Исправлена ошибка, из-за которой не удавалось найти пути переноса при переходе на более раннюю версию. b/72153525

  • Типы столбцов, не используемые по умолчанию, теперь правильно обрабатываются при переносе из существующей базы данных в Room. b/71953987

  • Room теперь правильно обрабатывает сохраняемые поля boolean? в классах Kotlin. b/72786402

22 января 2018 г.

Выпущены Lifecycles 1.1.0, Room 1.1.0-alpha1 и Paging 1.0.0-alpha5.

Lifecycle 1.1.0

Изменения в пакетах

Теперь доступны новые, гораздо меньшие зависимости:

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

Изменения в API

  • Устаревшие поля LifecycleActivity и LifecycleFragment удалены. Используйте FragmentActivity, AppCompatActivity или Fragment.
  • В аккаунты "ViewModelProviders" и "ViewModelStores" добавлено @NonNull заметок.
  • Конструктор ViewModelProviders больше не поддерживается. Используйте его статические методы напрямую.
  • Поддержка ViewModelProviders.DefaultFactory прекращена. Используйте ViewModelProvider.AndroidViewModelFactory.
  • Добавлен статический метод ViewModelProvider.AndroidViewModelFactory.getInstance(Application), который позволяет получить статический объект Factory, подходящий для создания экземпляров ViewModel и AndroidViewModel.

Room 1.1.0-alpha1

Новые функции

  • RawQuery. Этот новый API позволяет методам @Dao получать SQL в качестве параметра запроса. b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom. Этот новый API в RoomDatabase.Builder позволяет точнее контролировать, с каких начальных версий схемы разрешены деструктивные переносы (по сравнению с fallbackToDestructiveMigration). b/64989640
  • Room теперь поддерживает только новые API Paging (alpha-4+), а поддержка устаревшего LivePagedListProvider прекращена. Чтобы использовать новую альфа-версию Room, вам понадобится библиотека Paging версии alpha-4 или выше. Если вы ещё не перешли с LivePagedListProvider на LivePagedListBuilder, сделайте это.

Исправление ошибок

  • Улучшена поддержка типов Kotlin Kapt. b/69164099
  • Порядок полей больше не влияет на действительность схемы. b/64290754

Paging 1.0.0-alpha5

Исправление ошибок

  • Исправлена загрузка страницы, когда плейсхолдеры отключены b/70573345
  • Дополнительное ведение журнала для отслеживания ошибки IllegalArgumentException b/70360195 (и возможное исправление на стороне Room).
  • Исправлены ошибки в образце кода Javadoc b/70411933, b/71467637.

11 декабря 2017 г.

Выпущена библиотека Paging alpha4-1. Это небольшой выпуск с исправлением ошибок для альфа-версии 4 библиотеки Paging.

Исправление ошибок

  • Параметры обратного вызова не проверяются на наличие недопустимых источников данных. b/70353706, b/70360195

7 декабря 2017 г.

Выпущена библиотека Paging alpha4 со значительными изменениями и дополнениями, в основном ориентированными на сеть и сценарии использования сети и базы данных.

Изменения в API

  • DataSource теперь является асинхронным API, что упрощает разбиение на страницы непосредственно из сети:

    • Единая точка входа для начального размера и данных
    • Поддерживает повторную попытку подключения к сети, удерживая обратный вызов и отправляя его позже.
    • Потокобезопасные обратные вызовы позволяют выполнять асинхронную загрузку для создания одного объекта PagedList, поддерживаемого сетью, в потоке UI.
    • Более понятные сообщения об ошибках, связанных с параметрами начальной загрузки.
  • TiledDataSource переименован в PositionalDataSource, чтобы отразить индексацию на основе позиции и тот факт, что он не разбивается на фрагменты, когда плейсхолдеры отключены.

  • PageKeyedDataSource добавлено для поддержки токенов "следующий/предыдущий", встроенных в загрузки страниц сети. KeyedDataSource переименован в ItemKeyedDataSource, чтобы разница была понятна.

  • LivePagedListBuilder и DataSource.Factory заменяют LivePagedListProvider. Конструктор предоставляет те же возможности, но с большим количеством настроек и более простыми настройками по умолчанию. Фабрика позволяет коду генерации DataSource оставаться независимым от LiveData.

  • Добавлено PagedList.BoundaryCallback для сценария использования базы данных и сети.

  • Конструктор PagedList.Builder принимает DataSource + PagedList.Config, теперь он больше похож на LivePagedListBuilder и позволяет использовать оператор diamond в Java или выведенные типы в Kotlin.

  • Добавлена функция PagedList.getConfig(), а у PagedList.Config теперь есть общедоступные свойства участников.

  • KeyedDataSource.loadBefore() больше не ожидает отмены результатов.

  • Добавлен метод PagedListAdapter.onCurrentListChanged(), который позволяет отслеживать, какой список PagedList показывается.

Исправление ошибок

  • Исправлена ошибка IndexOutOfBoundsException в PagedListAdapter(Helper) b/67883658.

1.0.0 – 6 ноября 2017 г.

Все основные компоненты (кроме Paging) теперь 1.0.0. Этот выпуск полностью совпадает с версией rc1, за исключением одного изменения в библиотеке reactivestreams.

Исправление ошибок

Релиз-кандидат – 18 октября 2017 г.

Все основные артефакты (кроме Paging) теперь имеют версию 1.0.0-rc1.

У нас нет других известных проблем или новых функций, запланированных для выпуска 1.0.0. Обновите свои проекты, чтобы использовать 1.0.0-rc1, и помогите нам протестировать эту версию, чтобы мы могли выпустить надежную 1.0.0.

Изменение поведения

  • В этом выпуске Lifecycle.Event#ON_STOP отправляется при вызове onSaveInstanceState (ранее он просто помечался как CREATED без отправки ON_STOP). Подробнее об этом можно прочитать в документации по жизненным циклам.

Исправление ошибок

  • Комната:

    • Теперь Room зависит от последней версии артефакта xerial, в которой исправлены проблемы с OutOfMemory во время компиляции. b/62473121
    • Методы Query теперь можно аннотировать с помощью @Transaction. Подробная информация приведена в справочной документации по @Transaction. b/65112315
    • Класс StringUtil в Room удален из общедоступного API (он никогда не предназначался для этого).
  • Жизненные циклы:

    • LiveData корректно работает, когда Activity частично покрыто в API < 24. b/65665621

    • Методы OnLifecycleEvent в родительских классах теперь вызываются правильно. Если это невозможно, во время компиляции выводится предупреждение. b/63474615

    • Lifecycle теперь содержит WeakReference, указывающую на LifecycleOwner. Это позволяет избежать утечки LifecycleOwner, если Lifecycle хранится в памяти дольше обычного. Это лишь мера предосторожности, поэтому вам все равно нужно следить за тем, чтобы не допустить утечки Lifecycle.

9 октября 2017 г.

Выпущена библиотека Paging alpha-3, совместимая с версией beta 2 библиотек Lifecycles и Room.

Исправление ошибок

  • Улучшена документация по Paging.

5 октября 2017 г.

Все основные артефакты (кроме Paging) теперь имеют версию beta 2. В этом выпуске нет новой версии Paging.

Исправление ошибок

  • Жизненные циклы:

    • Теперь LiveDataReactiveStreams правильно отменяет подписку на исходного издателя, когда LiveData неактивен. b/62609183
    • События жизненного цикла правильно передаются родительским классам, если родительский класс находится в другом модуле. b/63474615
    • LiveData правильно обрабатывает наблюдателей, когда они отменяют подписку во время ее создания. b/66337741
    • В дереве зависимостей теперь доступен артефакт FullLifecycleObserver для языка Java 8. b/66525578

    • Если вы используете ProGuard, добавьте в файл proguard следующие строки: (Это не потребуется, когда выйдет версия 1.0.0).

      • -keep class * implements android.arch.lifecycle.GeneratedAdapter {<init>(...);}
  • Комната:

    • Теперь Room выдает ошибку во время компиляции, если возвращенный объект Pojo в методе @Query имеет поле @NonNull, которое не соответствует ни одному из столбцов в ответе на запрос. Если поле имеет значение @Nullable, Room только выводит предупреждение. b/67115337
    • Теперь Room проверяет индексы в новых версиях ОС. b/63132683
    • Если в POJO есть несколько подходящих конструкторов, Room по умолчанию выбирает конструктор без аргументов. b/67353427
    • Первичные ключи с одним столбцом могут быть Nullable, если это Integer или Long. b/67086876
    • Трекер недействительных кликов корректно обрабатывает повторный вход в тестовом режиме. b/65471397
    • Теперь Room проверяет наличие недопустимых символов в названиях столбцов и таблиц во время компиляции (недопустимые символы: `, "). b/64749111

21 сентября 2017 г.

В этом выпуске все модули компонентов архитектуры достигают как минимум beta 1 (за исключением новой библиотеки Paging Library, которая имеет версию alpha 2).

Других изменений в API не планируется. Незапланированные изменения возможны, но вероятность того, что API будет изменен до выхода стабильной версии 1.0.0, очень мала.

  • LifecycleActivity и LifecycleFragment будут удалены до выхода стабильной версии 1.0.0. Они не нужны, если вы используете библиотеку поддержки версии 26.1.0 или более поздней.

В отличие от альфа-тестирования, бета-тестирование будет очень коротким.

Изменения версий

  • Lifecycle Extensions и Room теперь beta 1
  • Разбиение на страницы: alpha 2
  • В Lifecycles (runtime, common) и Arch Core (common) изменений нет. С 13 сентября оба этих артефакта имеют версию 1.0.0.

Новые объекты

  • В жизненных циклах появился новый артефакт – common-java8. Этот артефакт содержит новый интерфейс DefaultLifecycleObserver, в котором есть реализации по умолчанию для всех методов Lifecycle. Если вы используете Java 8, рекомендуем выбрать этот артефакт, а не аннотации.

    • Из-за ошибки в beta1 вам нужно добавить явную зависимость от модуля android.arch.lifecycle:common:1.0.1, чтобы использовать новый артефакт common-java8. Эта проблема будет устранена в beta2.

Изменения в пакетах

  • android.arch.persistence.room.db перемещен, новый адрес: android.arch.persistence.db
  • Файл android.arch.persistence.room.db-impl перемещен и переименован в android.arch.persistence.db-framework.

Оба этих артефакта уже являются зависимостями Room, поэтому, если вы не использовали их напрямую, вам не нужно ничего менять в файлах сборки.

Изменения в API

  • Комната:

    • Аннотация @ColumnInfo теперь поддерживает настройку сопоставления в столбце. b/62007004
    • Поля transient теперь по умолчанию игнорируются, если они не аннотированы с помощью @ColumnInfo, @Embedded или @Relation. b/62600692
    • Первичные ключи должны быть аннотированы с помощью @NonNull, если они не создаются автоматически. b/64292391
      • Для этого может потребоваться перенос схемы. Приносим извинения за неудобства.
    • Добавлена новая аннотация (@Transaction), которая переопределяет метод DAO и запускает его внутри транзакции.
  • Поддержка базы данных SQLite:

  • Разбиение на страницы:

    • Улучшена документация по Paging, добавлено больше примеров и аннотаций потоков.

Исправление ошибок

  • Комната:
    • Многострочные строки Kotlin в методах @Query обрабатываются правильно. b/65809374
  • Разбиение на страницы:
    • Объект Paging больше не зависит от junit. b/65690261

1.0.0 Alpha 9-1 – 13 сентября 2017 г.

Это основной выпуск, в котором основные артефакты жизненного цикла (runtime, common) и arch core (common) достигают стабильной версии 1.0.0.

В связи с этим библиотека поддержки версии 26.1.0 теперь зависит от этих библиотек. AppCompatActivity и Support Fragment теперь реализуют интерфейс LifecycleOwner.

Для работы с новой интеграцией в этом выпуске также требуется библиотека поддержки 26.1.0.

Новая библиотека: Paging

В этот выпуск также включена новая библиотека Paging, которая позволяет легко загружать большие наборы данных в RecyclerView по частям, когда это необходимо. Paging выпускается как alpha1 и будет иметь собственный цикл выпуска.

Изменения в API

Исправление ошибок

  • Сгенерированные классы теперь аннотируются с помощью @Generated, если в приложении есть аннотация в пути к классу. b/35754819

  • Исправлена ошибка сравнения наблюдателей MediatorLiveData. b/64413274

  • Запросы SQLite WITH теперь поддерживаются с [LiveData]. [ref-LiveData] b/62510164

  • Исправлена ошибка, из-за которой InvalidationTracker не отправлял правильный список, если наблюдалось более одной таблицы. b/65099281

  • Исправлена ошибка, из-за которой Room генерировал разные файлы в Windows. b/64470691

  • Добавлена поддержка LifecycleObservers в корневом пакете. b/62310817

1.0.0 Alpha 9 – 16 августа 2017 г.

Исправление ошибок

  • Исправлена ошибка в LiveData, из-за которой второй Observer игнорировался, когда первый удалялся из своего метода onChanged. b/64285805

1.0.0 Alpha 8 – 1 августа 2017 г.

Изменения в поведении

  • Ограничение NOT NULL добавляется для столбцов примитивных типов или столбцов, аннотированных с помощью NonNull. Это меняет структуру таблиц, поэтому если вы уже используете Architecture Components alpha 7 или более раннюю версию, вам нужно выполнить перенос, чтобы сохранить данные, или использовать метод fallbackToDestructiveMigration() в конструкторе. b/62007004

Изменения в API

1.0.0 Alpha 7 – 26 июля 2017 г.

Исправление ошибок

  • Исправлена критическая ошибка в методе LifecycleRegistry removeObserver, которая нарушала повторное добавление LifecycleObserver.

  • Исправлена ошибка InvalidationTracker для пользовательских баз данных b/63162311.

1.0.0 Alpha 6 – 25 июля 2017 г.

Изменения в поведении

  • Изменен порядок вызовов LifecycleObserver. Ранее наблюдатели всегда вызывались в порядке их добавления: если observer1 добавляется до observer2, он получит ON_CREATE и все остальные события до observer2. Для событий уничтожения это больше не так: наблюдатели вызываются в порядке, обратном порядку добавления. Сейчас это работает так: если observer1 добавляется до observer2, то ON_CREATE сначала отправляется в observer1, а затем в observer2 (то же самое происходит для ON_START и ON_RESUME), но событие ON_PAUSE сначала отправляется в observer2 и только потом в observer1 (то же самое для ON_STOP и ON_DESTROY).

  • Если перенос отсутствует, Room выдает исключение. Раньше Room просто очищал базу данных, а теперь происходит сбой. Разработчики могут включить очистку, вызвав API builder. b/63872392

Изменения в API

  • Добавлен метод fallbackToDestructiveMigration() в RoomDatabase.Builder, чтобы очищать базу данных, если перенос не выполняется. b/63872392

  • Компоненты архитектуры теперь зависят от библиотеки поддержки версии 26.0.0.

Исправление ошибок

  • Исправлена обработка @Relation, вложенного в @Embedded. b/63736065

  • Исправлено тестирование переноса таблиц с автоматически увеличивающимся первичным ключом. b/63393618

  • Теперь запросы @Queries, которые выполняют запросы DELETE или UPDATE, правильно получают аргументы. b/63872538

  • Теперь ViewModels сохраняются, когда фрагмент владельца находится в стеке возврата и изменение конфигурации происходит дважды. b/38445801

1.0.0 Alpha 5 – 18 июля 2017 г.

Изменения в API

  • Добавлен новый метод обратного вызова в RoomDatabase.Builder, позволяющий отслеживать создание и открытие базы данных. b/62699324

  • @Query теперь может возвращать RxJava Maybe или Single. b/62231019

Чтобы добавить поддержку RxJava в Room, необходимо использовать артефакт android.arch.persistence.room:rxjava2.

Исправление ошибок

  • Исправлена ошибка, из-за которой запросы @Delete не содержали параметров. b/63608092

  • Исправлены проверки типов Room для геттеров и сеттеров. b/63733651

1.0.0 Alpha 4 – 11 июля 2017 г.

Изменения в API

  • В RoomDatabase добавлен новый удобный метод (runInTransaction()).

  • Методы @Insert, @Delete и @Update теперь могут иметь параметры разных типов объектов. b/62682405

Исправление ошибок

  • Исправлена обработка byte[] в методах @Dao. b/62460045

  • Проверка переноса в Room теперь выполняется без учета регистра. b/62875382

  • Исправлена конфигурация ProGuard для артефакта Lifecycles. b/62113696

1.0.0 Alpha 3 – 15 июня 2017 г.

Изменения в API

  • @OnLifecycleEvent сейчас поддерживает только один параметр события. Это изменение связано с подготовкой к поддержке Java 8, чтобы в будущем мы могли перейти на интерфейсы с методами по умолчанию. В связи с этим изменением только методы, аннотированные с помощью @OnLifecycleEvent(ON_ANY), могут получать второй параметр типа Event (первый параметр – LifecycleOwner). Подробную информацию можно найти в документации по жизненному циклу.

  • Классы LifecycleActivity и LifecycleFragment перемещены в артефакт android.arch.lifecycle:extensions.

  • MigrationTestHelper получает экземпляр Instrumentation вместо Context, чтобы иметь возможность считывать схему из тестовых объектов и создавать базу данных в контексте приложения.

  • Аннотации @Insert, @Delete и @Update в методах @DAO теперь могут иметь тип параметра Iterable. b/62259820

Исправление ошибок

  • Переопределенные методы с событиями жизненного цикла больше не вызываются несколько раз.

  • Теперь несколько параметров IN обрабатываются корректно. b/62608681

  • Абстрактные классы DAO теперь могут иметь конструктор, который получает экземпляр @Database. b/38488747

  • DAO теперь могут иметь суперкласс/интерфейс с параметрами типа. b/62103620

1.0.0 Alpha 2 – 2 июня 2017 г.

Изменения в API

Исправление ошибок

  • Файлы Proguard для жизненных циклов. (b/62113696)
  • Потеря данных при использовании преобразователей типов. (b/62100716)
  • Разрешить возвращать Long[] из запросов @Insert.

1.0.0 Alpha 1 – 17 мая 2017 г.

MinSDK: 14

Общие рекомендации

  • Хотя мы провели множество тестов перед запуском, компоненты архитектуры сейчас находятся на стадии альфа-тестирования. Если вы создаете рабочее приложение, имейте в виду, что API будет изменен до выпуска версии 1.0 и может работать нестабильно. Если вы не хотите отлаживать проблемы в используемых библиотеках, рекомендуем сначала попробовать компоненты архитектуры в сторонних проектах.

  • Мы не рекомендуем всем переходить на новую версию прямо сейчас. К выпуску версии 1.0 компонентов архитектуры мы подготовим руководство по переносу.

Известные ограничения и проблемы