Arquivo de notas da versão de Componentes de arquitetura

15 de janeiro de 2019

WorkManager

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

Correções de bugs

  • Correção de 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 de nível 23) (b/121998363).
  • Correção de uma ConcurrentModificationException em dispositivos com Android 5.1 (API de nível 22) ou anterior (b/121345393).
  • Correção da execução incorreta do trabalho quando Restrições não eram cumpridas em dispositivos com Android 5.1 (API de nível 22) ou anterior (b/122578012).
  • Otimizado o manuseio da conclusão do trabalho para ganhar agilidade em alguns casos extremos (b/122358129).
  • Foi adicionada uma mudança para solucionar possíveis disputas entre várias instâncias de LiveData usadas pela 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 da WorkManager 1.0.0-beta01. Essa versão não tem mudanças de API. Futuramente, espera-se que a 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 da Navigation 1.0.0-alpha09. Essa versão contém mudanças interruptivas 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 de navigate() corretas estão sendo feitas. Essa abordagem é discutida em detalhes na palestra Atividade Única na Conferência de Desenvolvedores Android 2018 (vídeo em inglês), e vamos providenciar outra documentação, especificamente com relação a testes com Navigation.

Novos recursos

  • MenuItems com menuCategory="secondary" não vão mais ser exibidos na backstack quando usados com métodos NavigationUI (b/120104424).
  • AppBarConfiguration agora permite que você defina uma instância substituta de OnNavigateUpListener que é chamada quando navController.navigateUp() retorna false b/79993862 b/120690961.

Alterações interruptivas

  • Ao usar um <argument> com um argType="reference", o Navigation não vai mais analisar a referência, mas vai fornecer o próprio ID de recurso bruto (b/111736515).
  • 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).
  • 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).

Correções de bugs

  • Agora, os argumentos são analisados corretamente nos 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 da 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 de 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).

Alterações interruptivas da API

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

6 de dezembro de 2018

Paging

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

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

Novos recursos

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

Alterações interruptivas

  • OnNavigatedListener foi renomeado como 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 backstack (b/119628354).
  • ActivityNavigator.Extras agora usa um padrão Builder e adiciona a capacidade de definir qualquer flag Intent.FLAG_ACTIVITY_ (aosp/828140).
  • NavController.onHandleDeepLink foi renomeado como handleDeepLink aosp/836063.
  • Muitas classes e métodos que não se destinam à subclassificação, como NavOptions, NavInflater, NavDeepLinkBuilder e AppBarConfiguration, se tornaram final (aosp/835681).
  • O método NavHostFragment.setGraph() descontinuado foi removido (aosp/835684).
  • O método NavigationUI.navigateUp(DrawerLayout, NavController) descontinuado foi removido (aosp/835684).
  • A criação de Fragment 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, em vez de 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 pop para o NavController. Considere usar um OnBackPressedCallback para interceptar o pressionamento do botão "Voltar" e chamar navController.popBackStack() (aosp/833716).

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.

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 funciona com matrizes de todos os tipos com suporte (b/111487504).
  • O Safe Args agora ignora subpastas de diretórios de recursos (b/117893516).
  • O Safe Args adiciona anotações @Override quando adequado (b/117145301).

5 de dezembro de 2018

WorkManager

Lançamento da 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>.
  • O suporte ao Firebase JobDispatcher foi removido devido à descontinuação de uso iminente. Isso significa que o artefato work-firebase não vai 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.
  • Foram adicionados Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit), Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) e variantes para oferecer melhor suporte a URIs de conteúdo de acionamento lento (b/119919774).
  • Adição da 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 o 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 as variantes WorkContinuation.combine(OneTimeWorkRequest, *). Elas apresentavam uma API confusa. Os métodos combine já existentes são mais compreensíveis. Essa é uma alteração interruptiva.

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.
  • O LiveData que é observado com observeForever é rastreado pela WorkManager. Essa é uma retrocompatibilidade de uma correção da 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).
  • Correção especulativa para Shield Tablets com a API 24, que às vezes gerava uma IllegalArgumentException (b/119484416).

Alterações interruptivas da API

  • O suporte ao Firebase JobDispatcher foi removido devido à descontinuação de uso iminente. Isso significa que o artefato work-firebase não vai 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 o 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 as 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 pelo 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 de suspensão. Para suporte a funções de suspensão no Room, foi lançado um novo artefato, o room-coroutines (b/69474692).
  • Os métodos DAO anotados com @Insert, @Delete ou @Update agora oferecem suporte a ListenableFuture como tipo de retorno (b/119418331).

Correções de bugs

  • Foi corrigido um bug em que o Room tentava incorretamente encontrar um construtor com colunas na propriedade ignoredColumns de @Entity (b/119830714).
  • Foi corrigido um bug em que o Room não marcava os parâmetros do método DAO como finais na implementação gerada (b/118015483).
  • Foi corrigido um bug em que o processador do Room falhava ao relatar um erro em uma consulta com símbolos especiais (b/119520136).
  • Foi corrigido um bug em que o Room recusava diversas outras implementações Collection como argumentos de uma expressão IN (b/119884035).
  • Foi corrigido um bug em que o LiveData retornado do 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 da 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 correspondentes do método getStatus 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.
  • Os 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 renomeados 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 WorkManager mais de uma vez por processo agora resulta em uma IllegalStateException. Essa é uma alteração interruptiva.

Correções de bugs

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

Alterações interruptivas da API

  • WorkStatus foi renomeado como WorkInfo. Todas as variantes correspondentes do método getStatus 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 renomeados 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 da 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

  • Foi adicionado suporte para referenciar @DatabaseView em um @Relation (b/117680932).

Correções de bugs

  • Foi corrigido um bug em que o Room executava E/S de disco na linha de execução principal ao assinar e descartar um tipo de retorno Rx (b/117201279).
  • Foi corrigido um bug em que o Room não conseguia encontrar um conversor de tipo adequado para um campo em uma classe de entidade Kotlin (b/111404868).
  • Foi corrigido um bug em que o Room gerava código incorreto para uma implementação da interface DAO com um método padrão 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

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

Novos recursos

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

Alterações interruptivas

  • O módulo navigation-testing-ktx foi incorporado no navigation-testing artifact e não vai mais ser 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.
  • Não há mais suporte a gráficos de navegação registrados com manifestos de metadados (b/118355937).
  • As ações não podem mais ser anexadas a destinos de <activity> aosp/785539.

Correções de bugs

  • Os links diretos agora analisam os parâmetros de consulta corretamente (b/110057514).
  • Os destinos de atividade agora aplicam corretamente todas as animações de entrada e saída (b/117145284).
  • Corrigidas falhas que ocorrem depois que a configuração é alterada ao usar Navigators personalizados (b/110763345).

Safe Args

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

12 de outubro de 2018

Paging

A Paging 2.1.0-alpha01 foi lançada 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.
  • Foi adicionado o AsyncPagedListDiffer.addPagedListListener() para detectar quando a PagedList foi trocada (b/111698609).
  • Foi adicionada a variante PagedListAdapter.onCurrentListChanged(), que transmite a lista antiga e a nova. A variante anterior foi descontinuada.
  • Foram adicionadas variantes PagedListAdapter/AsyncPagedListDiffer.submitList() que recebem um callback extra que é acionado se/quando a pagedlist é mostrada, 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

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

11 de outubro de 2018

WorkManager

A biblioteca WorkManager 1.0.0-alpha10 foi lançada 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 a 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 para 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. ListenableFuture<Void> foi adicionado como o tipo de retorno de vários métodos na API. Essa é uma alteração interruptiva 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 da 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 já existentes que retornaram LiveData para ter explicitamente "LiveData" como parte do nome (por exemplo, getStatusesByIdLiveData(UUID)). Essa é uma alteração interruptiva 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.
  • Configurações do ProGuard foram adicionadas para manter o novo construtor Worker (b/116296569).
  • Correção de possível NullPointerException em uma disputa em que o trabalho era REPLACE (b/116253486 e b/116677275).
  • WorkContinuation.combine() agora aceita um ou mais WorkContinuations em vez de dois ou mais (b/117266752).

Alterações interruptivas 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: o Room agora oferece suporte a entidades com uma tabela de mapeamento FTS3 ou FTS4 (em inglês). 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 mais personalização estão disponíveis usando métodos da anotação (b/62356416).
  • Views: o Room agora tem suporte à declaração de uma classe como consulta armazenada, também conhecida como view (em inglês), usando a anotação @DatabaseView (b/67033276).
  • Valor automático: o Room agora oferece suporte à declaração de classes com a anotação AutoValue (em inglês) como entidades e POJOs. As anotações do 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 que o Room as interprete corretamente (b/62408420).
  • Suporte a outros tipos de retorno Rx: métodos do DAO anotados com @Insert, @Delete ou @Update agora oferecem suporte aos tipos de retorno Rx Completable, Single<T> e Maybe<T> (b/63317956).
  • Tipos imutáveis com @Relation: o Room antes exigia que os campos anotados @Relation fossem configuráveis, mas agora podem ser parâmetros do construtor.
  • enableMultiInstanceInvalidation: 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: nova API em RoomDatabase.Builder para recriar automaticamente o banco de dados em caso de downgrade (b/110416954).
  • ignoredColumns: 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 foram @Deprecated (descontinuados) e vão ser removidos na próxima versão principal do Room (b/76109329).

Correções de bugs

  • Foram corrigidos dois problemas em que o Room não se recuperava corretamente de um banco de dados corrompido ou de uma migração incorreta durante a inicialização (b/111504749, b/111519144).
  • Agora, o Room usa 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. A Paging 2.0.0 foi lançada 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 de uma regra Proguard do ViewModel que removia incorretamente os construtores. b/112230489

20 de setembro de 2018

A Navigation 1.0.0-alpha06 foi lançada 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.

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

Safe Args

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

19 de setembro de 2018

WorkManager

A WorkManager 1.0.0-alpha09 foi lançada 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:

Groovy

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

Kotlin

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

Correções de bugs

  • Adição de outra correção necessária para o erro "100 jobs" (b/115560696).
  • Foram adicionadas algumas correções para erros de restrição de chave externa devido a disputas (b/114705286).
  • Chamadas ConstraintTrackingWorker.onStopped(boolean) foram delegadas para o Worker subjacente (b/114125093).
  • Imposição do atraso mínimo de retirada correto para o Firebase JobDispatcher (b/113304626).
  • Melhoradas as 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 da 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 da WorkManager vão remover 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 vai oferecer suporte com o eventual envio de NonBlockingWorker.
  • Foi adicionada a capacidade de acionar o trabalho cronometrado no TestDriver usando TestDriver.setInitialDelayMet(UUID) e TestDriver.setPeriodDelayMet(UUID) (b/113360060).

Mudanças importantes

  • 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

A WorkManager 1.0.0-alpha08 foi lançada com correções de bugs.

Correções de bugs

  • Os componentes da WorkManager foram explicitamente identificados como sem reconhecimento de inicialização direta para que não sejam acionados nessa fase. No futuro, forneceremos uma versão da WorkManager com reconhecimento de inicialização direta (b/112665532).
  • Correção de um problema em que o trabalho repetido não era executado (b/112604021).
  • Correção de 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

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

Correções de bugs

  • Correção de 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).
  • Correção de uma ConcurrentModificationException em ConstraintTracker (b/112272753).
  • Mudadas as anotações de tipo de retorno de Data.getBooleanArray(String) e Data.getIntArray(String) para @Nullable em vez de @NonNull (b/112275229).

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 com suporte total a 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).
  • 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

A Navigation 1.0.0-alpha05 foi lançada com correções de bugs.

Correções de bugs

  • Correção de um bug que causa um comportamento incorreto da backstack (b/111907708).
  • Correção de um bug em equals() de classes Generated Args (b/111450897).
  • Correção de um erro de compilação no 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 das bibliotecas 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

A WorkManager 1.0.0-alpha06 foi lançada 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).
  • Corrigida uma disputa ao rastrear restrições que causava falhas no WorkManager (googlecodelabs/android-workmanager/issues/56).
  • Criadas WorkRequests exclusivas ao usar WorkRequest.Builder#build() (b/111408337).
  • Permissão do uso de RescheduleReceiver somente quando houver WorkRequests que precisem dele (b/111765853).

24 de julho de 2018

WorkManager

A WorkManager 1.0.0-alpha05 foi lançada 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 é inicializado corretamente manualmente, o método gera uma IllegalStateException. Essa é uma alteração interruptiva da API.
  • Foi adicionada uma nova API, Configuration.Builder.setMinimumLoggingLevel(int), que pode controlar o detalhamento da WorkManager. Por padrão, a 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 alteração interruptiva da API.

Correções de bugs

  • A 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).
  • Correção de um problema com PeriodicWorkRequests que não eram executados corretamente depois da ativação do modo Soneca no dispositivo (b/111469837).
  • Correção de um problema com atrasos iniciais ao usar o Firebase JobDispatcher (b/111141023).
  • Correção de certos problemas de disputa e timing 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 a permissão para TestScheduler.setAllConstraintsMet(UUID) ser chamado antes ou depois de enfileirar o WorkRequest especificado (b/111238024).

Mudanças importantes

  • 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

A biblioteca 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 vai 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).

Safe Args

  • Alteração interruptiva: app:type mudou 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).

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

A biblioteca 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 "false" quando o backstack está vazio ou quando o código de destino fornecido não consta no backstack (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).

Safe Args

  • Alteração interruptiva:caracteres não alfanuméricos em nomes de ação e argumento vão ser substituídos pelo estilo CamelCase nos respectivos nomes de método do NavDirections.
    • Por exemplo, DemoController.index se torna setDemoControllerIndex (b/79995048).
    • Por exemplo, action_show_settings se torna actionShowSettings (b/79642240).
  • 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

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 das bibliotecas Lifecycle, Room e Paging com versão 2.0.0-beta01.

Lifecycle

Correções de bugs

  • A regra Proguard do LifecycleObserver foi corrigida 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

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

Correções de bugs

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

Paging

Correções de bugs

  • O conteúdo ausente em alguns casos de prefixo (marcadores de posição desativados, PositionalDataSource) foi corrigido (b/80149146).
  • 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

A Paging 1.0.1 foi lançada com uma única correção de bug em runtime. É altamente recomendável usar a 1.0.1 por questão de estabilidade. A Paging RxJava2 1.0.1 também foi liberada e é idêntica à 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 da 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).

  • Adição de anotações de anulação a várias APIs da 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 caso você decida reverter para uma versão mais antiga da WorkManager (b/74633270).

  • Correção de 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 da WorkManager 1.0.0-alpha03.

Correções de bugs

  • Correção de uma disputa na implementação baseada no AlarmManager (b/80346526).

  • Correção de 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).

  • Correção de uma falha ao reposicionar um WorkRequest na fila (b/109572353).

  • Correção de avisos do compilador Kotlin ao usar a dependência work-runtime-ktx.

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

Mudanças na API

  • Adição de 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).

  • Foi adicionado suporte a JobParameters#getNetwork() na API de nível 28. Ele é exposto por 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).

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

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

  • Adição de WorkManager.pruneWork() para remover os jobs concluídos do banco de dados interno (b/79950952, b/109710758).

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

Mudanças importantes

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

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 fragmentos ao usar launchSingleTop (b/79407969).

  • O Navigation agora cria a backstack 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).

Mudanças na API

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

  • O uso do atributo launchDocument das ações e da API associada em NavOptions foi suspenso (b/109806636).

24 de maio de 2018

Lançamento da WorkManager 1.0.0-alpha02.

WorkManager

Correções de bugs

  • Correção de um NullPointerException em State.isFinished() (b/79550068).

  • Correção de um problema que fazia com que Workers fossem reprogramados em Application.onCreate() (b/79660657).

  • Correção de 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 localidades que não falam inglês (b/80065360).

  • Suporte adicionado para floats em Data (b/79443878).

  • Data.Builder.putAll() agora retorna uma instância de Builder (b/79699162).

  • 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 androidx.work. O uso das extensões antigas foi descontinuado, e elas vão ser removidas em uma versão futura.

  • O uso de Configuration.withExecutor() foi descontinuado. Use Configuration.setExecutor().

16 de maio de 2018

Lançamento da Paging RxJava2 1.0.0-rc1 e da 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

A Paging rxjava2 está progredindo para se tornar candidata 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 de Paging 1.0.0 e Room 1.1.0, com os Alfas de dois novos Componentes de arquitetura: Navigation e WorkManager.

Paging e Room não trazem alterações desde os últimos candidatos a lançamento.

Nova biblioteca: Navigation

Navigation oferece um framework para criar a navegação no app. Essa versão inicial é 1.0.0-alpha01.

Nova biblioteca: WorkManager

WorkManager simplifica a programação e a execução de trabalhos em segundo plano garantidos e com reconhecimento de restrições. Essa 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, a Navigation e a 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

  • O 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 a Paging versão 1.0.0. Faça upgrade dos seus projetos para usar 1.0.0-rc1 e ajude a testá-la para que possamos lançar uma versão 1.0.0 sólida.

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 das bibliotecas Room 1.1.0-beta2, Paging 1.0.0-beta1 e Paging RxJava 1.0.0-alpha1.

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

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

Essa nova biblioteca traz uma alternativa à 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

  • O RxPagedListBuilder foi adicionado com o novo artefato android.arch.paging:rxjava2.

Mudanças na API

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

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

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

  • O membro PagedList.mCallbacks foi corrigido 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).

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/130723565).

21 de março de 2018

Lançamento das bibliotecas Room 1.1.0-beta1, Paging 1.0.0-alpha7 e Lifecycle 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.

  • Agora, @RawQuery aceita qualquer Pojo para a propriedade observedEntities, desde que ele 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 é processada corretamente com dependências de várias tabelas (como relações e mesclagens). Anteriormente, essas falhas não acionavam novos resultados ou poderia ocorrer falha de compilaçãoSimpleSQLiteQuery (b/74128314).

Lifecycle

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

Paging

Lançamento da Paging 1.0.0-alpha7 junto com a Lifecycle 1.1.1. Como a 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.

A Paging alpha7 está sendo planejada 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 unir o DataSource ou testar diretamente um DataSource com um callback simulado b/72600421.
  • Mapeadores para DataSource e DataSource.Factory
    • map(Function<IN,OUT>) permite que você transforme, una 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() foi adicionado como um método de conveniência (b/72611341).
  • Todas as classes descontinuadas foram removidas da API, incluindo os elementos remanescentes do pacote recyclerview.extensions e o LivePagedListProvider.
  • DataSource.Factory foi modificada de uma interface para uma classe abstrata para ativar a funcionalidade do mapa.

Correções de bugs

  • Builders foram alterados para serem finais (b/70848565).
  • A implementação de DataSource do Room agora foi corrigida para processar consultas de várias tabelas. Essa correção está presente no Room 1.1.0-beta1, confira acima.
  • Correção de um bug em que o BoundaryCallback.onItemAtEndLoaded não seria invocado para PositionalDataSource se os marcadores estivessem ativados e se o tamanho total fosse 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 da classe 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 da 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

A Paging 1.0.0-alpha6 foi lançada junto com a Biblioteca de Suporte versão 27.1.0. ListAdapter e algumas classes relacionadas foram movidas da Biblioteca Paging diretamente para a Recyclerview, com algumas renomeações para tornar mais clara a função de certas classes. Essa versão Alfa da 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 tempo de execução de paginação:
    • PagedListAdapterHelper -> AsyncPagedListDiffer

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

** Guia de migração para a Paging alpha6: **

  • Atualizar as dependências da Paging e da recyclerview para android.arch.paging:runtime:1.0.0-alpha6 e com.android.support:recyclerview-v7:27.1.0
    • Isso precisa ser feito simultaneamente porque ListAdapter foi movido da Paging para a 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ções iniciais para o carregamento inicial quando os marcadores de posição 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 mais recente 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 problemas para encontrar caminhos de migração de downgrade (b/72153525).

  • Tipos de coluna não padrão agora são processados adequadamente ao migrar de um banco de dados existente para a Room (b/71953987).

  • A Room agora processa corretamente campos boolean? persistentes nas classes Kotlin (b/72786402).

22 de janeiro de 2018

Lançamento das bibliotecas Lifecycle 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 descontinuados. Use FragmentActivity, AppCompatActivity ou ofereça suporte a Fragment.
  • Adicionadas anotações @NonNull a ViewModelProviders e ViewModelStores
  • O construtor ViewModelProviders foi descontinuado. Use os métodos estáticos dele diretamente.
  • O uso de ViewModelProviders.DefaultFactory foi descontinuado. 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, permitindo as migrações destrutivas de versões iniciais do esquema, em relação a fallbackToDestructiveMigration (b/64989640).
  • O Room agora tem suporte apenas às APIs Paging mais atualizadas (alpha-4 e mais recentes). O suporte ao LivePagedListProvider foi descontinuado. 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).
  • Foram criados mais registros para rastrear o bug IllegalArgumentException b/70360195 (e suposta correção do lado do Room).
  • Correções de código de amostra Javadoc (b/70411933, b/71467637).

11 de dezembro de 2017

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

Correções de bugs

  • Não verifique os parâmetros de callback para fontes de dados inválidas (b/70353706, b/70360195).

7 de dezembro de 2017

A Paging alpha4 foi lançada, 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 a ausência de delimitação 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 fornece o mesmo recurso com mais personalização e padrões mais simples. A fábrica 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 a 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 a 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 da Lifecycle.

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/624732121).
    • Os métodos Query agora podem ser anotados com @Transaction. Consulte os 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.
  • Lifecycle:

    • LiveData funciona corretamente quando a Atividade está parcialmente coberta na API anterior à 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)

    • Lifecycle agora retém um WeakReference para o LifecycleOwner para evitar o vazamento do LifecycleOwner se o Lifecycle for mantido na memória por mais tempo do que o normal. Isso é apenas uma precaução. Você ainda precisa ter cuidado para não vazar o Lifecycle.

9 de outubro de 2017

A Paging alpha-3 foi lançada, o que a torna compatível com a versão beta 2 da Lifecycle e da Room.

Correções de bugs

  • Documentação da Paging aprimorada.

5 de outubro de 2017

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

Correções de bugs

  • Lifecycle:

    • LiveDataReactiveStreams agora cancela a inscrição do editor de origem corretamente quando LiveData não está ativo (b/62609183).
    • Os eventos de ciclo de vida são propagados corretamente para as classes pai quando a classe pai é de outro módulo (b/63474615).
    • O LiveData é processado corretamente com observadores quando eles cancelam a inscrição durante a criação da assinatura (b/66337741).
    • FullLifecycleObserver para o artefato da 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, a Room só imprimirá um aviso (b/67115337).
    • A Room agora valida índices em versões mais recentes do SO (b/6313283).
    • 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 processa corretamente a reentrada no modo de teste (b/6547271).
    • 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 alterações na API. Mudanças não planejadas podem acontecer, mas o critério para fazer qualquer alteração na API estável 1.0.01.0.0 está muito severo 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 da Paging agora é alpha 2
  • Nenhuma mudança na Lifecycle (tempo de execução, comum) e na Arch Core (comum). Esses dois artefatos estão na versão 1.0.0 desde 13 de setembro.

Novos artefatos

  • A Lifecycle agora tem 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 da 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, portanto, a menos que você os utilize diretamente, não será necessário alterar 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/649292391
        ).
      • 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 da 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)
  • Paginação:
    • O artefato da Paging não depende mais do junit (b/65690921).

1.0.0 Alpha 9-1 - 13 de setembro de 2017

Esta é uma versão principal em que os artefatos centrais da 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 chamada Paging, que permite carregar facilmente grandes conjuntos de dados em uma RecyclerView em partes quando necessário. A Paging foi lançada 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 a classe InvalidationTracker não enviaria 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).

  • LifecycleObservers no pacote raiz agora são compatíveis (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

  • Correção de erro crítico no método removeObserver do LifecycleRegistry, que interrompia uma nova adição do LifecycleObserver.

  • Correção da classe InvalidationTracker para bancos de dados personalizados (b/63162311).

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

  • Adicionado método fallbackToDestructiveMigration() 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 Lifecycle. 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 é uma mudança para 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 da 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 processados 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