Arquivo de notas da versão de Componentes de arquitetura

15 de janeiro de 2019

WorkManager

Lançamento do WorkManager 1.0.0-beta02. Essa versão contém algumas correções de bugs.

Correções de bugs

  • Corrigido um caso extremo em que o trabalho periódico podia ser executado mais de uma vez por intervalo em dispositivos com Android 6.0 (API nível 23). b/121998363 (todos os links do rastreador de problemas estão em inglês)
  • Corrigida uma ConcurrentModificationException em dispositivos com Android 5.1 (API de nível 22) ou anterior. b/121345393 (link em inglês).
  • Corrigida execução incorreta do trabalho quando Constraints não eram cumpridas em dispositivos com Android 5.1 (API nível 22) ou anterior. b/122578012 (link em inglês).
  • Otimizado manuseio da conclusão do trabalho para ganhar agilidade em alguns casos extremos. b/122358129 (link em inglês).
  • Adicionada uma alteração para solucionar possíveis disputas entre várias instâncias de LiveData usadas pelo WorkManager.
  • Mudança para usar a dependência Room1.1.1 em vez de 1.1.1-rc01. Essas versões são idênticas. b/122578011

19 de dezembro de 2018

WorkManager

Lançamento do WorkManager 1.0.0-beta01. Essa versão não tem mudanças de API. Futuramente, espera-se que o WorkManager continue com a API estável até a próxima versão, a não ser que ocorra um problema crítico. Essa versão contém algumas correções de bugs.

Correções de bugs

  • Os filhos cancelados anteriormente do trabalho pai concluído não serão mais executados. b/120811767
  • Inicialização adequada da geração de registros de classes (exibidos principalmente durante testes).

18 de dezembro de 2018

Lançamento de Navigation 1.0.0-alpha09. Esta versão contém mudanças importantes da API. Consulte a seção Alterações interruptivas abaixo.

Optamos por não continuar o desenvolvimento do artefato android.arch.navigation:navigation-testing. Embora ele tenha se mostrado útil nos testes internos do NavController, é altamente recomendável usar estratégias de teste alternativas, como a simulação da instância NavController, para verificar se as chamadas navigate() corretas estão sendo feitas. Essa abordagem é discutida em detalhes na palestra Atividade Única no Conferência de Desenvolvedores Android 2018 (vídeo em inglês), e trabalharemos em outra documentação, especificamente com relação a testes com o Navigation.

Novos recursos

  • MenuItems com menuCategory="secondary" não serão mais exibidos na pilha de retorno quando usados com métodos NavigationUI. b/120104424 (link em inglês)
  • AppBarConfiguration agora permite que você defina uma instância substituta OnNavigateUpListener que será chamada quando navController.navigateUp() retornar false. (b/79993862 b/120690961, links em inglês)

Mudanças importantes

  • Ao usar um <argument> com um argType="reference", o Navigation não analisará mais a referência e fornecerá o próprio código de recurso bruto. b/111736515 (link em inglês)
  • Agora onNavDestinationSelected() retorna ao destino inicial do seu gráfico de navegação por padrão, tornando-o consistente com os métodos setup. Adicione menuCategory="secondary" ao seu MenuItem para evitar a exibição da pilha de retorno. aosp/852869 (todos os links do AOSP estão em inglês)
  • Os métodos fromBundle() das classes Args geradas agora assumem um valor Bundle não nulo em vez de um valor anulável de Bundle (aosp/845616, link em inglês)

Correções de bugs

  • Agora, os argumentos são analisados corretamente a partir dos links diretos como o argType correto, em vez de sempre como strings b/110273284
  • O Navigation agora exporta corretamente os próprios recursos públicos. b/121059552
  • O Safe Args agora é compatível com o Plug-in do Android para Gradle 3.4 Canary 4 e versões mais recentes. b/119662045

12 de dezembro de 2018

WorkManager

Lançamento do WorkManager 1.0.0-alpha13. Essa versão contém uma pequena mudança na API que será útil para alguns usuários do Kotlin.

Mudanças na API

  • androidx.work.Result foi movido para ser uma classe interna do ListenableWorker. Isso evita conflitos de refatoração com a classe Result de nível superior do Kotlin. Esta é uma mudança importante da API. b/120564418 (link em inglês).

Mudanças importantes da API

  • androidx.work.Result foi movido para ser uma classe interna do ListenableWorker.

6 de dezembro de 2018

Paging

Lançamento do Paging 2.1.0-rc01 sem mudanças de 2.1.0-beta01.

Lançamento de Navigation 1.0.0-alpha08. Esta versão contém mudanças importantes da API. Consulte a seção Alterações interruptivas abaixo.

Novos recursos

  • Os rótulos de destino, quando usados com os métodos NavigationUI, substituirão automaticamente as instâncias {argName} no seu android:label com o argumento correto b/80267266
  • O Navigation agora depende da Biblioteca de Suporte 28.0.0. (b/120293333, link em inglês)

Mudanças importantes

  • OnNavigatedListener foi renomeado para OnDestinationChangedListener b/118670572
  • OnDestinationChangedListener agora também transmite o Bundle de argumentos aosp/837142
  • Os atributos app:clearTask e app:launchDocument e os métodos associados foram removidos. Use app:popUpTo com a raiz do seu gráfico para remover todos os destinos da pilha de retorno. b/119628354
  • ActivityNavigator.Extras agora usa um padrão Builder e adiciona a capacidade de definir qualquer sinalização Intent.FLAG_ACTIVITY_ aosp/828140
  • NavController.onHandleDeepLink foi renomeado para handleDeepLink aosp/836063
  • Muitas classes e métodos que não se destinam à subclassificação, como NavOptions, NavInflater, NavDeepLinkBuilder e AppBarConfiguration, tornaram-se final aosp/835681
  • O método NavHostFragment.setGraph() obsoleto foi removido aosp/835684
  • O método NavigationUI.navigateUp(DrawerLayout, NavController) obsoleto foi removido. aosp/835684
  • A criação de fragmentos foi movida para FragmentNavigator, facilitando a delegação da criação de Fragment para um FragmentFactory. b/119054429
  • O construtor para NavGraphNavigator não usa mais um Context aosp/835340
  • NavigatorProvider agora é uma classe, não uma interface. O NavigatorProvider retornado por getNavigatorProvider() não mudou a funcionalidade. aosp/830660
  • O NavDestination.navigate() foi removido. Em vez disso, chame navigate() no Navigator. aosp/830663
  • Refatoração significativa do Navigator, removendo a necessidade de OnNavigatorNavigatedListener e, fazendo com que navigate retorne o NavDestination a que a navegação ocorreu.
  • As instâncias do Navigator não podem mais enviar eventos de exibição para o NavController. Considere usar um OnBackPressedCallback para interceptar o pressionamento do botão "Voltar" e chamar navController.popBackStack(). (aosp/833716, link em inglês)

Correções de bugs

  • popUpTo agora funciona consistentemente quando o destino é um elemento <navigation> b/116831650
  • Diversos bugs que resultavam em uma IllegalArgumentException ao usar gráficos aninhados foram corrigidos b/118713731 b/113611083 b/113346925 b/113305559
  • O atributo dataPattern de destinos <activity> agora preencherá argumentos de argumentos não String chamando toString() (b/120161365, link em inglês)

Safe Args

  • Safe Args compatível com objetos Serializable, incluindo valores Enum. Tipos Enum podem definir um valor padrão usando a enumeração literal sem o nome da classe (por exemplo, app:defaultValue="READ") b/111316353
  • O Safe Args aceita matrizes de todos os tipos compatíveis. b/111487504
  • O Safe Args agora ignora subpastas de diretórios de recursos. b/117893516
  • O Safe Args adiciona anotações @Override quando apropriado. b/117145301

5 de dezembro de 2018

WorkManager

Lançamento do WorkManager 1.0.0-alpha12. Essa versão contém mudanças importantes da API. Consulte a seção Mudanças importantes da API abaixo. Esta versão provavelmente será lançada como nossa primeira versão beta. alpha12 também contém extensas atualizações de documentação.

Mudanças na API

  • work-rxjava2, um novo artefato, apresenta RxWorker. Esse é um ListenableWorker que espera um Single<Payload>.
  • A compatibilidade com o Firebase JobDispatcher foi removida devido à suspensão de uso iminente. Isso significa que o artefato work-firebase não será mais atualizado quando passarmos para a versão Beta. Pretendemos adicionar uma alternativa no futuro.
  • Junção de Payload com Result. Result agora é uma "classe fechada" com três implementações concretas, que você pode conseguir por meio de Result.success() (ou Result.success(Data)), Result.failure() (ou Result.failure(Data)) e Result.retry(). Seus ListenableFutures agora resultam em Result em vez de Payload. Workers não têm métodos getter e setter para a saída Data. Essa é uma alteração interruptiva.
  • Adicionadas variantes Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) e Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) para oferecer melhor compatibilidade com URIs de conteúdo de acionamento lento. b/119919774 (link em inglês).
  • Adicionada variante WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration). Este método requer a API 26.
  • Adicionados métodos de extensão Kotlin Operation.await() e ListenableFuture.await().
  • A função Operation.getException() foi renomeada como Operation.getThrowable(). Essa é uma alteração interruptiva.
  • A classe ContentUriTriggers e os métodos que se referem a ela não estão mais disponíveis para uso público. Essa é uma alteração interruptiva.
  • Removido restante dos métodos varargs em WorkManager, WorkContinuation e OneTimeWorkRequest para simplificar a API. Para corrigir qualquer problema de compilação, você pode agrupar varargs já existentes com Arrays.asList(...). Também incluímos versões de argumento único de cada método. Essa é uma alteração interruptiva.
  • Removidas variantes WorkContinuation.combine(OneTimeWorkRequest, *). Elas apresentavam uma API confusa. Os métodos combine já existentes são mais compreensíveis. Essa é uma mudança importante.

Correções de bugs

  • As implementações pré-Marshmallow agora são mais confiáveis na recuperação da interrupção do processo de uma tarefa que já está em execução.
  • LiveData observados por meio de observeForever são rastreados pelo WorkManager. Essa é uma retrocompatibilidade de uma correção de biblioteca Room b/74477406 (link em inglês)
  • Data.Builder.build() agora gera uma exceção quando o objeto serializado excede ao tamanho máximo. Antes, isso só acontecia em um encadeamento em segundo plano quando não era possível gerenciar isso corretamente.
  • Maior diferenciação entre o trabalho parado e o cancelado. getWorkInfoById() retornará um WorkInfo com o CANCELLED State durante ListenableWorker.onStopped().
  • Trate null Results como falhas em ListenableWorker. b/120362353 (link em inglês)
  • Correção especulativa de Shield Tablets com a API 24, que às vezes gerava uma IllegalArgumentException. b/119484416 (link em inglês)

Mudanças importantes da API

  • A compatibilidade com o Firebase JobDispatcher foi removida devido à suspensão de uso iminente. Isso significa que o artefato work-firebase não será mais atualizado quando passarmos para a versão Beta. Pretendemos adicionar uma alternativa no futuro.
  • Junção de Payload com Result. Result agora é uma "classe fechada" com três implementações concretas, que você pode conseguir por meio de Result.success() (ou Result.success(Data)), Result.failure() (ou Result.failure(Data)) e Result.retry(). Seus ListenableFutures agora resultam em Result em vez de Payload. Workers não têm métodos getter e setter para a saída Data.
  • Adicionados métodos de extensão Kotlin Operation.await() e ListenableFuture.await().
  • Operation.getException() foi renomeado como Operation.getThrowable().
  • A classe ContentUriTriggers e os métodos que se referem a ela não estão mais disponíveis para uso público.
  • Removido restante dos métodos varargs em WorkManager, WorkContinuation e OneTimeWorkRequest para simplificar a API. Para corrigir qualquer problema de compilação, você pode agrupar varargs já existentes com Arrays.asList(...). Também incluímos versões de argumento único de cada método.
  • Removidas variantes WorkContinuation.combine(OneTimeWorkRequest, *). Elas apresentavam uma API confusa. Os métodos combine já existentes são mais compreensíveis.

4 de dezembro de 2018

Room

A Room 2.1.0-alpha03 foi lançada com compatibilidade com corrotinas e várias correções de bugs.

Mudanças na API

  • O tokenizer FTS em @Fts3/@Fts4 agora usa uma String em vez de um Enum. Isso permite que tokenizers personalizados sejam usados pela Room. Os tokenizers integrados ainda são definidos em FtsOptions como constantes de string. b/119234881

Novos recursos

  • Corrotinas: os métodos DAO agora podem ser funções suspensas. Para compatibilidade com funções de suspensão na Room, foi lançado um novo artefato, room-coroutines. b/69474692
  • Os métodos DAO anotados com @Insert, @Delete ou @Update agora são compatíveis com ListenableFuture como tipo de retorno. b/119418331

Correções de bugs

  • Correção de um bug em que a Room tentava incorretamente encontrar um construtor com colunas na propriedade ignoredColumns de @Entity b/119830714
  • Correção de um bug em que a Room não marcava os parâmetros do método DAO como finais na implementação gerada. b/118015483
  • Correção de um bug em que o processador da Room falhava ao relatar um erro em uma consulta com símbolos especiais. b/119520136
  • Correção de um bug em que a Room recusava diversas outras implementações Collection como argumentos de uma expressão IN b/119884035
  • Correção de um bug em que o LiveData retornado da Room receberia lixo coletado quando observado para sempre, fazendo com que ele deixasse de emitir novos dados. b/74477406
  • Atualização do bloqueio de fechamento do RoomDatabase para reduzir a contenção de bloqueio. b/117900450

8 de novembro de 2018

WorkManager

Lançamento do WorkManager 1.0.0-alpha11. Esta versão contém muitas mudanças que se tornarão estáveis quanto à API na beta. Existem mudanças importantes na API nessa versão. Consulte a seção Mudanças importantes da API abaixo.

Mudanças na API

  • work-runtime-ktx introduz um novo CoroutineWorker.
  • WorkStatus foi renomeado como WorkInfo. Todas as variantes do método getStatus correspondentes foram renomeadas para as variantes getWorkInfo correspondentes. Essa é uma alteração interruptiva.
  • ListenableWorker.onStopped() não aceita mais ter um argumento booleano indicando se WorkRequest foi cancelado. WorkManager não faz mais essa distinção. Essa é uma alteração interruptiva.
  • O pacote androidx.work.test foi renomeado como androidx.work.testing. Essa é uma alteração interruptiva.
  • Setters em Constraints não fazem mais parte da API pública. Essa é uma alteração interruptiva..
  • WorkerParameters.getTriggeredContentUris() e WorkerParameters.getTriggeredContentAuthorities() antes retornavam matrizes. Agora, esses métodos retornam coleções. Essa é uma alteração interruptiva.
  • ListenableWorker.onStartWork() foi renomeado como ListenableWorker.startWork(). Essa é uma alteração interruptiva.
  • O construtor do WorkStatus não faz mais parte da API pública. Essa é uma alteração interruptiva..
  • Configuration.getMaxJobSchedulerID() e Configuration.getMinJobSchedulerID() são renomeadas como Configuration.getMinJobSchedulerId() e Configuration.getMaxJobSchedulerId(), respectivamente. Essa é uma alteração interruptiva.
  • Adicionadas muitas anotações @NonNull à API pública para melhorar a ergonomia da API.
  • Adicionada API WorkManager.enqueueUniqueWork() para enfileirar OneTimeWorkRequests exclusivas sem precisar criar um WorkContinuation.
  • Todas as variantes dos métodos enqueue e cancel em WorkManager agora retornam um novo tipo Operation. Essa é uma alteração interruptiva.
  • Todas as variantes de enqueue não aceitam mais varargs para WorkRequests. Essa é uma alteração interruptiva. Use Coleções em vez disso. Você pode usar Arrays.asList() para modificar o código existente. Fizemos isso para reduzir a superfície da API e a contagem de métodos.
  • A tentativa de initialize o WorkManager mais de uma vez por processo agora resultará em uma IllegalStateException. Essa é uma mudança importante.

Correções de bugs

  • WorkRequest.Builders no artefato work-runtime-ktx agora usam ListenableWorkers. Corrige b/117666259 (link em inglês)
  • Verifique se o próximo tempo de execução para PeriodicWork será no futuro. Corrige b/117666259 (link em inglês)
  • Remover possível E/S do disco ao usar o WorkManager na inicialização do app. Corrige b/117796731
  • Corrigir uma disputa em WorkConstraintsTracker. Corrige android-workmanager/issues/56 (link em inglês)

Mudanças importantes da API

  • WorkStatus foi renomeado como WorkInfo. Todas as variantes do método getStatus correspondentes foram renomeadas para as variantes getWorkInfo correspondentes.
  • ListenableWorker.onStopped() não aceita mais ter um argumento booleano indicando se WorkRequest foi cancelado. WorkManager não faz mais essa distinção.
  • O pacote androidx.work.test foi renomeado como androidx.work.testing.
  • Os setters em Constraints não fazem mais parte da API pública.
  • WorkerParameters.getTriggeredContentUris() e WorkerParameters.getTriggeredContentAuthorities() antes retornavam matrizes. Agora, esses métodos retornam Coleções.
  • ListenableWorker.onStartWork() foi renomeado como ListenableWorker.startWork().
  • O construtor do WorkStatus não faz mais parte da API pública.
  • Configuration.getMaxJobSchedulerID() e Configuration.getMinJobSchedulerID() são renomeadas como Configuration.getMinJobSchedulerId() e Configuration.getMaxJobSchedulerId(), respectivamente.
  • Todas as variantes dos métodos enqueue e cancel em WorkManager agora retornam um novo tipo Operation.
  • Todas as variantes de enqueue não aceitam mais varargs para WorkRequests.
  • A tentativa de initialize o WorkManager mais de uma vez por processo agora resultará em uma IllegalStateException.

1º de novembro de 2018

Paging

Lançamento do Paging 2.1.0-beta01 sem mudanças de 2.1.0-alpha01.

30 de outubro de 2018

Room

A Room 2.1.0-alpha02 foi lançada com várias correções de bugs e um novo recurso.

Novos recursos

  • Adição de compatibilidade para fazer referência a @DatabaseView em um @Relation. b/117680932

Correções de bugs

  • Correção de um bug em que a Room executava E/S de disco no encadeamento principal ao assinar e descartar um tipo de retorno Rx. b/117201279
  • Correção de um bug em que a Room não conseguia encontrar um conversor de tipo apropriado para um campo em uma classe de entidade Kotlin. b/111404868
  • Correção de um bug em que a Room gerava código incorreto para uma implementação da interface DAO que continha um método padrão de Kotlin que não tinha argumentos. b/117527454
  • Atualização do analisador de gramática do SQLite da Room, corrigindo um problema de desempenho que causaria longos tempos de compilação. b/117401230

29 de outubro de 2018

O Navigation 1.0.0-alpha07 foi lançado com correções de bugs e mudanças na API.

Novos recursos

  • Uma nova classe AppBarConfiguration permite personalizar quais destinos são considerados de nível superior. Consulte a documentação atualizada para ver mais detalhes. b/117333663
  • Agora você pode transmitir argumentos para o destino inicial do seu gráfico. b/110300470
  • Os links diretos agora são compatíveis com esquemas personalizados com pontos, hífens e sinais de adição. (b/112806402, link em inglês)

Mudanças importantes

  • O módulo navigation-testing-ktx foi incorporado no navigation-testing artifact e não será mais publicado.
  • O artefato navigation-testing agora depende da biblioteca padrão Kotlin. A API foi alterada para ser mais consistente com as convenções do Kotlin, mas você pode continuar a usá-la para testes escritos em Java.
  • Gráficos de navegação registrados com manifestos de metadados não são mais compatíveis. b/118355937
  • As ações não podem mais ser anexadas a destinos de <activity>. (aosp/785539, link em inglês)

Correções de bugs

  • Links diretos agora analisam os parâmetros de consulta corretamente. b/110057514
  • Os destinos de atividades agora aplicam corretamente todas as animações de entrada e saída. b/117145284
  • Correção de falhas que ocorriam depois que a configuração mudava ao usar navegadores personalizados. (b/110763345, link em inglês)

Safe Args

  • Safe Args agora tem uma dependência fixa no Android Gradle Plugin 3.2.1. b/113167627
  • Directions agora podem ser geradas para classes internas. b/117407555
  • Correção de um problema com a criação de Directions para um gráfico <include>. b/116542123

12 de outubro de 2018

Paging

O Paging 2.1.0-alpha01 foi lançado com duas adições importantes: descarte de páginas e bibliotecas de extensões KTX para cada artefato, bem como várias outras mudanças de API e correções de bugs.

Mudanças na API

  • Adição de PagedList.Config.Builder.setMaxSize() para limitar o número de itens carregados na memória.
  • Adição de androidx.paging.Config() como alternativa Kotlin para PagedList.Config.Builder
  • Adição de androidx.paging.PagedList() como alternativa Kotlin para PagedList.Builder
  • Adição de DataSourceFactory.toLiveData() como alternativa Kotlin para LivePagedListBuilder
  • Adição de DataSourceFactory.toObservable() e toFlowable() como alternativas Kotlin para RxPagedListBuilder
  • Adição de AsyncPagedListDiffer.addPagedListListener() para ouvir quando a PagedList foi trocada. b/111698609 (link em inglês)
  • Adição de variante PagedListAdapter.onCurrentListChanged() que transmite a lista antiga e a nova. A variante anterior teve o uso suspenso.
  • Adição de variantes PagedListAdapter/AsyncPagedListDiffer.submitList() que recebem um callback extra que é acionado se/quando a pagedlist é exibida, depois da diferenciação. Isso permite que você sincronize uma troca de PagedList com outras atualizações da IU. b/73781068 (link em inglês)
  • Adição de PagedList.getLoadedCount() para informar quantos itens estão na memória. Observe que o valor de retorno será sempre igual a .size() se os marcadores estiverem desativados.

Correções de bugs

  • Correção de uma disputa ao diferenciar se as listas são reutilizadas. b/111591017 (link em inglês)
  • PagedList.loadAround() agora gera IndexOutOfBoundsException quando o índice é inválido. Anteriormente, ele poderia falhar com uma exceção diversa incerta.
  • Correção de um caso em que um tamanho de carga inicial extremamente pequeno junto com dados inalterados resultava em nenhum outro carregamento. b/113122599 (link em inglês)

11 de outubro de 2018

WorkManager

O WorkManager 1.0.0-alpha10 foi lançado com compatibilidade com trabalho assíncrono controlado pelo desenvolvedor. Existem mudanças importantes na API nessa versão. Consulte a seção Mudanças importantes da API abaixo.

Prevemos que WorkManager estará entrando nas fases finais do período Alfa. Esperamos ter uma API estável em versão Beta, por isso, pedimos que envie seu feedback sobre nosso rastreador de problemas.

Mudanças na API

  • Removidos todos os métodos e classes deprecated anteriores, principalmente o construtor padrão Worker. Essa é uma alteração interruptiva da API.
  • NonBlockingWorker foi renomeado como ListenableWorker, que agora é uma classe pública reexibida e pronta para uso.
    • ListenableWorker fornece acesso a um método abstrato, ListenableFuture<Payload> onStartWork(), que é chamado na linha de execução principal. Cabe a você iniciar e processar o trabalho de forma assíncrona. Quando terminar, atualize ListenableFuture corretamente. As implementações de referência de ListenableFutures são fornecidas no pacote Futures em alpha02 (veja abaixo a seção WorkManager).
    • Worker estende ListenableWorker e ainda funciona como antes, com um método Result doWork() abstrato.
    • Alguns métodos e membros foram embaralhados de Worker para ListenableWorker.
    • Em breve, forneceremos implementações de referência para ListenableWorkers que usam corrotinas Kotlin (assim que as versões estáveis forem lançadas) e RxJava2.
  • A interface WorkerFactory e a implementação concreta DefaultWorkerFactory foram mescladas em uma classe abstrata chamada WorkerFactory. A implementação assegura que o comportamento padrão baseado em reflexão seja chamado como um esforço de última hora para qualquer instância WorkerFactory criada pelo usuário. Essa é uma alteração interruptiva.
  • Removidos WorkManager.synchronous() e WorkContinuation.synchronous() e todos os métodos relacionados. Adicionado ListenableFuture<Void> como o tipo de retorno de vários métodos na API. Essa é uma mudança importante da API.
    • Agora ListenableFutures podem ser usados para trabalho e observação de forma assíncrona. Por exemplo, WorkManager.enqueue() retornava void e agora retorna um ListenableFuture<Void>. Você pode chamar ListenableFuture.addListener(Runnable, Executor) ou ListenableFuture.get() para executar o código depois que a operação é concluída.
    • Observe que esses ListenableFutures não informam se a operação foi bem-sucedida ou falhou, apenas que ela foi concluída. Você ainda precisará encadear os métodos do WorkManager para descobrir essas informações.
    • Ignoramos as chamadas cancel() nesses objetos porque elas são confusas e difíceis de compreender (você está cancelando a operação ou o trabalho resultante?). Isso está no contrato Futures.
    • Para manter a paridade com os métodos getStatus* síncronos, fornecemos variantes ListenableFuture e renomeamos os existentes que retornaram LiveData para ter explicitamente "LiveData" como parte do nome (por exemplo, getStatusesByIdLiveData(UUID)). Essa é uma mudança importante da API.

Correções de bugs

  • Correção do problema conhecido de alpha09 com relação a arquivos androidx-annotations.pro duplicados. Você pode remover a solução alternativa das notas da versão anteriores excluindo exclude 'META-INF/proguard/androidx-annotations.pro' do arquivo do Gradle.
  • Adicionadas configurações do ProGuard para manter o novo construtor Worker. b/116296569 (link em inglês)
  • Correção de possível NullPointerException em uma disputa em que o trabalho era REPLACE. b/116253486 e b/116677275 (links em inglês)
  • WorkContinuation.combine() agora aceita uma ou mais WorkContinuations em vez de dois ou mais. b/117266752 (link em inglês)

Mudanças importantes da API

  • Removidos todos os métodos e classes deprecated anteriores, principalmente o construtor padrão Worker.
  • A interface WorkerFactory e a implementação concreta DefaultWorkerFactory foram mescladas em uma classe abstrata chamada WorkerFactory.
  • Removidos WorkManager.synchronous() e WorkContinuation.synchronous().
  • Métodos WorkManager.getStatus*() agora retornam ListenableFutures. WorkManager.getStatus*LiveData() retorna LiveDatas.

Futures

Lançamento de Futures 1.0.0-alpha02.

Mudanças na API

  • Os desenvolvedores agora podem usar ResolvableFuture e AbstractResolvableFuture como implementações leves concretas de ListenableFuture.

8 de outubro de 2018

Room

Lançamento da Room 2.1.0-alpha01.

Novos recursos

  • FTS: a Room agora é compatível com entidades com uma tabela de mapeamento FTS3 ou FTS4. As classes anotadas com @Entity agora podem ser anotadas com @Fts3 ou @Fts4 para declarar uma classe com uma tabela de pesquisa de texto completo de mapeamento. Opções de FTS para personalização adicional estão disponíveis por meio dos métodos da anotação. b/62356416
  • Views: a Room agora é compatível com a declaração de uma classe como consulta armazenada, também conhecida como view, usando a anotação @DatabaseView. b/67033276
  • Valor automático: a Room agora é compatível com a declaração de classes com a anotação AutoValue como entidades e POJOs. As anotações da Room @PrimaryKey, @ColumnInfo, @Embedded e @Relation agora podem ser declaradas nos métodos abstratos de uma classe anotada de valor automático. Essas anotações também precisam ser acompanhadas por @CopyAnnotations para a Room para entendê-los corretamente. b/62408420
  • Compatibilidade com outros tipos de retorno Rx: métodos do DAO anotados com @Insert, @Delete ou @Update agora são compatíveis com os tipos de retorno Rx Completable, Single<T> e Maybe<T>. b/63317956
  • Tipos imutáveis com @Relation: a Room antes exigia que os campos anotados @Relation fossem configuráveis, mas agora podem ser parâmetros do construtor.
  • enableMultiInstanceInvalidation: é uma nova API em RoomDatabase.Builder para ativar a invalidação em várias instâncias de RoomDatabase usando o mesmo arquivo de banco de dados. Esse mecanismo de invalidação de várias instâncias também funciona em vários processos. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: é uma nova API em RoomDatabase.Builder para recriar automaticamente o banco de dados em caso de downgrade. b/110416954
  • ignoredColumns: é uma nova API na anotação @Entity que pode ser usada para listar campos ignorados por nome. Útil para ignorar campos herdados em uma entidade. b/63522075

Mudanças de API / comportamento

  • mCallback e mDatabase em RoomDatabase agora são @Deprecated e serão removidos na próxima versão principal da Room. b/76109329

Correções de bugs

  • Correção de dois problemas em que a Room não se recuperava corretamente de um banco de dados corrompido ou de uma migração incorreta durante a inicialização. b/111504749 e b/111519144
  • A Room agora usará corretamente o construtor principal do Kotlin em classes de dados, evitando a necessidade de declarar os campos como vars. b/105769985

1º de outubro de 2018

Lançamento da Room 2.0.0 sem mudanças de 2.0.0-rc01. O Paging 2.0.0 foi lançado com uma única correção de bug.

Paging

Correções de bugs

  • Correção de uma falha que poderia ocorrer com a rolagem muito rápida usando PositionalDataSource e marcadores. b/114635383

21 de setembro de 2018

O ciclo de vida 2.0.0 foi lançado com uma correção de bug de 2.0.0-rc01 em ViewModel.

Lifecycle

Correções de bugs

  • Correção uma regra Proguard do ViewModel que removia incorretamente os construtores. b/112230489

20 de setembro de 2018

O Navigation 1.0.0-alpha06 foi lançado com correções de bugs e mudanças na API.

Novos recursos

Mudanças na API

  • Alteração interruptiva: o método navigate() do Navigator agora usa um parâmetro Navigator.Extras.
  • O método getGraph() do NavController agora é NonNull (b/112243286, link em inglês)

Correções de bugs

  • NavigationUI.setupWithNavController() não vaza mais visualizações se usado com visualizações de destinos individuais b/111961977
  • O onSaveState() do Navigator agora é chamado apenas uma vez (b/112627079, link em inglês)

Safe Args

  • As classes Directions do destino Navigation agora estendem a classe Directions do pai correspondente, se ele existir b/79871405
  • As classes Directions e Args agora têm uma implementação toString() útil b/111843389

19 de setembro de 2018

WorkManager

O WorkManager 1.0.0-alpha09 foi lançado com correções de bugs, atualizações de infraestrutura e mudanças de API.

Problema conhecido

Se você encontrar o seguinte problema: "Mais de um arquivo foi encontrado com o caminho independente do SO 'META-INF/proguard/androidx-annotations.pro'", coloque o seguinte no seu arquivo do Gradle como uma solução temporária enquanto corrigimos o problema em alpha10:

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

Correções de bugs

  • Adicionada outra correção necessária para o erro "100 jobs". b/115560696
  • Adicionadas algumas correções para erros de restrição de chave externa devido a disputas. b/114705286
  • Delegadas chamadas ConstraintTrackingWorker.onStopped(boolean) para o Worker subjacente. b/114125093 (link em inglês)
  • Imposição do atraso mínimo de retirada correto para o Firebase JobDispatcher. b/113304626
  • Melhoradas garantias de encadeamento internas para a biblioteca.
  • Corrigido um possível problema com a deduplicação de LiveData internamente.

Mudanças na API

  • Agora você pode criar suas instâncias Worker no momento da execução especificando uma WorkerFactory como parte da WorkManager.Configuration. A fábrica de substituição é DefaultWorkerFactory, que corresponde ao comportamento das versões anteriores do WorkManager.
    • Os construtores padrão para Worker e NonBlockingWorker agora estão marcados como obsoletos. Use o novo construtor (Worker(Context, WorkerParameters)) e chame super(Context, WorkerParameters). Futuras versões do WorkManager removerão o construtor padrão.
  • Começamos a usar o novo artefato ListenableFuture internamente (sem dependências do Guava). Introduziremos o ListenableFutures à API nas próximas versões. Essa mudança será compatível com o eventual envio de NonBlockingWorker.
  • Adicionada capacidade de acionar o trabalho cronometrado no TestDriver por meio de TestDriver.setInitialDelayMet(UUID) e TestDriver.setPeriodDelayMet(UUID). b/113360060 (link em inglês)

Alterações interruptivas

  • O uso dos construtores padrão Worker e NonBlockingWorker foi suspenso. Migre para o novo construtor o mais rápido possível. Versões futuras removerão o construtor padrão.

27 de agosto de 2018

WorkManager

O WorkManager 1.0.0-alpha08 foi lançado com correções de bugs.

Correções de bugs

  • Os componentes do WorkManager foram explicitamente identificados como sem reconhecimento de inicialização direta para que não sejam acionados durante a inicialização direta. No futuro, forneceremos uma versão do WorkManager com reconhecimento de inicialização direta. b/112665532 (link em inglês)
  • Corrigido um problema em que o trabalho repetido não era executado. b/112604021
  • Corrigido trabalho periódico fixo não executado repetidamente (relacionado ao problema acima). b/112859683
  • Políticas de retirada respeitadas quando o processo do app já está em execução.
  • Correção das mensagens de exceção em Data para indicar que o limite é 10 KB.
  • Redução do valor máximo de Configuration.setMaxSchedulerLimit(int) para 50, para compensar a latência na conclusão do processamento do JobScheduler. b/112817355

16 de agosto de 2018

WorkManager

O WorkManager 1.0.0-alpha07 foi lançado com correções de bugs e pequenas mudanças de API.

Correções de bugs

  • Corrigida uma possível consulta SQL com limites negativos que poderia retornar um número ilimitado de resultados.
  • O trabalho cuja execução foi concluída agora cancela corretamente todas as cópias pendentes desse trabalho em outros Programadores. Isso fez com que o limite de tarefas do JobScheduler fosse excedido. b/111569265 (link em inglês)
  • Corrigida uma ConcurrentModificationException em ConstraintTracker. b/112272753 (link em inglês)
  • Mudadas as anotações de tipo de retorno de Data.getBooleanArray(String) e Data.getIntArray(String) para @Nullable em vez de @NonNull. b/112275229 (link em inglês)

Mudanças na API

  • Worker agora estende uma nova classe, NonBlockingWorker. Isso não afeta nenhum uso atual. No futuro, NonBlockingWorker vai se tornar uma entidade totalmente compatível com soluções de linha de execução personalizadas.
  • Mudadas as anotações de tipo de retorno de Data.getBooleanArray(String) e Data.getIntArray(String) para @Nullable em vez de @NonNull. b/112275229 (link em inglês)
  • Extensões Kotlin: suspensão do uso de Map.toWorkData() e adição de um workDataOf(vararg Pair<String, Any?>) de nível superior para ser mais consistente com as APIs existentes.

10 de agosto de 2018

O Navigation 1.0.0-alpha05 foi lançado com correções de bugs.

Correções de bugs

  • Correção de um bug que causa um comportamento incorreto de pilha de retorno. b/111907708
  • Correção de um bug em equals() de classes Generated Args. b/111450897
  • Correção de um erro de compilação em Safe Args. b/109409713
  • Correção de uma conversão de identificadores de recursos para nomes Java. b/111602491
  • Correção de mensagens de erro sobre a capacidade de anulação no plug-in Safe Args.
  • Adição de anotações de anulação ausentes.

6 de agosto de 2018

Versões AndroidX do Lifecycle, Room e Paging com versão 2.0.0-rc01. Todos os artefatos permanecem inalterados a partir de 2.0.0-beta01.

1º de agosto de 2018

WorkManager

O WorkManager 1.0.0-alpha06 foi lançado com correções de bugs.

Correções de bugs

  • Impedir um bloqueio de banco de dados ao programar o trabalho. b/111801342
  • Corrigido um bug que fazia com que o PeriodicWork não fosse executado na programação durante o modo Soneca. b/111469837 (link em inglês)
  • Corrigida uma disputa ao rastrear restrições que causava falhas no WorkManager. googlecodelabs/android-workmanager/issues/56 (em inglês).
  • Criar WorkRequests exclusivas ao usar WorkRequest.Builder#build(). b/111408337 (link em inglês)
  • Permissão do uso de RescheduleReceiver somente quando houver WorkRequests que precisem dele. b/111765853

24 de julho de 2018

WorkManager

O WorkManager 1.0.0-alpha05 foi lançado com importantes correções de bugs e mudanças de registro.

Mudanças na API

  • O WorkManager.getInstance() agora é anotado com @NonNull em vez de @Nullable. Agora, se o singleton não for inicializado corretamente em casos de inicialização manual, o método gerará uma IllegalStateException. Essa é uma alteração interruptiva da API.
  • Adicionada uma nova API, Configuration.Builder.setMinimumLoggingLevel(int), que pode controlar o detalhamento do WorkManager. Por padrão, o WorkManager registra Log.INFO e acima.
  • Mudança da assinatura de Data.getString(), para que ela não aceite mais um valor padrão (é implicitamente null). Essa é uma alteração interruptiva da API.
  • Marcados alguns métodos necessários apenas para uso interno como @hide. Isso inclui o construtor Constraints, Data.toByteArray() e Data.fromByteArray(byte[]). Essa é uma mudança importante da API.

Correções de bugs

  • O WorkManager não executa mais o trabalho durante casos conhecidos de backup automático. Isso poderia ter causado uma falha. b/110564377
  • Correção da programação dupla de PeriodicWorkRequests ao usar o JobScheduler. b/110798652 (link em inglês)
  • Corrigido um problema com PeriodicWorkRequests que não eram executados corretamente depois da ativação do modo Soneca no dispositivo. b/111469837
  • Corrigido um problema com atrasos iniciais ao usar o Firebase JobDispatcher. b/111141023
  • Corrigidas certas condições de corrida e problemas de tempo em potencial.
  • Liberação devida de BroadcastReceivers que não eram mais necessários.
  • Otimização do desempenho de reprogramação quando os apps são reiniciados após o fechamento forçado.
  • Concedida permissão para TestScheduler.setAllConstraintsMet(UUID) ser chamado antes ou depois de enfileirar o WorkRequest especificado. b/111238024 (link em inglês)

Alterações interruptivas

  • O WorkManager.getInstance() agora é anotado com @NonNull em vez de @Nullable.
  • Mudança da assinatura de Data.getString(), para que ela não aceite mais um valor padrão (é implicitamente null).
  • Marcados alguns métodos necessários apenas para uso interno como @hide. Isso inclui o construtor Constraints, Data.toByteArray() e Data.fromByteArray(byte[]).

19 de julho de 2018

O Navigation 1.0.0-alpha04 e o plug-in Safe Args associado do Gradle contêm várias mudanças da API, mudanças de comportamento e correções de bugs.

Mudanças de API / comportamento

  • O NavHostFragment sempre definirá o Fragment atual como o fragmento de navegação principal, garantindo que os gerenciadores de fragmentos filhos sejam abertos antes que o NavController externo seja exibido. (b/111345778, link em inglês)

Safe Args

  • Alteração interruptiva: mudança em app:type para app:argType para evitar conflitos com outras bibliotecas, como ConstraintLayout 2.0.0-alpha1 b/111110548
  • Agora é possível clicar em mensagens de erro de Safe Args. b/111534438
  • Agora, as classes Args confirmam se os atributos NonNull realmente não são nulos. b/111451769
  • Adição de outras anotações NonNull às classes NavDirections e Args geradas. (b/111455455 b/111455456, links em inglês)

Correções de bugs

  • Correção de um problema com o botão "Voltar" do sistema após um link direto para um destino de fragmento. b/111515685

12 de julho de 2018

O Navigation 1.0.0-alpha03 e o plug-in Safe Args associado do Gradle contêm várias mudanças da API, mudanças de comportamento e correções de bugs.

Mudanças de API / comportamento

  • Adição de um método NavigationUI.setupWithNavController para a Barra de Ferramentas Google. b/109868820
  • Adição de um método NavigationUI.setupWithNavController para CollapsingToolbarLayout. b/110887183
  • popBackStack() agora retorna falso quando a pilha de retorno está vazia ou quando o código de destino fornecido não consta na pilha de retorno. b/110893637
  • O FragmentNavigator agora ignora as operações de navegação após o FragmentManager ter salvo o estado, evitando as exceções “Não foi possível realizar esta ação depois de onSaveInstanceState”. (b/110987825, link em inglês)

Safe Args

  • Alteração interruptiva: caracteres não alfanuméricos em nomes de ação e argumento serão substituídos pelo estilo CamelCase nos respectivos nomes de método do NavDirections
    • Por exemplo, DemoController.index se tornará setDemoControllerIndex b/79995048
    • Por exemplo, action_show_settings se tornará actionShowSettings (b/79642240, link em inglês)
  • Alteração interruptiva: os argumentos agora são considerados não nulos por padrão. Para permitir valores nulos em argumentos parceláveis e de string, adicione app:nullable="true" b/79642307
  • Agora é possível usar app:type="long" com defaultValues na forma de "123L" b/79563966
  • Os argumentos parcelable agora são compatíveis, usando um nome de classe totalmente qualificado para app:type. O único valor padrão compatível é "@null" b/79563966
  • As classes de Args agora implementam equals() e hashCode() b/79642246
  • O plug-in Safe Args agora pode ser aplicado a projetos de biblioteca. b/80036553
  • O plug-in Safe Args agora pode ser aplicado a projetos de recursos. (b/110011752, link em inglês)

Correções de bugs

  • Correção de problemas de navegação durante os métodos de ciclo de vida do Fragment. b/109916080
  • Correção de problemas de navegação por gráficos aninhados várias vezes. b/110178671
  • Correção de problemas ao usar setPopUpTo com o primeiro destino no gráfico. b/109909461
  • Correção de problemas em que todos os valores app:defaultValue estavam sendo transmitidos como Strings b/110710788
  • O aapt2 incluído no plug-in do Android para Gradle 3.2 Beta 01 agora mantém regras para todos os atributos android:name em arquivos XML do Navigation. b/79874119
  • Correção de vazamento de memória ao substituir o FragmentNavigator padrão. b/110900142

2 de julho de 2018

Versões AndroidX do Lifecycle, Room e Paging com versão 2.0.0-beta01.

Lifecycle

Correções de bugs

  • Correção da regra Proguard do LifecycleObserver para manter apenas implementações, e não subinterfaces. b/71389427
  • Correção de regras Proguard do ViewModel para permitir ofuscação e encolhimento.

Room

Mudanças de API / comportamento

  • Adição de RoomDatabase.Builder.setQueryExecutor() para permitir a personalização do local em que as consultas são executadas.
  • Adição de RxJava2 Observable para oferecer compatibilidade
  • As implementações de DAO e de banco de dados geradas agora são finais.

Correções de bugs

  • Especificação da classe/nome do campo no erro "não é possível encontrar o getter para o campo". b/73334503
  • Correção da retrocompatibilidade de RoomOpenHelper com versões anteriores da Room. b/110197391

Paging

Correções de bugs

  • Correção de conteúdo ausente em alguns casos de prefixo (marcadores de posição desativados, PositionalDataSource). b/80149146 (link em inglês)
  • Já lançado em 1.0.1. Correção de falhas em que PagedListAdapter e AsyncPagedListDiffer não sinalizavam eventos de movimentação. b/110711937

26 de junho de 2018

Paging

O Paging 1.0.1 foi lançado com uma única correção de bug em runtime. É altamente recomendável usar o 1.0.1 por questão de estabilidade. Paging RxJava2 1.0.1 também foi liberado e é idêntico ao 1.0.0-rc1.

Correções de bugs

  • Correção de falhas em que PagedListAdapter e AsyncPagedListDiffer não sinalizavam eventos de movimentação. b/110711937

WorkManager

Lançamento do WorkManager 1.0.0-alpha04.

Correções de bugs

  • PeriodicWorkRequests agora são reprogramadas corretamente ao usar a implementação baseada em AlarmManager.

  • Corrigido um possível ANR ao reprogramar todos os workers após um fechamento forçado ou uma reinicialização. b/110507716

  • Adicionadas anotações de anulação a várias APIs do WorkManager. b/110344065

  • Registro de exceções não identificadas que ocorrem durante a execução do Worker. b/109900862

  • Permissão de migrações de banco de dados destrutivas no caso de você decidir reverter para uma versão mais antiga do WorkManager. b/74633270

  • Corrigida uma falha de migração ao criar tags implícitas duplicadas. Esse é um problema muito raro que ocorria apenas se você utilizasse o mesmo formato de tag implícito.

19 de junho de 2018

Room

Lançamento da Room 1.1.1. Essa versão é idêntica à Room 1.1.1-rc1.

WorkManager

Lançamento do WorkManager 1.0.0-alpha03.

Correções de bugs

  • Corrigida uma disputa na implementação baseada no AlarmManager. b/80346526 (link em inglês)

  • Corrigidos jobs duplicados ao usar o JobScheduler após a reinicialização do dispositivo.

  • Jobs com acionadores de URI de conteúdo agora persistem entre reinicializações. b/80234744

  • Atualizações de documentação. b/109827628, b/109758949, b/80230748 (links em inglês)

  • Corrigida uma falha ao reposicionar um WorkRequest na fila. b/109572353 (link em inglês).

  • Corrigidos avisos do compilador Kotlin ao usar a dependência work-runtime-ktx.

  • O WorkManager agora usa Room versão 1.1.1-rc1.

Mudanças na API

  • Adicionada getStatusesSync(), a versão síncrona de WorkContinuation.getStatuses().

  • Worker consegue distinguir entre o cancelamento iniciado pelo usuário e a interrupção temporária solicitada pelo SO. Worker.isStopped() retorna true quando qualquer tipo de interrupção é solicitado. Worker.isCancelled() retorna true quando o trabalho foi explicitamente cancelado. b/79632247 (link em inglês)

  • Adicionada compatibilidade para JobParameters#getNetwork() na API 28. Isso é exposto por meio de Worker.getNetwork().

  • Adicionado Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit) para que você possa impor quantos jobs podem ser enviados para JobScheduler ou AlarmManager. Isso ajuda a evitar que o WorkManager assuma todos os slots JobScheduler disponíveis.

  • Adição de Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId) que ajuda a definir um intervalo de IDs de jobs do JobScheduler seguros para o WorkManager. b/79996760

  • Worker.getRunAttemptCount() retorna a contagem de execução atual para um determinado Worker. b/79716516 (link em inglês)

  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) permite enfileirar PeriodicWorkRequests exclusivos. b/79600647 (link em inglês)

  • WorkManager.cancelAllWork() cancela todos os Workers. As bibliotecas que dependem de WorkManager podem consultar quando esse método foi chamado pela última vez usando WorkManager.getLastCancelAllTimeMillis() para limpeza adicional do estado interno.

  • Adicionado WorkManager.pruneWork() para remover os jobs concluídos do banco de dados interno. b/79950952, b/109710758 (link em inglês)

Mudanças de comportamento

  • Adicionada uma tag implícita para todos os WorkRequests, que é o nome da classe totalmente qualificado do Worker. Isso permite remover WorkRequests sem tags ou quando id não está disponível. b/109572351 (link em inglês)

Alterações interruptivas

  • Worker.WorkerResult foi renomeado como Worker.Result.

  • Worker.onStopped agora tem um parâmetro isCancelled extra definido como true quando Worker tiver sido explicitamente cancelado.

7 de junho de 2018

Lançamento de Navigation 1.0.0-alpha02.

Mudanças de comportamento

  • FragmentNavigator agora usa setReorderingAllowed(true). b/109826220

  • O Navigation agora aplica URLDecodes a argumentos analisados de URLs de links diretos. (b/79982454, link em inglês)

Correções de bugs

  • Correção de uma IllegalStateException ao chamar a navegação dos métodos de ciclo de vida do Fragment. b/79632233

  • O Navigation agora depende da Biblioteca de Suporte 27.1.1 para corrigir a tremulação ao usar animações. b/80160903

  • Correção de uma IllegalArgumentException ao usar defaultNavHost="true" como um fragmento filho. b/79656847

  • Correção de um StackOverflowError ao usar o NavDeepLinkBuilder. b/109653065

  • Correção de um IllegalArgumentException ao navegar de volta para um gráfico aninhado. b/80453447

  • Correção de um problema com a sobreposição de Fragments ao usar launchSingleTop. b/79407969

  • O Navigation agora cria a pilha de retorno sintética correta para gráficos aninhados. b/79734195

  • A NavigationUI agora destaca o item correto ao usar um gráfico aninhado como um MenuItem. (b/109675998, link em inglês)

Mudanças na API

  • O atributo clearTask das ações e a API associada em NavOptions foram suspensos. b/80338878

  • O atributo launchDocument das ações e a API associada em NavOptions foram suspensos. b/109806636

24 de maio de 2018

Lançamento do WorkManager 1.0.0-alpha02.

WorkManager

Correções de bugs

  • Corrigido um NullPointerException em State.isFinished(). b/79550068 (link em inglês)

  • Corrigido um problema que fazia com que Workers fossem reprogramados em Application.onCreate(). b/79660657 (link em inglês)

  • Corrigido um problema em que era possível programar mais trabalho do que o permitido pelo SO. b/79497378

  • Mudança da limpeza de wake locks associados a Workers para a linha de execução em segundo plano.

  • A implementação AlarmManager agora é limpa corretamente quando todos os trabalhos pendentes são concluídos.

  • Corrigidas consultas SQL de limpeza que afetavam as localidades que não falam inglês. b/80065360

  • Adicionada compatibilidade com floats em Data. b/79443878 (link em inglês)

  • Data.Builder.putAll() agora retorna uma instância de Builder. b/79699162 (link em inglês)

  • Mais Javadoc e correções na documentação. b/79691663

Mudanças na API

  • Workers podem reagir à própria interrupção. Worker.isStopped() pode ser usado para verificar se um Worker foi interrompido. Worker.onStopped() pode ser usado para executar operações de limpeza leves.

  • A API Worker.getTags() retorna um Set de tags associadas ao Worker.

  • Adicionadas sobrecargas de javax.time.Durationpara APIs que usam uma combinação de duração e TimeUnits. Isso é protegido por @RequiresApi(26).

  • As extensões do WorkManager foram movidas do pacote androidx.work.ktx para o pacote androix.work. O uso das extensões antigas foi suspenso, e elas serão removidas em uma versão futura.

  • Configuration.withExecutor() foi suspenso. Use Configuration.setExecutor().

16 de maio de 2018

Lançamento de Paging RxJava2 1.0.0-rc1 e Room 1.1.1-rc1. É altamente recomendável usar a Room 1.1.1-rc1 em vez de 1.1.0 caso você esteja usando migrações.

Room

Correção de um bug em que a Room não tratava corretamente a inicialização pós-migração. b/79362399

Paging

O Paging rxjava2 está progredindo para se tornar candidato a lançamento sem mudanças desde o Alfa inicial.

8 de maio de 2018

Paging 1.0, Alfas de Navigation e WorkManager, Room 1.1, AndroidX

Lançamento do Paging 1.0.0 e da Room 1.1.0 com os Alfas de dois novos Componentes de arquitetura: Navigation e WorkManager.

O Paging e a Room não trazem mudanças desde os últimos candidatos a lançamento.

Nova biblioteca: Navigation

O Navigation oferece um framework para a compilação de navegação no app. Esta versão inicial é 1.0.0-alpha01.

Nova biblioteca: WorkManager

O WorkManager simplifica a programação e a execução de trabalhos em segundo plano garantidos e com reconhecimento de restrições. Esta versão inicial é 1.0.0-alpha01.

AndroidX

Os Componentes de arquitetura estão progredindo para se tornarem parte do AndroidX, incluindo nomes de pacotes atualizados, nomes de artefatos e dependências em outras bibliotecas AndroidX. Eles são lançados na versão 2.0.0-alpha1 para uso em conjunto com outras bibliotecas AndroidX.

Extensões Kotlin

ViewModel, ReactiveStreams e Sqlite (antigo componente "Database" da Room) têm bibliotecas de extensão Kotlin adicionadas como parte da versão Alfa do AndroidX. Além disso, o Navigation e o WorkManager incluem módulos -ktx. Cada um desses módulos de extensão pode ser encontrado na adição de componentes.

2 de maio de 2018

  • Room 1.1.0 candidata a lançamento.
  • Lançamento da Room 1.1.0-rc1.

Correções de bugs

  • A Room agora é compatível com o Kotlin 1.2.40. b/78328708

19 de abril de 2018

Paging candidato a lançamento

Lançamento de Paging 1.0.0-rc1 e Room 1.1.0-beta3.

Paging

Não temos outros problemas conhecidos ou novos recursos programados para o Paging versão 1.0.0. Faça upgrade dos seus projetos para usar 1.0.0-rc1 e ajude a testá-lo para que possamos lançar um 1.0.0 sólido.

Não há mudanças nessa versão. Ela é a mesma que 1.0.0-beta1.

Room

Correções de bugs

  • Correção de erro de compilação quando um POJO do Kotlin faz referência a uma entidade relacional que foi definida no Java. b/78199923

5 de abril de 2018

Lançamento de Room 1.1.0-beta2, Paging 1.0.0-beta1 e Paging RxJava 1.0.0-alpha1.

O Paging ficará na versão Beta por um breve período antes de progredir para candidato a lançamento. Não estamos planejando outras mudanças na API para o Paging 1.0, e a resistência a qualquer mudança na API é muito alta.

A compatibilidade do RxJava2 Alfa com o Paging foi lançada como um módulo opcional diferente (android.arch.paging:rxjava2:1.0.0-alpha1) e a versão dele será temporariamente controlada em separado até que ele se estabilizar.

Essa nova biblioteca traz uma alternativa ao RxJava2 para LivePagedListBuilder, capaz de construir Observables e Flowables, usando Schedulers em vez de Executors:

Kotlin

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

Java

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

Paging

Novos recursos

  • Adição de RxPagedListBuilder por meio do novo artefato android.arch.paging:rxjava2.

Mudanças na API

  • Mudanças de API para esclarecer o papel dos executores em builders:

    • setBackgroundThreadExecutor() renomeado para setFetchExecutor() (em PagedList.Builder e LivePagedListBuilder)

    • setMainThreadExecutor() renomeado para setNotifyExecutor() (em PagedList.Builder).

  • Correção do membro PagedList.mCallbacks para que seja privado.

Correções de bugs

  • LivePagedListBuilder aciona o carregamento inicial de PagedList no executor especificado, em vez do pool de linhas de execução de IO dos Componentes de arquitetura.

  • Correção do comportamento de invalidação em wrappers DataSource internos, usados para implementar o DataSource.map, bem como o carregamento de PositionalDataSource com marcadores desativados. b/77237534 (link em inglês)

Room

Correções de bugs

  • Correção de um bug crítico nas implementações Single e Maybe Rx da Room, em que a consulta era reciclada antecipadamente, causando problemas se você adicionasse mais de um observador às instâncias Single ou Maybe retornadas. b/76031240

  • RoomDatabase.clearAllTables não causará VACUUM do banco de dados se for chamado dentro de uma transação. b/77235565

21 de março de 2018

Lançamento de Room 1.1.0-beta1, Paging 1.0.0-alpha7 e Lifecycles 1.1.1.

Room

Mudanças na API

Correções de bugs

  • RoomDatabase.clearAllTables agora tenta retornar o espaço de volta para o sistema operacional definindo um checkpoint WAL e realizando VACUUM do banco de dados.

  • @RawQuery agora aceita qualquer Pojo para a propriedade observedEntities, desde que o Pojo faça referência a uma ou mais entidades por meio dos campos Embedded ou Relations. b/74041772

  • Paging: a implementação de DataSource da Room agora lida corretamente com dependências de várias tabelas (como relações e mesclagens). Anteriormente, elas não conseguiam acionar novos resultados ou poderia ocorrer falha de compilação. b/74128314

Lifecycles

Só uma pequena mudança: android.arch.core.util.Function foi movida de arch:runtime para arch:common. Isso possibilita o uso sem a dependência de tempo de execução, por exemplo, em paging:common abaixo.

lifecycle:common é uma dependência de lifecycle:runtime. Por esse motivo, essa mudança não afeta lifecycle:runtime diretamente, apenas os módulos que dependem diretamente de lifecycle:common, como o Paging.

Paging

Lançamento do Paging 1.0.0-alpha7 junto com o Lifecycles 1.1.1. Como Paging alpha7 depende do movimento da classe Function mencionada acima, você precisará atualizar sua dependência de lifecycle:runtime para android.arch.lifecycle:runtime:1.1.1.

O Paging alpha7 está sendo planejado para ser a versão final antes de chegar à versão beta.

Mudanças na API

  • Os objetos DataSource.LoadParams agora têm um construtor público e os objetos DataSource.LoadCallback agora são abstratos. Isso permite realizar o wrapper de DataSource ou testar diretamente um DataSource com um callback simulado. b/72600421 (link em inglês)
  • Mapeadores para DataSource e DataSource.Factory
    • map(Function<IN,OUT>) permite que você transforme, envolva ou decore resultados carregados por um DataSource.
    • mapByPage(<List<IN>,List<OUT>>) proporciona o mesmo para o processamento em lote. Por exemplo, se os itens carregados do SQL precisarem consultar também um banco de dados separado, isso poderá ser feito em lote.
  • PagedList#getDataSource() é adicionado como um método de conveniência b/72611341 (link em inglês)
  • Todas as classes obsoletas foram removidas da API, incluindo os elementos remanescentes do pacote recyclerview.extensions e o LivePagedListProvider.
  • DataSource.Factory é modificado de uma interface para uma classe abstrata para ativar a funcionalidade do mapa.

Correções de bugs

  • Os Builders alterados serão finais. b/70848565 (link em inglês)
  • A implementação de DataSource da Room agora foi corrigida para lidar com consultas de várias tabelas. Essa correção está na Room 1.1.0-beta1, veja acima.
  • Correção de um bug em que o BoundaryCallback.onItemAtEndLoaded não seria invocado para PositionalDataSource se os marcadores estiverem ativados e o tamanho total for um múltiplo exato do tamanho da página.

2 de março de 2018

Lançamento da Room 1.1.0-alpha3. Essa é a última versão Alfa planejada para a Room 1.1.0.

Mudanças na API

  • Os métodos addObserver e removeObserver do InvalidationTracker agora são síncronos e precisam ser chamados em uma linha de execução que não seja da IU. Isso evita certas disputas durante a observação de tabelas.

  • Há um novo método clearAllTables() na classe RoomDatabase que truncará todo o conteúdo da tabela. b/63807999

  • SupportSQLiteQuery agora tem um método getArgCount() que retorna o número de parâmetros de consulta. b/67038952

Correções de bugs

  • @RawQuery agora tem a devida compatibilidade com consultas do Paging. b/72600425

  • A Room agora nomeia corretamente classes Dao geradas para evitar conflitos de nome quando duas ou mais interfaces Dao são internas no mesmo pacote e têm o mesmo nome. b/73536380

  • Os tipos de campos genéricos em Pojos são devidamente analisados como membros da classe de extensão. b/73534868

  • Os parâmetros de consulta em interfaces Dao que são herdadas de artefatos de dependência agora são analisados corretamente. b/68118746

  • As consultas geradas para @Relations agora escapam corretamente dos nomes dos campos. b/70925483

27 de fevereiro de 2018

O Paging 1.0.0-alpha6 foi lançado junto com a Biblioteca de Suporte versão 27.1.0. ListAdapter e algumas classes relacionadas foram movidas da Biblioteca Paging diretamente para o Recyclerview, com algumas renomeações para tornar mais clara a função de certas classes. Essa versão Alfa do Paging provavelmente será a última a ter mudanças importantes na API.

Mudanças na API

  • Classes movidas para recyclerview-v7:
    • ListAdapter
  • Classes renomeadas e movidas para recyclerview-v7:
    • ListAdapterHelper -> AsyncListDiffer
    • ListAdapterConfig -> AsyncDifferConfig
    • DiffCallback -> DiffUtil.ItemCallback
  • Classes renomeadas dentro do ambiente de execução de paginação:
    • PagedListAdapterHelper -> AsyncPagedListDiffer

As classes movidas eram úteis junto com o RecyclerView, independentemente da Paging Library. Isso significa que elas podem ser usadas sem depender de uma versão Alfa do Paging, mas isso também significa que apps que usam o Paging precisam fazer upgrade para o Alpha 6 e para a Biblioteca de suporte 27.1.0 ao mesmo tempo.

** Guia de migração para Paging Alpha6: **

  • Atualizar as dependências de Paging e RecyclerView para android.arch.paging:runtime:1.0.0-alpha6 e com.android.support:recyclerview-v7:27.1.0
    • Isso precisa ser feito simultaneamente, como ListAdapter foi movido do Paging para RecyclerView.
  • Atualize as referências de ListAdapterHelper para AsyncListDiffer
    • getItem(index)/getItemCount() foram removidos em favor do padrão de chamar getCurrentList().getItem(index) e getCurrentList().size(), que são mais explícitos.
  • Atualize as referências de ListAdapterConfig para AsyncDifferConfig
  • Atualize as referências de DiffCallback para DiffUtil.IttemCallback
  • Atualize as referências de PagedListAdapterHelper para AsyncPagedListDiffer
  • Atualize as referências de setList() para submitList()
    • Foi renomeada para esclarecer a natureza assíncrona da diferenciação da lista.

Correções de bugs

  • Correção de transmissão incorreta de posição inicial para o carregamento inicial quando os marcadores estão desativados. b/73513780

15 fevereiro de 2018

Lançamento da Room 1.1.0-alpha2.

Novos recursos

  • A Room agora é compatível com a abertura de banco de dados no modo de registro de gravação antecipada. Nesse modo, suas gravações não bloquearão mais as consultas de leitura. Mesmo que consuma mais memória (devido às várias conexões), esse modo geralmente é mais rápido. Por padrão, a Room usará WAL se o dispositivo tiver API 16 ou posterior e não for um dispositivo de memória baixa. Você pode controlar esse comportamento usando o método setJournalMode() no RoomDatabase.Builder. b/67757002

  • Compatibilidade com Guava: a Room agora é compatível com o retorno de Guava Optional<T> ou ListenableFuture<T> em consultas DAO. Para usar ListenableFuture<T>, você precisa importar o artefato guava da Room (android.arch.persistence.room:guava:1.1.0-alpha2).

  • A Room agora é compatível com o retorno de java.util.Optional<T> de consultas DAO.

  • Os métodos de interface com implementações padrão agora são compatíveis com métodos @Transaction em classes DAO. Isso funciona para Java 8 e Kotlin. b/72416735

Correções de bugs

  • Construtores com @Relation não causarão um erro de compilação se houver outro construtor que possa ser usado. b/72884434

  • Os nomes de tabela que escapam com ' em métodos @Query agora escapam corretamente para o rastreador de invalidação. b/72366965

  • A Room agora usa as anotações Kotlin @Metadata para ler a estrutura de classes durante o processamento da anotação. Isso significa que, mesmo que um pojo seja herdado de uma dependência, os nomes de parâmetro do construtor dele podem ser lidos corretamente. b/67181813

  • Correção de um problema com a localização de caminhos de migração de downgrade. b/72153525

  • Os tipos de coluna não padrão agora são manipulados adequadamente ao migrar de um banco de dados existente para a Room. b/71953987

  • O Room agora lida adequadamente com campos boolean? persistentes em classes Kotlin. b/72786402

22 de janeiro de 2018

Lançamento de Lifecycles 1.1.0, Room 1.1.0-alpha1 e Paging 1.0.0-alpha5.

Lifecycle 1.1.0

Mudanças no empacotamento

Novas dependências muito menores agora estão disponíveis:

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

Mudanças na API

  • Os LifecycleActivity e LifecycleFragment obsoletos foram removidos. Use FragmentActivity, AppCompatActivity ou ofereça compatibilidade com Fragment.
  • Adicionadas anotações @NonNull a ViewModelProviders e ViewModelStores
  • O uso do construtor ViewModelProviders foi suspenso. Use os métodos estáticos dele diretamente.
  • O uso de ViewModelProviders.DefaultFactory foi suspenso. Use ViewModelProvider.AndroidViewModelFactory
  • Adição do método ViewModelProvider.AndroidViewModelFactory.getInstance(Application) estático para recuperar uma Factory estática adequada para criar instâncias ViewModel e AndroidViewModel.

Room 1.1.0-alpha1

Novos recursos

  • RawQuery: essa nova API permite que os métodos @Dao recebam o SQL como um parâmetro de consulta b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: essa nova API em RoomDatabase.Builder proporciona um controle mais refinado, com que as migrações destrutivas de versões iniciais do esquema são permitidas (em comparação com fallbackToDestructiveMigration) b/64989640
  • A Room agora é compatível apenas com as APIs mais recentes do Paging (Alfa-4 ou posterior), perdendo a compatibilidade com o LivePagedListProvider obsoleto. Para usar a nova Room Alfa, é necessário usar a Paging alpha-4 ou mais recente e mudar do LivePagedListProvider para o LivePagedListBuilder, se ainda não tiver feito isso.

Correções de bugs

  • Compatibilidade aprimorada para os tipos Kotlin Kapt. b/69164099
  • A ordem dos campos não invalida mais o esquema. b/64290754

Paging 1.0.0-alpha5

Correções de bugs

  • Correção do carregamento de página quando os marcadores de posição estão desativados. b/70573345 (link em inglês)
  • Criação de registros adicionais para rastrear o bug IllegalArgumentException b/70360195 (e suposta correção do lado da Room).
  • Correções de código de amostra Javadoc. b/70411933, b/71467637

11 de dezembro de 2017

Lançamento do Paging alpha4-1. Esta é uma pequena versão de correção de bugs do Paging alpha-4.

Correções de bugs

7 de dezembro de 2017

O Paging alpha4 foi lançado, com mudanças e adições significativas, principalmente rede de segmentação e nos casos de uso da rede + banco de dados.

Mudanças na API

  • DataSource agora é uma API assíncrona, para facilitar a paginação diretamente da rede:

    • Ponto de entrada único para tamanho inicial e dados.
    • Compatibilidade com nova tentativa de rede mantendo o callback e enviando mais tarde.
    • Os callbacks seguros para thread permitem o carregamento assíncrono para criação de um PagedList baseado em rede única na linha de execução de IU.
    • Comportamento de erro mais claro sobre os parâmetros de carga inicial.
  • TiledDataSource foi renomeado como PositionalDataSource para refletir a indexação dele com base na posição e no fato de que ele não é delimitado quando os marcadores estão desativados.

  • PageKeyedDataSource foi adicionado para oferecer compatibilidade com tokens próximos/anteriores incorporados em carregamentos de páginas de rede. KeyedDataSource renomeado como ItemKeyedDataSource para esclarecer a diferença.

  • LivePagedListBuilder e DataSource.Factory substituem LivePagedListProvider. O builder oferece o mesmo recurso com mais personalização e padrões mais simples. O factory permite que o código de geração do DataSource permaneça independente do LiveData.

  • PagedList.BoundaryCallback adicionado ao caso de uso de banco de dados + rede.

  • O construtor PagedList.Builder usa DataSource + PagedList.Config, agora mais semelhante ao LivePagedListBuilder, e permite o uso do operador losango na linguagem Java ou de tipos inferidos no Kotlin.

  • PagedList.getConfig() adicionado e PagedList.Config agora tem propriedades de membro público.

  • KeyedDataSource.loadBefore() não espera mais que os resultados sejam revertidos.

  • PagedListAdapter.onCurrentListChanged() foi adicionado para detectar atualizações em que PagedList está sendo exibida.

Correções de bugs

  • Correção de IndexOutOfBoundsException em PagedListAdapter(Helper). b/67883658

1.0.0 - 6 de novembro de 2017

Todos os principais componentes (exceto o Paging) agora estão na versão 1.0.0. Esta versão é exatamente igual a rc1, exceto por uma mudança na biblioteca reactivestreams.

Correções de bugs

Candidato a lançamento - 18 de outubro de 2017

Todos os artefatos principais (exceto Paging) agora estão na versão 1.0.0-rc1.

Não temos mais problemas conhecidos ou novos recursos programados para a versão 1.0.0. Faça upgrade dos seus projetos para usar 1.0.0-rc1 e ajude a testá-lo para que possamos lançar um 1.0.0 sólido.

Mudança de comportamento

  • Com esta versão, Lifecycle.Event#ON_STOP agora é enviado quando onSaveInstanceState é chamado. Anteriormente, ele era apenas marcado como CREATED sem enviar ON_STOP. Leia mais sobre isso na Documentação do Lifecycles.

Correções de bugs

  • Room:

    • A Room agora depende do artefato xerial mais recente, que corrige os problemas de OutOfMemory durante a compilação. b/62473121
    • Os métodos Query agora podem ser anotados com @Transaction. Consulte documentos de referência em @Transaction para saber mais detalhes. b/65112315
    • A classe StringUtil na Room foi removida da API pública. Nunca houve intenção de que ela fosse uma API pública.
  • Lifecycles:

    • LiveData funciona corretamente quando a Atividade está parcialmente coberta na API anterior a 24. b/65665621

    • Os métodos OnLifecycleEvent em classes pai agora são chamados corretamente ou, caso isso não seja possível, um aviso é impresso durante a compilação. b/63474615

    • O Lifecycle agora tem uma WeakReference de volta ao LifecycleOwner para evitar o vazamento do LifecycleOwner se o Lifecycle for mantido na memória por mais tempo do que o normal. Essa é apenas uma precaução, ainda é preciso ter cuidado para não causar vazamento do Lifecycle.

9 de outubro de 2017

O Paging alpha-3 foi lançado; que o torna compatível com a versão beta 2 do Lifecycles e da Room.

Correções de bugs

  • Documentação do Paging aprimorada.

5 de outubro de 2017

Todos os artefatos principais (exceto Paging) agora estão na versão beta 2. Não há nova versão do Paging neste lançamento.

Correções de bugs

  • Lifecycles:

    • LiveDataReactiveStreams agora cancela a inscriçãodo editor de origem corretamente quando LiveData não está ativo. b/62609183
    • Os eventos do Lifecycle são devidamente propagados para classes pai quando a classe pai é de outro módulo. b/63474615
    • O LiveData processa corretamente os observadores quando eles cancelam a inscrição durante a criação da assinatura. b/66337741
    • O artefato FullLifecycleObserver para linguagem Java 8 agora está disponível na árvore de dependências. b/66525578

    • Para Proguard, adicione as seguintes linhas ao seu arquivo Proguard. Isso não será necessário quando a versão 1.0.0 for lançada.

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

    • A Room agora imprime um erro no tempo de compilação quando o Pojo retornado em um método @Query tem um campo @NonNull que não corresponde a nenhuma das colunas na resposta da consulta. Se o campo for @Nullable, apenas a Room imprimirá um aviso. b/67115337
    • A Room agora valida índices nas versões mais recentes do SO. b/63132683
    • A Room selecionará o construtor no-arg por padrão se houver vários construtores correspondentes em um Pojo. b/67353427
    • As chaves primárias de coluna única podem ser Nullable se for um Integer ou um Long. b/67086876
    • O rastreador de invalidação trata corretamente da reentrada no modo de teste. b/65471397
    • A Room agora verifica se há caracteres inválidos nos nomes de colunas e tabelas no momento da compilação (caracteres inválidos: `, "). b/64749111

21 de setembro de 2017

Nesta versão, todos os módulos de Componentes de arquitetura alcançam pelo menos beta 1, exceto a nova Biblioteca Paging, que é alpha 2.

Não estamos planejando mais mudanças na API. Mudanças não planejadas podem acontecer, mas o critério para fazer qualquer mudança na API anterior à 1.0.0 estável é muito rigoroso e é improvável que isso aconteça.

  • LifecycleActivity e LifecycleFragment serão removidos antes da versão 1.0.0 estável. Eles não são necessários ao usar a Biblioteca de Suporte 26.1.0 ou versões mais recentes.

Ao contrário da fase Alfa, a fase Beta está programada para ter uma duração muito breve.

Mudanças da versão

  • Lifecycle Extensions e Room agora estão na versão beta 1.
  • A versão do Paging agora é alpha 2
  • Nenhuma mudança no Lifecycles (tempo de execução, comum) e Arch Core (comum). Esses dois artefatos estão na versão 1.0.0 desde 13 de setembro.

Novos artefatos

  • Os Lifecycles agora têm um novo artefato chamado common-java8. Esse artefato contém uma nova interface denominada DefaultLifecycleObserver, que tem implementações padrão para todos os métodos do Lifecycle. Se você estiver usando a linguagem Java 8, provavelmente preferirá esse artefato em vez das anotações.

    • Devido a um bug em beta1, é preciso adicionar uma dependência explícita no módulo android.arch.lifecycle:common:1.0.1 para usar o novo artefato common-java8. Esse problema será corrigido em beta2.

Mudanças no empacotamento

  • O item android.arch.persistence.room.db foi movido para a pasta android.arch.persistence.db.
  • O item android.arch.persistence.room.db-impl foi movido e renomeado para android.arch.persistence.db-framework.

Esses dois artefatos já são uma dependência na Room e, a menos que você os utilize diretamente, não será necessário mudar nada nos arquivos de compilação.

Mudanças na API

  • Room:

    • A anotação @ColumnInfo agora é compatível com a definição de um agrupamento na coluna. b/62007004
    • Campos transient agora são ignorados por padrão, a menos que estejam anotados com @ColumnInfo, @Embedded ou @Relation. b/62600692
    • As chaves primárias precisam ser anotadas com @NonNull, a menos que sejam geradas automaticamente. b/64292391
      • Essa mudança pode exigir uma migração de esquema. Lamentamos o transtorno.
    • Adição de uma nova anotação conveniente (@Transaction), que modifica um método DAO e o executa dentro de uma transação.
  • Compatibilidade com o banco de dados SQLite:

  • Paging:

    • Documentação de Paging aprimorada com mais exemplos e anotações de thread.

Correções de bugs

  • Room:
    • Strings de várias linhas do Kotlin em @Query são processadas corretamente. b/65809374
  • Paging:
    • O artefato do Paging não depende mais de JUnit. b/65690261

1.0.0 Alpha 9-1 - 13 de setembro de 2017

Esta é uma versão principal em que os artefatos centrais do Lifecycle (tempo de execução, comum) e do arch core (comum) alcançam a versão estável 1.0.0.

Junto com essa mudança, a Biblioteca de Suporte 26.1.0 agora depende dessas bibliotecas. O AppCompatActivity e o Support Fragment agora implementam a interface LifecycleOwner.

Esta versão também depende da Biblioteca de Suporte 26.1.0 para aproveitar a nova integração.

Nova biblioteca: Paging

Esta versão também inclui uma nova biblioteca denominada Paging, que permite carregar facilmente grandes conjuntos de dados em um RecyclerView em partes quando necessário. O Paging foi lançado como alpha1 e terá o próprio ciclo de versões.

Mudanças na API

Correções de bugs

  • As classes geradas agora serão anotadas com @Generated, se o app tiver a anotação no caminho de classe. b/35754819

  • Correção do bug de comparação do observador do MediatorLiveData. b/64413274

  • As consultas SQLite WITH agora são compatíveis com [LiveData]. [ref-LiveData] b/62510164

  • Correção de um bug em que o InvalidationTracker não enviava a lista correta se mais de uma tabela fosse observada. b/65099281

  • Correção de um bug em que a Room gerava arquivos diferentes no Windows. b/64470691

  • Agora há compatibilidade com os LifecycleObservers no pacote raiz. b/62310817

1.0.0 Alpha 9 - 16 de agosto de 2017

Correções de bugs

  • Correção de um bug no LiveData, em que o segundo Observer era ignorado quando o primeiro era removido do método onChanged. b/64285805

1.0.0 Alpha 8 - 1º de agosto de 2017

Mudanças de comportamento

  • A restrição NOT NULL foi adicionada para colunas de tipos primitivos ou colunas anotadas com NonNull. Isso modifica a estrutura das suas tabelas. Portanto, se você já utiliza os Componentes de arquitetura Alfa 7 ou uma versão anterior, será necessário implementar uma migração, caso queira manter os dados, ou usar o método fallbackToDestructiveMigration() no construtor. b/62007004

Mudanças na API

1.0.0 Alpha 7 - 26 de julho de 2017

Correções de bugs

1.0.0 Alpha 6 - 25 de julho de 2017

Mudanças de comportamento

  • A ordem das chamadas do LifecycleObserver foi alterada. Anteriormente, os observadores eram sempre chamados na ordem de adição: se observer1 fosse adicionado antes de observer2, ele receberia ON_CREATE e todos os outros eventos antes de observer2. Isso não é mais verdade para eventos de destruição, porque os observadores são chamados na ordem inversa da adição. Portanto, o comportamento atual é: se observer1 for adicionado antes de observer2, ON_CREATE será enviado primeiro para observer1, depois para observer2 (o mesmo acontece para ON_START e ON_RESUME), mas ON_PAUSE será enviado primeiro para observer2 e só então para observer1 (o mesmo para ON_STOP e ON_DESTROY).

  • A Room gera uma exceção se a migração estiver ausente. Anteriormente, a Room apenas limpava o banco de dados, mas agora ocorre uma falha. Os desenvolvedores podem optar pelo comportamento de limpeza chamando a API do builder. b/63872392

Mudanças na API

  • Método fallbackToDestructiveMigration() foi adicionado a RoomDatabase.Builder para limpar o banco de dados se a migração estiver ausente. b/63872392

  • Os Componentes de arquitetura agora dependem da Biblioteca de Suporte 26.0.0

Correções de bugs

  • Correção do tratamento de @Relation aninhado em @Embedded. b/63736065

  • Correção das migrações de teste para tabelas com chave primária autoincrementada. b/63393618

  • Agora, @Queries que executam consultas DELETE ou UPDATE recebem argumentos corretamente. b/63872538

  • Agora, os ViewModels são mantidos quando o fragmento do proprietário está na pilha de retorno, e a mudança na configuração ocorre duas vezes. b/38445801

1.0.0 Alpha 5 - 18 de julho de 2017

Mudanças na API

Você precisa depender do artefato android.arch.persistence.room:rxjava2 para adicionar compatibilidade com o RxJava para à Room.

Correções de bugs

  • Correção de consultas @Delete sem nenhum parâmetro. b/63608092

  • Correção de verificações de tipo da Room para getters e setters. b/63733651

1.0.0 Alpha 4 - 11 de julho de 2017

Mudanças na API

  • Um novo método de conveniência (runInTransaction()) foi adicionado a RoomDatabase.

  • Os métodos @Insert, @Delete e @Update agora podem ter parâmetros de diferentes tipos de entidade. b/62682405

Correções de bugs

  • Correção do processamento de byte[] nos métodos @Dao. b/62460045

  • A verificação de migração na Room agora usa uma comparação que ignora a diferença entre maiúsculas e minúsculas. b/62875382

  • Correção da configuração Proguard para o artefato Lifecycles. b/62113696

1.0.0 Alpha 3 - 15 de junho de 2017

Mudanças na API

  • Agora, @OnLifecycleEvent é compatível apenas com um parâmetro de evento. Essa mudança visa prepará-lo para a compatibilidade com Java 8, para que possamos migrar para interfaces com métodos padrão no futuro. Em relação a essa mudança, apenas os métodos anotados com @OnLifecycleEvent(ON_ANY) podem receber um segundo parâmetro do tipo Event (o primeiro parâmetro é o LifecycleOwner). Consulte os documentos do Lifecycle para saber mais detalhes.

  • As classes LifecycleActivity e LifecycleFragment foram movidas para o artefato android.arch.lifecycle:extensions.

  • MigrationTestHelper recebe a instância de Instrumentation em vez de Context para poder ler o esquema dos recursos de teste e criar o banco de dados no contexto do aplicativo.

  • As anotações @Insert, @Delete e @Update nos métodos @DAO agora podem ter Iterable como tipo de parâmetro. b/62259820

Correções de bugs

  • Métodos modificados por eventos de ciclo de vida não são mais chamados várias vezes.

  • Vários parâmetros IN agora são tratados corretamente. b/62608681

  • As classes abstratas do DAO agora podem ter um construtor que recebe a instância @Database. b/38488747

  • Agora, o DAO pode ter uma superclasse ou superinterface com parâmetros de tipo. b/62103620

1.0.0 Alpha 2 - 2 de junho de 2017

Mudanças na API

Correções de bugs

  • Arquivos Proguard para Lifecycles. (b/62113696)
  • Perda de dados com conversores de tipo. (b/62100716)
  • Permite retornar Long[] de consultas @Insert.

1.0.0 Alpha 1 - 17 de maio de 2017

MinSDK: 14

Alertas gerais

  • Embora tenhamos realizado muitos testes antes do lançamento, os Componentes de arquitetura estão atualmente na versão Alfa. Se você estiver criando um app de produção, saiba que a API será alterada antes da versão 1.0 e pode não ser totalmente robusta. Se você não tem a intenção de depurar problemas nas bibliotecas que utiliza, recomendamos testar primeiro os Componentes de arquitetura em projetos paralelos.

  • Não estamos recomendando que todos migrem hoje mesmo. Prepararemos um guia de migração para a versão 1.0 dos componentes de arquitetura.

Limitações e problemas conhecidos