Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Realm

Frozen Architecture - Kotlin SDK

A diferencia de otros SDK de Realm, el Kotlin SDK no proporciona objetos activos ni colecciones en vivo que se actualicen simultáneamente con los datos subyacentes. En su lugar, el SDK de Kotlin trabaja exclusivamente con objetos congelados que se pueden pasar de forma segura entre hilos.

Because frozen objects don't automatically update when data changes in your realm, they work a little differently from the live objects you may have used in other Realm SDKs.

Para actualizar o eliminar objetos, estos deben estar activos. Puede convertir un objeto congelado en activo en una transacción con mutableRealm.findLatest(). Los objetos activos solo son accesibles dentro de una transacción de escritura dentro de un cierre de escritura o de bloqueo de escritura.

Objects returned from a write closure become frozen objects when the write transaction completes.

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

Tip

You can check if an object is frozen with the isFrozen() method.

La clase Realm ya no está limitada a un solo hilo, por lo que puedes compartir un único realm entre varios hilos. Ya no es necesario que gestiones explícitamente el ciclo de vida del realm con llamadas a Realm.close().

Para acceder a los cambios en los objetos y colecciones, utilice corrutinasy la API de flujo. Los cambios son seguros para subprocesos, por lo que puedes acceder a ellos desde cualquier contexto. Las notificaciones se gestionan en un subproceso de notificación interno dedicado. Los objetos congelados ahora admiten escuchas de cambios.

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

La API Flows requiere Kotlinx Coroutines

To use the Flows API in your Kotlin Multiplatform project, install the kotlinx.coroutines library.

Al igual que en otros SDK de Realm, las transacciones de escritura avanzan implícitamente tu realm a la versión más reciente de los datos almacenados en disco.

Tip

For more information on notifications, refer to React to Changes.

Realm objects are still lazy-loaded by default. This allows you to query large collections of objects without reading large amounts of data from disk. This also means that the first access to a field of an object will always return the most recent data.

Volver

Realm