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теперь используется зависимостьRoom1.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вместо допустимого значения NULLBundle. 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
Критические изменения
OnNavigatedListenerhas been renamed toOnDestinationChangedListenerb/118670572OnDestinationChangedListenerтеперь также передаетBundleаргументов. aosp/837142- Удалены атрибуты
app:clearTaskиapp:launchDocumentи связанные с ними методы. Используйтеapp:popUpToс корнем графа, чтобы удалить все пункты назначения из обратного стека. b/119628354 ActivityNavigator.Extrasтеперь использует шаблонBuilderи позволяет устанавливать любые флагиIntent.FLAG_ACTIVITY_. aosp/828140NavController.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больше не принимаетContextaosp/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сCANCELLEDStateво времяListenableWorker.onStopped(). - Считать
nullResultошибками в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. - Попытка вызвать
initializeWorkManagerболее одного раза за процесс теперь приведет к ошибке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. - Попытка вызвать
initializeWorkManagerболее одного раза за процесс теперь приведет к ошибке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, теперь поддерживают типы возвращаемых значений RxCompletable,Single<T>иMaybe<T>. b/63317956 - Неизменяемые типы с
@Relation. Ранее для Room требовалось, чтобы поля с аннотацией@Relationбыли настраиваемыми, но теперь они могут быть параметрами конструктора. enableMultiInstanceInvalidation– новый API вRoomDatabase.Builder, который позволяет аннулировать несколько экземпляров RoomDatabase, использующих один и тот же файл базы данных. Этот механизм аннулирования нескольких экземпляров также работает в нескольких процессах. b/62334005fallbackToDestructiveMigrationOnDowngrade– новый API вRoomDatabase.Builder, который автоматически заново создает базу данных в случае понижения версии. b/110416954ignoredColumns– новый 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.
Новые функции
- Теперь поддерживаются переходы с общими элементами для пунктов назначения Fragment и Activity b/79665225. Подробнее о том, как реализовать навигацию с помощью компонента Navigation Architecture…
- При выборе элемента в
NavigationViewтеперь закрывается любой содержащий его нижний экран b/112158843.
Изменения в API
- Критическое изменение. Метод Navigator
navigate()теперь принимает параметрNavigator.Extras. - Метод
getGraph()класса NavController теперьNonNullb/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 добавлены дополнительные аннотации
NonNullb/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станетsetDemoControllerIndexb/79995048. - Например,
action_show_settingsстанетactionShowSettingsb/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.
Исправление ошибок
Теперь при использовании реализации на основе
AlarmManagerPeriodicWorkRequests переносятся корректно.Исправлена потенциальная ошибка 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/79996760Worker.getRunAttemptCount()возвращает текущее количество запусков для заданногоWorker. b/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)позволяет ставить в очередь уникальныеPeriodicWorkRequest. b/79600647WorkManager.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/79443878Data.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/76031240RoomDatabase.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/74041772Paging: реализация 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->AsyncListDifferListAdapterConfig->AsyncDifferConfigDiffCallback->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.0android.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/71458963fallBackToDestructiveMigrationsFrom. Этот новый 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.
Исправление ошибок
- В
LiveDataReactiveStreamsтеперь правильно реализована спецификация Reactive Streams. b/67999342
Релиз-кандидат – 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 (он никогда не предназначался для этого).
- Теперь Room зависит от последней версии артефакта xerial, в которой исправлены проблемы с
Жизненные циклы:
LiveDataкорректно работает, когда Activity частично покрыто в API < 24. b/65665621Методы
OnLifecycleEventв родительских классах теперь вызываются правильно. Если это невозможно, во время компиляции выводится предупреждение. b/63474615Lifecycle теперь содержит
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
- Теперь Room выдает ошибку во время компиляции, если возвращенный объект Pojo в методе
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:
- Изменения API в конфигурации базы данных. b/65349673 b/65499876
Разбиение на страницы:
- Улучшена документация по Paging, добавлено больше примеров и аннотаций потоков.
Исправление ошибок
- Комната:
- Многострочные строки Kotlin в методах
@Queryобрабатываются правильно. b/65809374
- Многострочные строки Kotlin в методах
- Разбиение на страницы:
- Объект 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
- SupportSQLiteProgram теперь расширяет AutoCloseable. b/63131997
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/38488747DAOтеперь могут иметь суперкласс/интерфейс с параметрами типа. b/62103620
1.0.0 Alpha 2 – 2 июня 2017 г.
Изменения в API
Обратный вызов InvalidationTracker теперь получает список измененных названий таблиц. (b/38468740)
Уменьшена поверхность API класса SupportSQLiteDatabase. (b/38481640)
Исправление ошибок
- Файлы Proguard для жизненных циклов. (b/62113696)
- Потеря данных при использовании преобразователей типов. (b/62100716)
- Разрешить возвращать
Long[]из запросов@Insert.
1.0.0 Alpha 1 – 17 мая 2017 г.
MinSDK: 14
Общие рекомендации
Хотя мы провели множество тестов перед запуском, компоненты архитектуры сейчас находятся на стадии альфа-тестирования. Если вы создаете рабочее приложение, имейте в виду, что API будет изменен до выпуска версии 1.0 и может работать нестабильно. Если вы не хотите отлаживать проблемы в используемых библиотеках, рекомендуем сначала попробовать компоненты архитектуры в сторонних проектах.
Мы не рекомендуем всем переходить на новую версию прямо сейчас. К выпуску версии 1.0 компонентов архитектуры мы подготовим руководство по переносу.
Известные ограничения и проблемы
- Жизненный цикл.
FragmentиActivityCompatв библиотеке поддержки пока не реализуют интерфейсLifecycleOwner. Они будут доступны, когда компоненты архитектуры достигнут версии 1.0.0.