У меня есть приложение с одним действием , и к нему прикреплено SharedViewModel
, его основное назначение - использовать его для внутренней связи между фрагментами и т. Д. Я также использую Realm как решение для хранения. Эта viewModel, как и другие viewModel, расширяет BaseViewModel.
open class BaseViewModel(): ViewModel() {
val realm: Realm = Realm.getDefaultInstance()
override fun onCleared() {
super.onCleared()
realm.close()
Log.d("BVM", "realm is ${ if (realm.isClosed) "closed." else "not closed. Opened connections: ${Realm.getLocalInstanceCount(Realm.getDefaultConfiguration()!!)}"}")
}
}
Мы все знакомы с этой картинкой
Поскольку lyfecycle SharedViewModel
зависит от жизненного цикла жизненного цикла действия, метод onCleared()
этого viewModel будет вызываться не после onDestroy
вызова действия, а после завершения действия. Это не одно и то же. В результате этого, когда я покидаю свое приложение, одно соединение Realm остается открытым, поскольку активность не находится в состоянии Завершено . Все остальные модели представления, связанные с фрагментами, вызвали свои собственные onCleared()
методы, и связи их Царства закрыты.
Какой самый лучший и чистый способ справиться с этим?
У меня есть обходной путь, в котором я вызываю ViewModel onCleared()
вручную в методе onDestroy
, и он работает, но это решение - чушь.
Заранее спасибо!