Kotlin Android 開発で、realm をサブスレッド上で動作させる方法

以下のメソッドの、postProcessing のラムダ式内に realm 処理を入れれば動きます。

private var handler = Handler()
fun wait(waitContinuation:() -> Boolean, postProcessing:() -> Unit ){
var isWait = true
val thread = Thread(Runnable {
try {
while ( isWait ) {
isWait = waitContinuation()
Thread.sleep( 100 )
}
handler.post {
postProcessing()
}
} catch (e: InterruptedException) {
e.printStackTrace()
}
} )
thread.start()
}

waitContinuation のラムダ式が true を返す間は
postProcessing の実行を待つメソッドで、
実行処理部分である postProcessing は handler で管理しています。

handler を用いて実行処理を記述することで UI スレッド上で処理が実行されることになり、
realm のサブスレッド上では動作させないという条件をクリアしています。

使う場面としては、複数の API データの取得を待ってから処理を実行したい場合等を想定して作ってます。

この記事へのコメント