Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Arquitetura congelada - Kotlin SDK

Ao contrário dos outros Realm SDKs, o Kotlin SDK não fornece objetos ativos e coleções que são atualizados simultaneamente com os dados subjacentes. Em vez disso, o Kotlin SDK funciona exclusivamente com objetos congelados que podem ser passados entre threads com segurança.

Como os objetos congelados não são atualizados automaticamente quando os dados são alterados em seu domínio, eles funcionam um pouco diferente dos objetos ativos que você pode ter usado em outros SDKs do Realm.

Para atualizar ou excluir objetos, eles devem estar ativos. Você pode converter um objeto congelado em um objeto ativo em uma transação com mutableRealm.findLatest(). Objetos ativos só são acessíveis dentro de uma transação de gravação dentro de um fechamento de escrita ou writeBlocking .

Objetos retornados de um fechamento de gravação se tornam objetos congelados quando a transação de gravação é concluída.

val sample: Sample? =
realm.query<Sample>()
.first().find()
// delete one object synchronously
realm.writeBlocking {
if (sample != null) {
findLatest(sample)
?.also { delete(it) }
}
}
// delete a query result asynchronously
GlobalScope.launch {
realm.write {
query<Sample>()
.first()
.find()
?.also { delete(it) }
}
}

Dica

Você pode verificar se um objeto está congelado usando o método isFrozen().

A classe Realm não é mais confinada por threads, então você pode compartilhar um único Realm em várias threads. Você não precisa mais lidar com o ciclo de vida do Realm explicitamente com chamadas para Realm.close().

Para acessar alterações em objetos e coleções, use Coroutines e a API de fluxo . As alterações são seguras para threads, para que você possa acessá-las de qualquer contexto. As notificações são tratadas em uma thread de notificação interna dedicada. Objetos congelados agora suportam ouvintes de alteração.

val config = RealmConfiguration.Builder(schema = setOf(Task::class))
.build()
val realm = Realm.open(config)
// fetch objects from a realm as Flowables
CoroutineScope(Dispatchers.Main).launch {
val flow: Flow<ResultsChange<Task>> = realm.query<Task>().asFlow()
flow.collect { task ->
Log.v("Task: $task")
}
}
// write an object to the realm in a coroutine
CoroutineScope(Dispatchers.Main).launch {
realm.write {
copyToRealm(Task().apply { name = "my task"; status = "Open"})
}
}

Importante

A API de fluxos requer corrotinas do Kotlinx

Para usar a API de fluxos em seu projeto Kotlin Multiplatform, instale kotlinx.coroutines biblioteca.

Assim como em outros SDKs do Realm , escreva transações implicitamente para avançar seu Realm para a versão mais recente dos dados armazenados em disco.

Dica

Veja também:

Para mais informações sobre notificações, veja React a alterações.

Os objetos de Realm ainda são carregados lentos por padrão. Isso permite consultar grandes coleções de objetos sem ler grandes quantidades de dados do disco. Isso também significa que o primeiro acesso a um campo de um objeto sempre retornará os dados mais recentes.

Voltar

Realm