Notas da versão dos Componentes de arquitetura

Esta página fornece informações sobre as versões dos Componentes de arquitetura, incluindo os problemas conhecidos, as limitações e os avisos gerais. Leia estas notas antes de usar os Componentes de arquitetura.

Seu feedback é essencial. Informe os problemas usando o Rastreador de problemas para que possamos integrar seu feedback à versão final.

6 de dezembro de 2018

Paging

O Paging 2.1.0-rc01 foi lançado sem alterações da 2.1.0-beta01.

O Navigation 1.0.0-alpha08 foi lançado. Esta versão contém alterações importantes da API. Consulte a seção Alterações importantes abaixo.

Novos recursos

  • As etiquetas de destino, quando usadas com os métodos NavigationUI, agora 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

Alterações 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 métodos associados deles 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 sinalizador 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 o 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
  • O NavigatorProvider agora é uma classe, em vez de uma interface. O NavigatorProvider retornado por getNavigatorProvider() não teve a funcionalidade alterada. osp/830660
  • NavDestination.navigate() foi removido. Em vez disso, chame navigate() no Navigator. osp/830663
  • Refatoração significativa do Navigator, removendo a necessidade de OnNavigatorNavigatedListener e fazendo com que navigate retorne o NavDestination para o qual a navegação ocorreu.
  • As instâncias do Navigator não podem mais enviar eventos exibição 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 um 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 objetos 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
  • Safe Args funciona com matrizes de todos os tipos compatíveis b/111487504
  • Safe Args agora ignora subpastas de diretórios de recursos b/117893516
  • Safe Args adiciona anotações @Override quando apropriado b/117145301

5 de dezembro de 2018

WorkManager

O WorkManager 1.0.0-alpha12 foi lançado. Esta versão contém alterações importantes da API. Consulte a seção Alterações importantes da API abaixo. Esta versão provavelmente será lançada como nosso primeiro Beta. alpha12 também contém extensas atualizações da documentação.

Alterações na API

  • Um novo artefato, work-rxjava2, apresenta RxWorker. Este é 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 entrarmos na versão Beta. Pretendemos adicionar uma alternativa no futuro.
  • Payload foi combinado com Result. Result agora é uma "classe fechada" com três implementações concretas, que você pode adquirir por meio de Result.success() (ou Result.success(Data)), Result.failure() (ou Result.failure(Data)) e Result.retry(). Seu ListenableFuture agora resulta em Result em vez de Payload. Worker não possuem métodos getter e setter para os Data de saída. Essa é uma alteração importante.
  • Adição de Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit), Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) e variantes para oferecer melhor compatibilidade com 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.
  • Adição dos métodos de extensão Kotlin Operation.await() e ListenableFuture.await().
  • Operation.getException() foi renomeado para Operation.getThrowable(). Essa é uma alteração importante.
  • A classe ContentUriTriggers e os métodos que fazem referência a ela não estão mais disponíveis para uso público. Essa é uma alteração importante.
  • O restante dos métodos varargs foi removido no WorkManager, WorkContinuation e OneTimeWorkRequest para simplificar a API. Para corrigir qualquer problema de versão, você pode agrupar seus varargs existentes com Arrays.asList(...). Ainda incluímos versões de argumento único de cada método. Essa é uma alteração importante.
  • As variantes de WorkContinuation.combine(OneTimeWorkRequest, *) foram removidas. Elas apresentavam uma API confusa. Os métodos combine existentes são mais compreensíveis. Essa é uma alteração 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 que é observado via observeForever é rastreado por meio do WorkManager. Esta é uma retrocompatibilidade de uma correção de biblioteca Room. b/74477406
  • Data.Builder.build() agora gera uma exceção se o objeto serializado exceder o tamanho máximo. Antes, isso só acontecia em um encadeamento em segundo plano em que não era possível lidar com isso corretamente.
  • Maior diferenciação entre o trabalho parado e o cancelado. getWorkInfoById() retornará um WorkInfo com o State CANCELLED durante ListenableWorker.onStopped().
  • Tratar Results null como falhas no ListenableWorker. b/120362353
  • Correção especulativa para Shield Tablets executando a API 24, que às vezes gerava uma IllegalArgumentException. b/119484416

Alterações 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 entrarmos na versão Beta. Pretendemos adicionar uma alternativa no futuro.
  • Payload foi combinado com Result. Result agora é uma "classe fechada" com três implementações concretas, que você pode adquirir por meio de Result.success() (ou Result.success(Data)), Result.failure() (ou Result.failure(Data)) e Result.retry(). Seu ListenableFuture agora resulta em Result em vez de Payload. Worker não possuem métodos getter e setter para os Data de saída.
  • Adição dos métodos de extensão Kotlin Operation.await() e ListenableFuture.await().
  • Operation.getException() foi renomeado para Operation.getThrowable().
  • A classe ContentUriTriggers e os métodos que fazem referência a ela não estão mais disponíveis para uso público.
  • O restante dos métodos varargs foi removido no WorkManager, WorkContinuation e OneTimeWorkRequest para simplificar a API. Para corrigir qualquer problema de versão, você pode agrupar seus varargs existentes com Arrays.asList(...). Ainda incluímos versões de argumento único de cada método.
  • As variantes de WorkContinuation.combine(OneTimeWorkRequest, *) foram removidas. Elas apresentavam uma API confusa. Os métodos combine existentes são mais compreensíveis.

4 de dezembro de 2018

Room

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

Alterações 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

  • Couroutines: os métodos DAO agora podem ser funções suspensas. Para compatibilidade com funções suspensas 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 outras implementações de diversas 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

O WorkManager 1.0.0-alpha11 foi lançado. Esta versão contém muitas alterações que se tornarão estáveis na API em beta. Existem alterações importantes na API nesta versão. Consulte a seção Alterações importantes da API abaixo.

Alterações na API

  • work-runtime-ktx apresenta um novo CoroutineWorker.
  • WorkStatus foi renomeado para WorkInfo. Todas as variantes correspondentes do método getStatus foram renomeadas para as variantes getWorkInfo correspondentes. Essa é uma alteração importante.
  • ListenableWorker.onStopped() não aceita mais ter um argumento booleano que representa se WorkRequest foi cancelado. WorkManager não faz mais essa distinção. Essa é uma alteração importante.
  • O pacote androidx.work.test foi renomeado para o pacote androidx.work.testing. Essa é uma alteração importante.
  • Setters em Constraints não fazem mais parte da API pública. Esta é uma a alteração importante.
  • WorkerParameters.getTriggeredContentUris() e WorkerParameters.getTriggeredContentAuthorities() retornavam matrizes antes. Agora, esses métodos retornam Coleções. Essa é uma alteração importante.
  • ListenableWorker.onStartWork() foi renomeado para ListenableWorker.startWork(). Essa é uma alteração importante.
  • O construtor do WorkStatus não faz mais parte da API pública. Essa é uma alteração importante.
  • Configuration.getMaxJobSchedulerID() e Configuration.getMinJobSchedulerID() foram renomeados para Configuration.getMinJobSchedulerId() e Configuration.getMaxJobSchedulerId(), respectivamente. Essa é uma alteração importante.
  • Adição de muitas anotações @NonNull à API pública para melhorar a ergonomia da API.
  • Adição da API WorkManager.enqueueUniqueWork() para enfileirar OneTimeWorkRequests únicas sem precisar criar um WorkContinuation.
  • Todas as variantes dos métodos enqueue e cancel no WorkManager agora retornam um novo tipo de Operation. Essa é uma alteração importante.
  • Todas as variantes de enqueue não aceitam mais varargs para WorkRequests. Essa é uma alteração importante. 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 resultará em uma IllegalStateException. Essa é uma alteração importante.

Correções de bugs

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

Alterações importantes da API

  • WorkStatus foi renomeado para 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 que representa se WorkRequest foi cancelado. WorkManager não faz mais essa distinção.
  • O pacote androidx.work.test foi renomeado para o pacote androidx.work.testing.
  • Os setters em Constraints não fazem mais parte da API pública.
  • WorkerParameters.getTriggeredContentUris() e WorkerParameters.getTriggeredContentAuthorities() retornavam matrizes antes. Agora, esses métodos retornam Coleções.
  • ListenableWorker.onStartWork() foi renomeado para ListenableWorker.startWork().
  • O construtor do WorkStatus não faz mais parte da API pública.
  • Configuration.getMaxJobSchedulerID() e Configuration.getMinJobSchedulerID() foram renomeados para Configuration.getMinJobSchedulerId() e Configuration.getMaxJobSchedulerId(), respectivamente.
  • Todas as variantes dos métodos enqueue e cancel no WorkManager agora retornam um novo tipo de Operation.
  • Todas as variantes de enqueue não aceitam mais varargs para WorkRequests.
  • A tentativa de initialize WorkManager mais de uma vez por processo agora resultará em uma IllegalStateException.

1º de novembro de 2018

Paging

O Paging 2.1.0-beta01 foi lançado sem alterações da 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 referenciar um @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 erro 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 alterações 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 são compatíveis com esquemas personalizados com períodos, hifens e sinais de adição. b/112806402

Alterações importantes

  • O módulo navigation-testing-ktx foi inserido no navigation-testing artifact e não será mais publicado.
  • O artefato de navigation-testing agora tem uma dependência na biblioteca padrão do 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

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 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
  • 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 principais, queda de página e bibliotecas de extensão KTX para cada artefato, além de várias outras alterações de API e correções de bugs.

Alterações 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 uma alternativa Kotlin para PagedList.Config.Builder
  • Adição de androidx.paging.PagedList() como uma alternativa Kotlin para PagedList.Builder
  • Adição de DataSourceFactory.toLiveData() como uma alternativa Kotlin para LivePagedListBuilder
  • Adição de DataSourceFactory.toObservable() e toFlowable() como alternativas Kotlin para RxPagedListBuilder
  • Adição de AsyncPagedListDiffer.addPagedListListener() para ouvir quando PagedList é trocado. b/111698609
  • Adição da 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 adicional que é acionado se/quando a pagedlist é exibida, após a diferenciação. Isso permite que você sincronize uma troca de PagedList com outras atualizações da IU. b/73781068
  • Adição de PagedList.getLoadedCount() para informar quantos itens estão na memória. Observe que o valor de retorno é sempre igual a .size() se os marcadores de posição estiverem desativados.

Correções de bugs

  • Correção de 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.
  • Correção de um caso em que um tamanho de carga inicial extremamente pequeno junto com dados inalterados resultava em nenhum carregamento adicional. b/113122599

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 alterações importantes na API nesta versão. Consulte a seção Alterações 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.

Alterações na API

  • Remoção de todos os métodos e classes anteriormente deprecated, especialmente o construtor Worker padrão. Essa é uma alteração importante 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 no encadeamento principal. Cabe a você iniciar e processar o trabalho de forma assíncrona. Quando terminar, atualize o ListenableFuture. As implementações de referência de ListenableFutures são fornecidas no pacote Futures em alpha02 (veja abaixo a seção WorkManager).
    • Worker estende o ListenableWorker e ainda opera 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 de 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 importante.
  • Remoção de WorkManager.synchronous(), WorkContinuation.synchronous() e todos os métodos relacionados. Adição de ListenableFuture<Void> como o tipo de retorno de muitos métodos na API. Essa é uma alteração importante da API.
    • Agora é possível adquirir e observar de forma assíncrona usando ListenableFutures. 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 assim que a operação for concluída.
    • Observe que esses ListenableFutures não informam se a operação foi bem-sucedida ou falhou, apenas que eles terminaram. 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á dentro do contrato Futures.
    • Para manter a paridade com os métodos getStatus* síncronos, fornecemos variantes de ListenableFuture e renomeamos os existentes que retornaram LiveData para ter explicitamente "LiveData" como parte do nome (por exemplo, getStatusesByIdLiveData(UUID)). Essa é uma alteração 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 de versão anteriores, excluindo exclude 'META-INF/proguard/androidx-annotations.pro' do seu arquivo do Gradle.
  • Adição das configurações Proguard para manter o novo construtor Worker. b/116296569
  • Correção da possível NullPointerException em uma disputa em que o trabalho foi REPLACE. b/116253486 e b/116677275
  • WorkContinuation.combine() agora aceita uma ou mais WorkContinuations em vez de duas ou mais. b/117266752

Alterações importantes da API

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

Futures

O Futures 1.0.0-alpha02 foi lançado.

Alterações na API

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

8 de outubro de 2018

Room

A Room 2.1.0-alpha01 foi lançada.

Novos recursos

  • FTS: a Room agora é compatível com entidades com uma tabela FTS3 ou FTS4 de mapeamento. As classes anotadas com @Entity agora podem ser adicionalmente 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 uma consulta armazenada, também conhecida como uma view usando a anotação @DatabaseView. b/67033276
  • Auto Value: a Room agora é compatível com a declaração de classes com anotação AutoValue como entidades e POJOs. As anotações da Room @PrimaryKey, @ColumnInfo, @Embedded e @Relation agora podem ser declaradas em um valor automático nos métodos de abstrato da classe anotada. Observe que essas anotações precisam ser acompanhadas por @CopyAnnotations para que a Room possa compreendê-las corretamente. b/62408420
  • Compatibilidade adicional de tipos de retorno Rx: os métodos 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 definíveis, mas agora eles também podem ser parâmetros de construtor.
  • enableMultiInstanceInvalidation: essa é uma nova API no 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: essa é uma nova API no RoomDatabase.Builder para recriar automaticamente o banco de dados se ocorrer um downgrade. b/110416954
  • ignoredColumns: é uma nova API da anotação @Entity que pode ser usada para listar campos ignorados pelo nome. Útil para ignorar campos herdados em uma entidade. b/63522075

Alterações de API / comportamento

  • mCallback e mDatabase no RoomDatabase agora estã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 adequadamente 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

A Room 2.0.0 foi lançado sem alterações da 2.0.0-rc01. O Paging 2.0.0 foi lançado com uma única correção de bugs.

Paging

Correções de bugs

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

21 de setembro de 2018

O Lifecycle 2.0.0 foi lançado com uma correção da 2.0.0-rc01 no 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

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

Novos recursos

Alterações na API

  • Alteração importante: 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 exibições se usado com exibições de destinos individuais b/111961977
  • O onSaveState() do Navigator agora só é chamado uma vez b/112627079

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 alterações na 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

  • Adição de outra correção necessária para o erro "100 jobs". b/115560696
  • Adição de algumas correções para erros de restrição de chave externa devido a disputas. b/114705286
  • As 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
  • Melhoria das garantias de encadeamento internas para a biblioteca.
  • Correção interna do problema em potencial com deduplicação do LiveData.

Alterações na API

  • Agora é possível criar suas próprias instâncias do Worker no tempo de execução especificando um WorkerFactory como parte do WorkManager.Configuration. A fábrica de fallback é DefaultWorkerFactory, que corresponde ao comportamento de 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). Versões futuras 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 nos próximos lançamentos. Essa alteração será compatível com a eventual exibição de NonBlockingWorker.
  • Adição da capacidade de acionar o trabalho cronometrado no TestDriver por meio do TestDriver.setInitialDelayMet(UUID) e TestDriver.setPeriodDelayMet(UUID). b/113360060

Alterações 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

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

O WorkManager 1.0.0-alpha07 foi lançado com correções de bugs e pequenas alterações na 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 um ConcurrentModificationException em ConstraintTracker. b/112272753
  • Alteração de anotações de tipo de retorno de Data.getBooleanArray(String) e Data.getIntArray(String) para @Nullable em vez de @NonNull. b/112275229

Alterações na API

  • Worker agora estende uma nova classe, NonBlockingWorker. Isso não afeta nenhum uso atual. No futuro, o NonBlockingWorker se tornará uma entidade com total compatibilidade para soluções de threading personalizadas.
  • Alteração de 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: uso de Map.toWorkData() suspenso 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 de 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 da 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
  • Correção de um bug que faz com que o PeriodicWork não seja executado na programação durante o modo Soneca. b/111469837
  • Correção de uma disputa ao rastrear restrições que causam falhas no WorkManager. googlecodelabs/android-workmanager/issues/56
  • Criação de WorkRequests exclusivos ao usar WorkRequest.Builder#build(). b/111408337
  • Permitir o 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 correções de bugs importantes e alterações na geração de registros.

Alterações 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 mudança drástica da API.
  • Adição de uma nova API, Configuration.Builder.setMinimumLoggingLevel(int), que pode controlar a verbosidade do WorkManager. Por padrão, o WorkManager registra Log.INFO e posterior.
  • Alteração da assinatura de Data.getString() para que ela não aceite mais um valor padrão (é implicitamente null). Essa é uma alteração importante da API.
  • Marcação de 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 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
  • Correção de um problema com PeriodicWorkRequests que não eram executados corretamente após a ativação do modo Soneca do dispositivo. b/111469837
  • Correção de um problema com atrasos iniciais ao usar o Firebase JobDispatcher. b/111141023
  • Correção de 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.
  • Permissão concedida para TestScheduler.setAllConstraintsMet(UUID) ser chamado antes ou depois de colocar na fila o WorkRequest fornecido. b/111238024

Alterações importantes

  • O WorkManager.getInstance() agora é anotado com @NonNull em vez de @Nullable.
  • Alteração da assinatura de Data.getString() para que ela não aceite mais um valor padrão (é implicitamente null).
  • Marcação de 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 alterações da API, mudanças de comportamento e correções de bugs.

Alterações 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

Safe Args

  • Alteração importante: app:type foi alterado 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 são de fato não nulos. b/111451769
  • Adição de outras anotações NonNull às classes geradas pelo NavDirections e Args. 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

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

Alterações 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

Safe Args

  • Alteração importante: 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
    • Exemplo: DemoController.index se tornará setDemoControllerIndex. b/79995048
    • Exemplo: action_show_settings se tornará actionShowSettings. b/79642240
  • Alteração importante: os argumentos agora são considerados não nulos por padrão. Para permitir valores nulos em strings e argumentos parcelable, inclua app:nullable="true". b/79642307
  • Agora você pode usar app:type="long" com defaultValues na forma de "123L". b/79563966
  • Compatibilidade para argumentos parcelable usando um nome de classe totalmente qualificado para app:type. O único valor padrão compatível é "@null" b/79563966
  • Classes 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 de app:defaultValue estavam sendo transmitidos como Strings. b/110710788
  • O aapt2 incluído no plug-in do Gradle para Android versão 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

Alterações de API / comportamento

  • Adição de RoomDatabase.Builder.setQueryExecutor() para permitir a personalização de onde as consultas são executadas.
  • Adição de compatibilidade com RxJava2 Observable.
  • 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 de 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
  • (Já lançado na 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 bugs no runtime. É altamente recomendável usar o 1.0.1 por questão de estabilidade. O Paging RxJava2 1.0.1 também foi lançado 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

O WorkManager 1.0.0-alpha04 foi lançado.

Correções de bugs

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

  • Correção de um potencial 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 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

  • 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

A Room 1.1.1 foi lançada. Essa versão é idêntica à Room 1.1.1-rc1.

WorkManager

O WorkManager 1.0.0-alpha03 foi lançado.

Correções de bugs

  • Correção de uma disputa na implementação baseada em 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.

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

Alterações na API

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

  • O Worker tem a capacidade de distinguir entre o cancelamento iniciado pelo usuário e a interrupção temporária solicitada pelo SO. Worker.isStopped() retorna true se qualquer tipo de interrupção tiver sido solicitada. Worker.isCancelled() retorna true quando o trabalho tiver sido explicitamente cancelado. b/79632247

  • Adição de compatibilidade para JobParameters#getNetwork() na API 28. Isso é exposto por meio de Worker.getNetwork().

  • Adição de Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit) para que você possa impor quantos jobs podem ser enviados para JobScheduler ou AlarmManager. Isso ajuda a impedir 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 códigos de tarefa do JobScheduler seguros para o WorkManager usar. b/79996760

  • Worker.getRunAttemptCount() retorna a contagem de execuções 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 do WorkManager podem consultar quando esse método foi chamado pela última vez usando o WorkManager.getLastCancelAllTimeMillis() para limpeza adicional do estado interno.

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

Mudanças de comportamento

  • Adição de uma tag implícita para todos os WorkRequests, que é o nome de classe totalmente qualificado para o Worker. Isso proporciona a capacidade de remover WorkRequests sem tags ou quando o id não está disponível. b/109572351

Alterações importantes

  • Renomeação de Worker.WorkerResult para Worker.Result.

  • Worker.onStopped agora tem um parâmetro isCancelled adicional que é definido como true quando o Worker tiver sido explicitamente cancelado.

7 de junho de 2018

O Navigation 1.0.0-alpha02 foi lançado.

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 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 um 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 o launchSingleTop. b/79407969

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

  • O NavigationUI agora destaca o item correto ao usar um gráfico aninhado como MenuItem. b/109675998

Alterações na API

  • O uso do atributo clearTask para ações e a API associada em NavOptions foi suspenso. b/80338878

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

24 de maio de 2018

O WorkManager 1.0.0-alpha02 foi lançado.

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 o thread em segundo plano.

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

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

  • Adição de compatibilidade para floats em Data. b/79443878

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

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

Alterações na API

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

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

  • Adição de sobrecargas de javax.time.Duration para 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() está obsoleto. Em vez disso, use Configuration.setExecutor().

16 de maio de 2018

O Paging RxJava2 1.0.0-rc1 e a Room 1.1.1-rc1 foram lançados. É altamente recomendável usar a Room 1.1.1-rc1 em vez de 1.1.0 se você usa 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 alterações desde o Alfa inicial.

8 de maio de 2018

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

Paging 1.0.0 e Room 1.1.0 foram lançados, juntamente com os Alfas de dois novos Componentes de arquitetura: Navigation e WorkManager.

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

Nova biblioteca: Navigation

O Navigation fornece uma estrutura para a criação de navegação no app. Essa 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. 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 com a versão 2.0.0-alpha1 para uso junto 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.
  • A Room 1.1.0-rc1 foi lançada.

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

O Paging 1.0.0-rc1 e a Room 1.1.0-beta3 foram lançados.

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 o 1.0.0-rc1 e ajude a testá-lo para que possamos lançar um 1.0.0 sólido.

Não há alterações 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

Room 1.1.0-beta2, Paging 1.0.0-beta1 e Paging RxJava 1.0.0-alpha1 foram lançados.

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 alterações de API para o Paging 1.0, e a resistência a qualquer alteração de API é muito alta.

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

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

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

Paging

Novos recursos

  • RxPagedListBuilder é adicionado por meio do novo artefato android.arch.paging:rxjava2.

Alterações na API

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

    • Renomeação de setBackgroundThreadExecutor() para setFetchExecutor() (em PagedList.Builder e LivePagedListBuilder)

    • Renomeação de setMainThreadExecutor() para setNotifyExecutor() (em PagedList.Builder).

  • Correção do membro PagedList.mCallbacks para ser particular.

Correções de bugs

  • LivePagedListBuilder aciona o carregamento inicial de PagedList no executor especificado, em vez do pool de threads 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 de posição desativados). b/77237534

Room

Correções de bugs

  • Correção de um bug crítico nas implementações de Rx Single e Maybe da Room, em que a consulta era reciclada antecipadamente, causando problemas se você adicionasse mais de um observador às instâncias de 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

Room 1.1.0-beta1, Paging 1.0.0-alpha7 e Lifecycles 1.1.1 foram lançados.

Room

Alterações na API

Correções de bugs

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

Apenas uma pequena alteração: android.arch.core.util.Function passa de arch:runtime para arch:common. Isso permite que ele seja usado sem a dependência do tempo de execução, por exemplo, no paging:common abaixo.

lifecycle:common é uma dependência de lifecycle:runtime, portanto, essa alteração não afeta o lifecycle:runtime diretamente, apenas módulos que dependem diretamente do lifecycle:common, como no Paging.

Paging

O Paging 1.0.0-alpha7 foi lançado junto com os Lifecycles 1.1.1. Como o 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 planejamento é que o Paging alpha7 seja a versão final antes do Paging chegar à versão Beta.

Alterações na API

  • Objetos DataSource.LoadParams agora têm um construtor público, e 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
  • Mapeadores para DataSource e DataSource.Factory
    • map(Function<IN,OUT>) permite que você transforme, una ou decore os 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 adicionalmente um banco de dados separado, isso pode ser feito em lote).
  • PagedList#getDataSource() foi adicionado como um método conveniente. b/72611341
  • Todas as classes obsoletas foram removidas da API, incluindo os elementos remanescentes do pacote recyclerview.extensions e o LivePagedListProvider.
  • DataSource.Factory é alterado de uma interface para uma classe abstrata para ativar a funcionalidade de mapa.

Correções de bugs

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

2 de março de 2018

A Room 1.1.0-alpha3 foi lançada. Esta é a última versão Alfa planejada para a Room 1.1.0.

Alterações na API

  • Os métodos addObserver e removeObserver do InvalidationTracker agora são síncronos e precisam ser chamados em um encadeamento que não é de IU. Isso evita certas condições de corrida enquanto observa as 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

  • Room agora nomeia corretamente classes Dao geradas para evitar conflitos de nome quando duas ou mais interfaces Dao são classes 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 devidamente analisados. b/68118746

  • Consultas geradas para @Relation 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, juntamente 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 alterações importantes na API.

Alterações 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 o RecyclerView, independentemente da Biblioteca Paging. 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 o Paging Alpha6: **

  • Atualize 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 todas 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 todas as referências de ListAdapterConfig para AsyncDifferConfig.
  • Atualize todas as referências de DiffCallback para DiffUtil..IttemCallback
  • Atualize todas 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

A Room 1.1.0-alpha2 foi lançada.

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 o 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 tanto para o Java 8 quanto para o 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 do 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

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

22 de janeiro de 2018

Lifecycles 1.1.0, Room 1.1.0-alpha1 e Paging 1.0.0-alpha5 foram lançados.

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

Alterações na API

  • Os LifecycleActivity e o LifecycleFragment obsoletos foram removidos, use FragmentActivity, AppCompatActivity ou o Fragment de compatibilidade.
  • Adição de anotações @NonNull a ViewModelProviders e ViewModelStores.
  • O construtor ViewModelProviders está obsoleto. Use os métodos estáticos dele diretamente.
  • O ViewModelProviders.DefaultFactory está obsoleto. Use ViewModelProvider.AndroidViewModelFactory
  • O método ViewModelProvider.AndroidViewModelFactory.getInstance(Application) estático foi adicionado para recuperar um Factory estático adequado para a criação de 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 no RoomDatabase.Builder proporciona um controle mais refinado a partir do qual 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 do Paging mais recentes (alpha-4 ou posterior), perdendo a compatibilidade com o LivePagedListProvider obsoleto. Para usar a nova Room Alfa, você precisará usar o paging alpha-4 ou posterior 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
  • 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 exemplo Javadoc. b/70411933, b/71467637

11 de dezembro de 2017

O Paging alpha4-1 foi lançado. 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 alterações e adições significativas, principalmente na rede de segmentação e nos casos de uso da rede + banco de dados.

Alterações 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 no thread de IU.
    • Comportamento de erro mais claro sobre os parâmetros de carga inicial.
  • TiledDataSource foi renomeado para PositionalDataSource para refletir a indexação dele baseada em posição e o fato de que ele não é delimitado quando os marcadores de posição são desativados.

  • PageKeyedDataSource foi adicionado para compatibilidade com tokens próximos/anteriores incorporados em carregamentos de páginas de rede. KeyedDataSource foi renomeado para 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. 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 aceita 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 resultados invertidos.

  • PagedListAdapter.onCurrentListChanged() foi adicionado para escutar as atualizações em que PagedList está sendo exibido.

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. Essa é exatamente a mesma versão que rc1, exceto por uma mudança na biblioteca reactivestreams.

Correções de bugs

Candidato a lançamento - 18 de outubro de 2017

Todos os principais artefatos (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 o 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 só era 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. Veja 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 foi pretendido que ela fosse uma API pública).
  • Lifecycles:

    • LiveData funciona corretamente quando a Atividade é parcialmente coberta em uma API anterior à 24. b/65665621

    • Os métodos OnLifecycleEvent em classes pai agora são chamados corretamente ou um aviso é impresso durante a compilação, se isso não for possível. 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 usual (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, o que o torna compatível com a versão beta 2 de Lifecycles e Room.

Correções de bugs

  • Documentação do Paging aprimorada.

5 de outubro de 2017

Todos os principais artefatos (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ção do editor de origem corretamente quando o 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 trata 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, a Room só imprimirá um aviso. b/67115337
    • A Room agora valida índices nas versões mais recentes do SO. b/63132683
    • A Room seleciona o construtor no-arg por padrão se houver vários construtores correspondentes em um Pojo. b/67353427
    • Chaves primárias de coluna única podem ser Nullable se forem um Integer ou Long. b/67086876
    • O rastreador de invalidação trata corretamente da reentrada no modo de teste. b/65471397
    • A Room agora verifica caracteres inválidos em nomes de colunas e tabelas no tempo de compilação (caracteres inválidos: ` e "). b/64749111

21 de setembro de 2017

Com esta versão, todos os módulos de Componentes de arquitetura alcançaram pelo menos a beta 1 (exceto a nova Biblioteca Paging, que está em 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.0 está muito severo e é improvável que isso aconteça.

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

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

Alterações da versão

  • Lifecycle Extensions e Room agora estão na versão beta 1.
  • O Paging agora está em alpha 2.
  • Nenhuma alteração nos 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

  • Lifecycles agora tem um novo artefato chamado common-java8. Esse artefato contém uma nova interface chamada 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 no beta1, é preciso adicionar uma dependência explícita ao módulo android.arch.lifecycle:common:1.0.1 para usar o novo artefato common-java8. Esse problema será corrigido no beta2.

Mudanças no empacotamento

  • android.arch.persistence.room.db foi movido para android.arch.persistence.db.
  • 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.

Alterações 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 sejam anotados com @ColumnInfo, @Embedded ou @Relation. b/62600692
    • Chaves primárias precisam ser anotadas com @NonNull, a menos que sejam geradas automaticamente. b/64292391
      • Essa alteração pode exigir uma migração de esquema. Lamentamos o transtorno.
    • Adição de uma nova anotação de conveniência (@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:
    • As strings de várias linhas do Kotlin nos métodos @Query são tratadas 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 alteração, 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 um RecyclerView em partes quando necessário. O Paging foi lançado como alpha1 e terá o próprio ciclo de versões.

Alterações 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 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

  • 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 tivesse sido removido do método onChanged dele. 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 altera a estrutura das suas tabelas, por isso, se você já utilizar os Componentes de arquitetura alpha 7 ou uma versão anterior, será necessário implementar uma migração se quiser manter os dados ou usar o método fallbackToDestructiveMigration() no builder. b/62007004

Alterações 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 da 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 somente 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

Alterações na API

  • Adição do método fallbackToDestructiveMigration() ao 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 alteração na configuração ocorre duas vezes. b/38445801

1.0.0 Alpha 5 - 18 de julho de 2017

Alterações na API

É preciso depender do artefato android.arch.persistence.room:rxjava2 para adicionar compatibilidade com o RxJava à 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

Alterações na API

  • Adição de um novo método de conveniência (runInTransaction()) ao RoomDatabase.

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

Correções de bugs

  • Correção do tratamento de byte[] em 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

Alterações 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, somente os métodos anotados @OnLifecycleEvent(ON_ANY) podem receber um segundo parâmetro do tipo Event (o primeiro parâmetro é o LifecycleOwner). Consulte a documentação do Lifecycle para ver os detalhes.

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

  • O MigrationTestHelper recebe a instância de Instrumentation em vez do 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 o 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 devidamente tratados. b/62608681

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

  • Agora, o DAO pode ter uma super classe/interface com parâmetros de tipo. b/62103620

1.0.0 Alpha 2 - 2 de junho de 2017

Alterações na API

Correções de bugs

  • Arquivos Proguard para Lifecycles. (b/62113696)
  • Perda de dados com conversores de tipo. (b/62100716)
  • Permitir o retorno de 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