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
Room
1.1.1
em vez de1.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
Navigation
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
MenuItem
s commenuCategory="secondary"
não vão mais ser exibidos na backstack quando usados com métodosNavigationUI
(b/120104424).AppBarConfiguration
agora permite que você defina uma instância substituta deOnNavigateUpListener
que é chamada quandonavController.navigateUp()
retornafalse
b/79993862 b/120690961.
Alterações interruptivas
- Ao usar um
<argument>
com umargType="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étodossetup
. AdicionemenuCategory="secondary"
ao seuMenuItem
para evitar a exibição da pilha de retorno (aosp/852869). - Os métodos
fromBundle()
das classesArgs
geradas agora assumem um valorBundle
não nulo em vez de um valor anulável deBundle
(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 deListenableWorker
. Isso evita conflitos de refatoração com a classeResult
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 deListenableWorker
.
6 de dezembro de 2018
Paging
Lançamento da Paging 2.1.0-rc01
sem mudanças de 2.1.0-beta01
.
Navigation
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 seuandroid: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 comoOnDestinationChangedListener
(b/118670572).OnDestinationChangedListener
agora também transmite oBundle
de argumentos (aosp/837142).- Os atributos
app:clearTask
eapp:launchDocument
e os métodos associados foram removidos. Useapp:popUpTo
com a raiz do seu gráfico para remover todos os destinos da backstack (b/119628354). ActivityNavigator.Extras
agora usa um padrãoBuilder
e adiciona a capacidade de definir qualquer flagIntent.FLAG_ACTIVITY_
(aosp/828140).NavController.onHandleDeepLink
foi renomeado comohandleDeepLink
aosp/836063.- Muitas classes e métodos que não se destinam à subclassificação, como
NavOptions
,NavInflater
,NavDeepLinkBuilder
eAppBarConfiguration
, se tornaramfinal
(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 umFragmentFactory
(b/119054429). - O construtor para
NavGraphNavigator
não usa mais umContext
aosp/835340. - NavigatorProvider agora é
uma classe, em vez de uma interface. O
NavigatorProvider
retornado porgetNavigatorProvider()
não mudou a funcionalidade aosp/830660. - O
NavDestination.navigate()
foi removido. Em vez disso, chamenavigate()
noNavigator
(aosp/830663). - Refatoração significativa do
Navigator
, removendo a necessidade deOnNavigatorNavigatedListener
e fazendo com quenavigate
retorne oNavDestination
a que a navegação ocorreu. - As instâncias do
Navigator
não podem mais enviar eventos de pop para oNavController
. Considere usar umOnBackPressedCallback
para interceptar o pressionamento do botão "Voltar" e chamarnavController.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 chamandotoString()
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, apresentaRxWorker
. Esse é umListenableWorker
que espera umSingle<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
comResult
.Result
agora é uma "classe fechada" com três implementações concretas, que você pode conseguir por meio deResult.success()
(ouResult.success(Data)
),Result.failure()
(ouResult.failure(Data)
) eResult.retry()
. SeusListenableFuture
s agora resultam emResult
em vez dePayload
.Worker
s não têm métodos getter e setter para a saídaData
. 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()
eListenableFuture.await()
. - A função
Operation.getException()
foi renomeada comoOperation.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
eOneTimeWorkRequest
para simplificar a API. Para corrigir qualquer problema de compilação, você pode agrupar varargs já existentes comArrays.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étodoscombine
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 comobserveForever
é 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á umWorkInfo
com oCANCELLED
State
duranteListenableWorker.onStopped()
. - Trate
null
Result
s como falhas emListenableWorker
(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
comResult
.Result
agora é uma "classe fechada" com três implementações concretas, que você pode conseguir por meio deResult.success()
(ouResult.success(Data)
),Result.failure()
(ouResult.failure(Data)
) eResult.retry()
. SeusListenableFuture
s agora resultam emResult
em vez dePayload
.Worker
s não têm métodos getter e setter para a saídaData
. - Adicionados métodos de extensão Kotlin
Operation.await()
eListenableFuture.await()
. Operation.getException()
foi renomeado comoOperation.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
eOneTimeWorkRequest
para simplificar a API. Para corrigir qualquer problema de compilação, você pode agrupar varargs já existentes comArrays.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étodoscombine
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 emFtsOptions
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 aListenableFuture
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ãoIN
(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 novoCoroutineWorker
.WorkStatus
foi renomeado comoWorkInfo
. Todas as variantes correspondentes do métodogetStatus
foram renomeadas para as variantesgetWorkInfo
correspondentes. Essa é uma alteração interruptiva.ListenableWorker.onStopped()
não aceita mais ter um argumento booleano indicando seWorkRequest
foi cancelado.WorkManager
não faz mais essa distinção. Essa é uma alteração interruptiva.- O pacote
androidx.work.test
foi renomeado comoandroidx.work.testing
. Essa é uma alteração interruptiva. - Setters em
Constraints
não fazem mais parte da API pública. Essa é uma alteração interruptiva.. WorkerParameters.getTriggeredContentUris()
eWorkerParameters.getTriggeredContentAuthorities()
antes retornavam matrizes. Agora, esses métodos retornam coleções. Essa é uma alteração interruptiva.ListenableWorker.onStartWork()
foi renomeado comoListenableWorker.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()
eConfiguration.getMinJobSchedulerID()
são renomeados comoConfiguration.getMinJobSchedulerId()
eConfiguration.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 enfileirarOneTimeWorkRequest
s exclusivas sem precisar criar umWorkContinuation
. - Todas as variantes dos métodos
enqueue
ecancel
emWorkManager
agora retornam um novo tipoOperation
. Essa é uma alteração interruptiva. - Todas as variantes de
enqueue
não aceitam mais varargs paraWorkRequest
s. Essa é uma alteração interruptiva. Use Coleções em vez disso. Você pode usarArrays.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 umaIllegalStateException
. Essa é uma alteração interruptiva.
Correções de bugs
WorkRequest.Builder
s no artefatowork-runtime-ktx
agora usamListenableWorker
s. 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 comoWorkInfo
. Todas as variantes correspondentes do métodogetStatus
foram renomeadas para as variantesgetWorkInfo
correspondentes.ListenableWorker.onStopped()
não aceita mais ter um argumento booleano indicando seWorkRequest
foi cancelado.WorkManager
não faz mais essa distinção.- O pacote
androidx.work.test
foi renomeado comoandroidx.work.testing
. - Os setters em
Constraints
não fazem mais parte da API pública. WorkerParameters.getTriggeredContentUris()
eWorkerParameters.getTriggeredContentAuthorities()
antes retornavam matrizes. Agora, esses métodos retornam Coleções.ListenableWorker.onStartWork()
foi renomeado comoListenableWorker.startWork()
.- O construtor do
WorkStatus
não faz mais parte da API pública. Configuration.getMaxJobSchedulerID()
eConfiguration.getMinJobSchedulerID()
são renomeados comoConfiguration.getMinJobSchedulerId()
eConfiguration.getMaxJobSchedulerId()
, respectivamente.- Todas as variantes dos métodos
enqueue
ecancel
emWorkManager
agora retornam um novo tipoOperation
. - Todas as variantes de
enqueue
não aceitam mais varargs paraWorkRequest
s. - A tentativa de
initialize
oWorkManager
mais de uma vez por processo agora resultará em umaIllegalStateException
.
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
Navigation
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 nonavigation-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 paraPagedList.Config.Builder
. - Adição de
androidx.paging.PagedList()
como alternativa Kotlin paraPagedList.Builder
. - Adição de
DataSourceFactory.toLiveData()
como alternativa Kotlin paraLivePagedListBuilder
. - Adição de
DataSourceFactory.toObservable()
etoFlowable()
como alternativas Kotlin paraRxPagedListBuilder
. - 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 geraIndexOutOfBoundsException
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ãoWorker
. Essa é uma alteração interruptiva da API. NonBlockingWorker
foi renomeado paraListenableWorker
, 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, atualizeListenableFuture
corretamente. As implementações de referência deListenableFuture
s são fornecidas no pacoteFutures
emalpha02
(veja abaixo a seçãoWorkManager
).Worker
estendeListenableWorker
e ainda funciona como antes, com um métodoResult doWork()
abstrato.- Alguns métodos e membros foram embaralhados de
Worker
paraListenableWorker
. - Em breve, forneceremos implementações de referência para
ListenableWorker
s que usam corrotinas Kotlin (assim que as versões estáveis forem lançadas) e RxJava2.
- A interface
WorkerFactory
e a implementação concretaDefaultWorkerFactory
foram mescladas em uma classe abstrata chamadaWorkerFactory
. 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ânciaWorkerFactory
criada pelo usuário. Essa é uma alteração interruptiva. - Removidos
WorkManager.synchronous()
eWorkContinuation.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
ListenableFuture
s podem ser usados para trabalho e observação de forma assíncrona. Por exemplo,WorkManager.enqueue()
retornavavoid
e agora retorna umListenableFuture<Void>
. Você pode chamarListenableFuture.addListener(Runnable, Executor)
ouListenableFuture.get()
para executar o código depois que a operação é concluída. - Observe que esses
ListenableFuture
s 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 contratoFuture
s. - Para manter a paridade com os métodos
getStatus*
síncronos, fornecemos variantesListenableFuture
e renomeamos os já existentes que retornaramLiveData
para ter explicitamente "LiveData" como parte do nome (por exemplo,getStatusesByIdLiveData(UUID)
). Essa é uma alteração interruptiva da API.
- Agora
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 excluindoexclude '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 eraREPLACE
(b/116253486 e b/116677275). WorkContinuation.combine()
agora aceita um ou maisWorkContinuation
s 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ãoWorker
. - A interface
WorkerFactory
e a implementação concretaDefaultWorkerFactory
foram mescladas em uma classe abstrata chamadaWorkerFactory
. - Removidos
WorkManager.synchronous()
eWorkContinuation.synchronous()
. - Métodos
WorkManager.getStatus*()
agora retornamListenableFuture
s.WorkManager.getStatus*LiveData()
retornaLiveData
s.
Futures
Lançamento de Futures 1.0.0-alpha02
.
Mudanças na API
- Os desenvolvedores agora podem usar
ResolvableFuture
eAbstractResolvableFuture
como implementações leves concretas deListenableFuture
.
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 RxCompletable
,Single<T>
eMaybe<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 emRoomDatabase.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 emRoomDatabase.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
emDatabase
emRoomDatabase
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).
- A Room agora usará corretamente o construtor principal do Kotlin em classes de dados, evitando a necessidade de declarar os campos como
vars
(b/105769985).
1º de outubro de 2018
Lançamento da Room 2.0.0
sem mudanças de 2.0.0-rc01
.
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
Navigation
A Navigation 1.0.0-alpha06
foi lançada com correções de bugs e mudanças na API.
Novos recursos
- Foi adicionado suporte às transições de elementos compartilhados para destinos de fragmentos e atividades (b/79665225). Para ver mais informações, consulte Implementar a navegação com o componente de arquitetura Navigation.
- A seleção de um item no
NavigationView
agora fecha qualquer página inferior inclusa (b/112158843).
Mudanças na API
- Alteração interruptiva: o método
navigate()
do Navigator agora usa um parâmetroNavigator.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 oWorker
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 umaWorkerFactory
como parte daWorkManager.Configuration
. A fábrica de substituição éDefaultWorkerFactory
, que corresponde ao comportamento das versões anteriores da WorkManager.- Os construtores padrão para
Worker
eNonBlockingWorker
agora estão marcados como obsoletos. Use o novo construtor (Worker(Context, WorkerParameters)
) e chamesuper(Context, WorkerParameters)
. Futuras versões da WorkManager vão remover o construtor padrão.
- Os construtores padrão para
- 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 deNonBlockingWorker
. - Foi adicionada a capacidade de acionar o trabalho cronometrado no
TestDriver
usandoTestDriver.setInitialDelayMet(UUID)
eTestDriver.setPeriodDelayMet(UUID)
(b/113360060).
Mudanças importantes
- O uso dos construtores padrão
Worker
eNonBlockingWorker
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 doJobScheduler
(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
emConstraintTracker
(b/112272753). - Mudadas as anotações de tipo de retorno de
Data.getBooleanArray(String)
eData.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)
eData.getIntArray(String)
para@Nullable
em vez de@NonNull
(b/112275229). - Extensões Kotlin: suspensão do uso de
Map.toWorkData()
e adição de umworkDataOf(vararg Pair<String, Any?>)
de nível superior para ser mais consistente com as APIs existentes.
10 de agosto de 2018
Navigation
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
WorkRequest
s exclusivas ao usarWorkRequest.Builder#build()
(b/111408337). - Permissão do uso de
RescheduleReceiver
somente quando houverWorkRequest
s 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 umaIllegalStateException
. 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 registraLog.INFO
e acima. - Mudança da assinatura de
Data.getString()
, para que ela não aceite mais um valor padrão (é implicitamentenull
). Essa é uma alteração interruptiva da API. - Marcados alguns métodos necessários apenas para uso interno como
@hide
. Isso inclui o construtorConstraints
,Data.toByteArray()
eData.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
PeriodicWorkRequest
s ao usar oJobScheduler
(b/110798652). - Correção de um problema com
PeriodicWorkRequest
s 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
BroadcastReceiver
s 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 oWorkRequest
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 (é implicitamentenull
). - Marcados alguns métodos necessários apenas para uso interno como
@hide
. Isso inclui o construtorConstraints
,Data.toByteArray()
eData.fromByteArray(byte[])
.
19 de julho de 2018
Navigation
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 paraapp: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
Navigation
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 tornasetDemoControllerIndex
(b/79995048). - Por exemplo,
action_show_settings
se tornaactionShowSettings
(b/79642240).
- Por exemplo,
- 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()
ehashCode()
(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 quePagedListAdapter
eAsyncPagedListDiffer
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
eAsyncPagedListDiffer
não sinalizavam eventos de movimentação (b/110711937).
WorkManager
Lançamento da WorkManager 1.0.0-alpha04
.
Correções de bugs
PeriodicWorkRequest
s agora são reprogramadas corretamente ao usar a implementação baseada emAlarmManager
.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ão1.1.1-rc1
.
Mudanças na API
Adição de
getStatusesSync()
, a versão síncrona deWorkContinuation.getStatuses()
.Worker
consegue distinguir entre o cancelamento iniciado pelo usuário e a interrupção temporária solicitada pelo SO.Worker.isStopped()
retornatrue
quando qualquer tipo de interrupção é solicitado.Worker.isCancelled()
retornatrue
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 paraJobScheduler
ouAlarmManager
. Isso ajuda a evitar que oWorkManager
assuma todos os slotsJobScheduler
disponíveis.Adição de
Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
que ajuda a definir um intervalo de IDs de jobs doJobScheduler
seguros para oWorkManager
(b/79996760).Worker.getRunAttemptCount()
retorna a contagem de execução atual para um determinadoWorker
(b/79716516).WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
permite enfileirarPeriodicWorkRequest
s exclusivos (b/79600647).WorkManager.cancelAllWork()
cancela todos osWorker
s. As bibliotecas que dependem deWorkManager
podem consultar quando esse método foi chamado pela última vez, usandoWorkManager.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
WorkRequest
s, que é o nome da classe totalmente qualificado doWorker
. Isso permite removerWorkRequest
s semtag
s ou quandoid
não está disponível (b/109572351).
Mudanças importantes
Worker.WorkerResult
foi renomeado comoWorker.Result
.Worker.onStopped
agora tem um parâmetroisCancelled
extra definido comotrue
quandoWorker
tiver sido explicitamente cancelado.
7 de junho de 2018
Lançamento de Navigation 1.0.0-alpha02
.
Navigation
Mudanças de comportamento
FragmentNavigator
agora usasetReorderingAllowed(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 emNavOptions
foram descontinuados (b/80338878).O uso do atributo
launchDocument
das ações e da API associada emNavOptions
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
emState.isFinished()
(b/79550068).Correção de um problema que fazia com que
Worker
s fossem reprogramados emApplication.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
Worker
s 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
float
s emData
(b/79443878).Data.Builder.putAll()
agora retorna uma instância deBuilder
(b/79699162).Mais Javadoc e correções na documentação (b/79691663).
Mudanças na API
Worker
s podem reagir à própria interrupção.Worker.isStopped()
pode ser usado para verificar se umWorker
foi interrompido.Worker.onStopped()
pode ser usado para executar operações de limpeza leves.A API
Worker.getTags()
retorna umSet
de tags associadas aoWorker
.Adicionadas sobrecargas de
javax.time.Duration
para APIs que usam uma combinação de duração eTimeUnit
s. Isso é protegido por@RequiresApi(26)
.As extensões do
WorkManager
foram movidas do pacoteandroidx.work.ktx
para o pacoteandroidx.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. UseConfiguration.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 outros
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
- A Room agora é compatível com o Kotlin
1.2.40
. b/78328708
19 de abril de 2018
Paging candidato a lançamento
Lançamento de Paging 1.0.0-rc1
e Room 1.1.0-beta3
.
Paging
Não temos outros problemas conhecidos ou novos recursos programados para 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
Observable
s e Flowable
s, usando Scheduler
s em vez de Executor
s:
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 artefatoandroid.arch.paging:rxjava2
.
Mudanças na API
Mudanças de API para esclarecer o papel dos executores em builders:
setBackgroundThreadExecutor()
renomeado comosetFetchExecutor()
(emPagedList.Builder
eLivePagedListBuilder
)setMainThreadExecutor()
renomeado comosetNotifyExecutor()
(emPagedList.Builder
).
O membro
PagedList.mCallbacks
foi corrigido para que seja privado.
Correções de bugs
LivePagedListBuilder
aciona o carregamento inicial dePagedList
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 oDataSource.map
, bem como o carregamento dePositionalDataSource
com marcadores desativados (b/77237534).
Room
Correções de bugs
Correção de um bug crítico nas implementações
Single
eMaybe
Rx da Room, em que a consulta era reciclada antecipadamente, causando problemas se você adicionasse mais de um observador às instânciasSingle
ouMaybe
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
- Com base no feedback da Revisão da API, o
@RawQuery
não aceita mais a transmissão deString
como parâmetro de consulta. Você precisa usar SupportSQLiteQuery. Consulte SimpleSQLiteQuery para criar facilmente uma instância de SupportSQLiteQuery compatível com argumentos. - O método fallbackToDestructiveMigrationFrom do RoomDatabase.Builder agora aceita
vararg int
em vez devararg Integer
.
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 propriedadeobservedEntities
, desde que ele faça referência a uma ou mais entidades por meio dos camposEmbedded
ouRelation
s (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 objetosDataSource.LoadCallback
agora são abstratos. Isso permite unir oDataSource
ou testar diretamente umDataSource
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 umDataSource
.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 oLivePagedListProvider
. 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 paraPositionalDataSource
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
eremoveObserver
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étodogetArgCount()
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 interfacesDao
são internas no mesmo pacote e têm o mesmo nome (b/73536380).Os tipos de campos genéricos em
Pojo
s 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
@Relation
s 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
ecom.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
paraAsyncListDiffer
getItem(index)
/getItemCount()
foram removidos em favor do padrão de chamargetCurrentList().getItem(index)
egetCurrentList().size()
, que são mais explícitos.
- Atualize as referências de
ListAdapterConfig
paraAsyncDifferConfig
- Atualize as referências de
DiffCallback
paraDiffUtil.IttemCallback
- Atualize as referências de
PagedListAdapterHelper
paraAsyncPagedListDiffer
- Atualize as referências de
setList()
parasubmitList()
- 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étodosetJournalMode()
noRoomDatabase.Builder
(b/67757002).Compatibilidade com Guava: a Room agora é compatível com o retorno de Guava
Optional<T>
ouListenableFuture<T>
em consultasDAO
. Para usarListenableFuture<T>
, você precisa importar o artefatoguava
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 consultasDAO
.Os métodos de interface com implementações padrão agora são compatíveis com métodos
@Transaction
em classesDAO
. Isso funciona paraJava 8
eKotlin
(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
eLifecycleFragment
obsoletos foram descontinuados. UseFragmentActivity
,AppCompatActivity
ou ofereça suporte aFragment
. - Adicionadas anotações
@NonNull
aViewModelProviders
eViewModelStores
- O construtor
ViewModelProviders
foi descontinuado. Use os métodos estáticos dele diretamente. - O uso de
ViewModelProviders.DefaultFactory
foi descontinuado. UseViewModelProvider.AndroidViewModelFactory
. - Adição do método
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
estático para recuperar umaFactory
estática adequada para criar instânciasViewModel
eAndroidViewModel
.
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 emRoomDatabase.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 Pagingalpha-4
ou mais recente e mudar doLivePagedListProvider
para oLivePagedListBuilder
, 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 comoPositionalDataSource
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 comoItemKeyedDataSource
para esclarecer a diferença.LivePagedListBuilder
eDataSource.Factory
substituemLivePagedListProvider
. 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 doDataSource
permaneça independente doLiveData
.PagedList.BoundaryCallback
adicionado ao caso de uso de banco de dados + rede.O construtor
PagedList.Builder
usaDataSource
+PagedList.Config
, agora mais semelhante aoLivePagedListBuilder
, e permite o uso do operador losango na linguagem Java ou de tipos inferidos no Kotlin.PagedList.getConfig()
adicionado ePagedList.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
LiveDataReactiveStreams
agora implementa corretamente a especificação Reactive Streams (b/67999342).
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 quandoonSaveInstanceState
é chamado. Anteriormente, ele era apenas marcado comoCREATED
sem enviarON_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.
- A Room agora depende do artefato xerial mais recente, que corrige os problemas de
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)O Lifecycle agora contém um
WeakReference
de volta às LifecycleOwner para evitar o vazamento da LifecycleOwner se o Lifecycle for mantido na memória por mais tempo do que o normal (esta é apenas uma precaução, você ainda deve ter cuidado para não vazar oLifecycle
).
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 quandoLiveData
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 umInteger
ou umLong
(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).
- A Room agora imprime um erro no tempo de compilação quando o Pojo retornado em um
método
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.0
1.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 Suporte26.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óduloandroid.arch.lifecycle:common:1.0.1
para usar o novo artefatocommon-java8
. Esse problema será corrigido embeta2
.
- Devido a um bug em
Mudanças no empacotamento
- O item
android.arch.persistence.room.db
foi movido para a pastaandroid.arch.persistence.db
. - O item
android.arch.persistence.room.db-impl
foi movido e renomeado paraandroid.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:
- Mudanças de API na configuração do banco de dados (b/65349673 b/65499876).
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)
- Strings de várias linhas do Kotlin em
- Paging:
- 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
- As seguintes classes estão obsoletas e serão removidas em uma versão futura:
Correções de bugs
As classes geradas agora vão receber a anotação
@Generated
se o app tiver a anotação no caminho de classe. (b/35754819, link em inglês)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étodofallbackToDestructiveMigration()
no construtor (b/62007004).
Mudanças na API
- O SupportSQLiteProgram agora estende o AutoCloseable (b/63131997).
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 deobserver2
, ele receberiaON_CREATE
e todos os outros eventos antes deobserver2
. 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 é: seobserver1
for adicionado antes deobserver2
,ON_CREATE
será enviado primeiro paraobserver1
, depois paraobserver2
(o mesmo acontece paraON_START
eON_RESUME
), masON_PAUSE
será enviado primeiro paraobserver2
e só então paraobserver1
(o mesmo paraON_STOP
eON_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()
aRoomDatabase.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
Um novo método de retorno de chamada foi adicionado a
RoomDatabase.Builder
para observar quando um banco de dados é criado ou aberto (b/62699324).Agora @Query pode retornar RxJava
Maybe
ouSingle
(b/62231019).
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 tipoEvent
(o primeiro parâmetro é oLifecycleOwner
). Consulte os documentos da Lifecycle para saber mais detalhes.As classes
LifecycleActivity
eLifecycleFragment
foram movidas para o artefatoandroid.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 terIterable
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
O callback da InvalidationTracker agora recebe a lista de nomes de tabelas alteradas (b/38468740)
Redução da superfície da API da classe SupportSQLiteDatabase (b/38481640).
Correções de bugs
- Arquivos Proguard para a Lifecycle (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
- A Lifecycle
Fragment
eActivityCompat
na Biblioteca de Suporte ainda não implementa a interfaceLifecycleOwner
. Eles farão isso quando os Componentes de arquitetura estiverem na versão 1.0.0.