在调用方法之前,如何将lifecycleObserver用于ON_CREATE

时间:2018-12-02 08:13:28

标签: android realm android-lifecycle

我使用RealmDB,根据文档,最佳实践是在“ onCreate”方法上获取数据库实例,并在“ onDestroy”上清除数据库实例,到目前为止-我已经做到了。

由于我们具有用于各种数据对象的多个架构,因此我想通过使用以下代码使代码更简洁:

interface RealmOwner : RealmOwnerBase {
    val realmContainer: BaseRealmContainer

    override val configurationA: Realm
        get() = realmContainer.configurationA
    override val configurationB: Realm
        get() = realmContainer.configurationB

    abstract class BaseRealmContainer {
        lateinit var configurationA: Realm
        lateinit var configurationB: Realm
    }

    open class RealmContainer
        : BaseRealmContainer() {

        open fun initRealm() {
            configurationA = RealmFactory.configurationA
            configurationB = RealmFactory.configurationB
        }

        open fun closeRealm() {
            listOf(configurationA, configurationB).forEach { it.close() }
        }
    }

    class LifecycleRealmContainer(lifecycle: Lifecycle)
        : RealmContainer(), LifecycleObserver {

        init {
            lifecycle.addObserver(this)
        }

        @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
        override fun initRealm() {
            super.initRealm()
        }

        @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
        override fun closeRealm() {
            super.closeRealm()
        }
    }
}

活动和片段可以从“ RealmOwner”继承,并使用“ LifecycleRealmContainer”实现必需的realmContainer,并将其生命周期传递给它,然后-将用“ onCreate”调用“ initRealm”,并用“ closeRealm”调用与“ onDestroy”。

这样做是为了使您可以在其onCreate期间查询数据库以进行初始化。问题是LifecycleEvent回调是在 之后完成的,才调用实际的“ onCreate”方法。因此-数据库实例未初始化。

class ExampleActivity: AppCompatActivity(), RealmOwner {
    override val realmContainer = RealmOwner.LifecycleRealmContainer(lifecycle)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        configurationA.where<SomeRealmObject>().findAll() // object isn't initialized error
    }
}

问题是-在我尝试初始化的活动/片段中调用onCreate方法之前,有没有一种很好的干净方法让我使用“ LifecycleObserver”工具初始化数据库实例?

0 个答案:

没有答案