Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

凍結されたアーキテクチャ - Kotlin SDK

他の Realm SDK とは異なり、 Kotlin SDK は、基礎となるデータと同時に更新されるライブオブジェクトとコレクションを提供しません。 代わりに、 Kotlin SDK は、スレッド間で安全に渡される固定オブジェクトのみで動作します。

固定オブジェクトは、Realm 内のデータが変更されても自動的に更新されないため、他の Realm SDK で使用したライブ オブジェクトとは動作が若干異なります。

オブジェクトを更新または削除するには、ライブ状態である必要があります。 MutableRealm.findLast()を使用して、トランザクション内で固定オブジェクトをライブ オブジェクトに変換できます。 ライブオブジェクトには、書込み ( write ) またはwriteBlocking 句内の書込みトランザクション (write transaction) 内でのみアクセスできます。

書込み (write) トランザクションが完了すると、書込み (write) クローニングから返されたオブジェクトは固定オブジェクトになります。

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

isFrozen()メソッドを使用して、オブジェクトが固定されているかどうかを確認できます。

Realmクラスはスレッド定義されなくなったため、複数のスレッドで 1 つの Realm を共有できます。 You no longer need to handle the realm lifecycle explicitly with calls to Realm.close().

オブジェクトとコレクションの変更にアクセスするには、 コルーチン を使用します。 および フローAPI 。変更はスレッドセーフであるため、どのコンテキストからでも変更にアクセスできます。通知は専用の内部通知スレッドで処理されます。凍結されたオブジェクトは変更リスナーをサポートするようになりました。

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

重要

Flows API には Kotlinx コルーチンが必要

Kotlin マルチプラットフォーム プロジェクトで Flows API を使用するには、 kotlinx . コルーチンを ライブラリ。

他の Realm SDK と同様に、書込みトランザクション (write transaction) は、Realm をディスクに保存されているデータの最新バージョンに暗黙的に先行させます。

Tip

以下も参照してください。

通知の詳細については、「変更に対応 」をReactしてください。

Realm オブジェクトはデフォルトで遅延ロードされます。 これにより、ディスクから大量のデータを読み込まずに、オブジェクトの大規模なコレクションをクエリできます。 つまり、 オブジェクトのフィールドへの最初のアクセスは常に最新データを返します。

戻る

Realm