AndroidでRealmを導入してみたので気になったところメモ。
公式の情報が充実してるので本当にちょっとしたものですが。
ちゃんとclose()を呼ぶ
公式に書いてますが、 Realm.getInstance()
呼んだらかならず Realm.close()
を対にして呼ぶ。ちょっとソースを読みましたが、 Realm.getInstance()
した回数だけ参照カウンタがインクリメントされているので、きちんと同じ数の Realm.close()
が必要そう。
あと、RealmインスタンスはThreadローカルで作成されるので、開くのと閉じるのは同じThreadで呼ばないとだめ。
RealmインスタンスはThreadをまたいで参照できない
これも公式に明記。なのでRxJavaと一緒に使ってるときなんかはちょっと使いづらさを感じています(個人の感想です)。今のところ複数のThreadをまたいで参照したい場合は、POJOに詰め替えてから別Threadに渡すのが定石でしょうか。
このへんとか参考。
https://realm.io/news/using-realm-with-rxjava/
signal 11がわりと出る
いくつかの端末(4.3未満)でSIGSEGV(signal 11)が発生して突然死する事象が。RealmがOOMを投げているわけでもなく、 Activity.onLowMemory()
が呼ばれるでもなく、突然signal 11で終了。
だいたいの場合は android::isHardwareAccelerated="false"
を指定すれば異常終了はしなくなりますが描画がクソ遅くなる・・・ううーん(悩み中)。
まだメジャーバージョンが1になってないライブラリなので、ある程度は仕方ないのかも。
Bundleにつっこめない
Parcelable実装すれば行けそうな気もしますが、RealmObjectはRealm以外で生成しちゃダメ的なこと書いてるので、たぶんダメそう・・・。このへんどうにかなると使い勝手よくなりそうなんですが。