Android 销毁数据库实例的位置:Activity onDestroy()或ViewModel onCleared()?
我应该在哪里销毁数据库实例<代码>OnTestRoy()在活动中,还是在其ViewModel中Android 销毁数据库实例的位置:Activity onDestroy()或ViewModel onCleared()?,android,memory-management,viewmodel,android-lifecycle,android-viewmodel,Android,Memory Management,Viewmodel,Android Lifecycle,Android Viewmodel,我应该在哪里销毁数据库实例OnTestRoy()在活动中,还是在其ViewModel中onCleared() 我已经在我的ActivityonDestroy()方法中实现了它: @覆盖 受保护的空onDestroy(){ super.ondestory(); //如果正在销毁的活动不是因为配置更改。。。 if(isFinishing()){ AppDatabase.destroyInstance(); } } 似乎建议在ViewModel的onCleared()回调中执行此操作。例如,如果我对
onCleared()
我已经在我的ActivityonDestroy()
方法中实现了它:
@覆盖
受保护的空onDestroy(){
super.ondestory();
//如果正在销毁的活动不是因为配置更改。。。
if(isFinishing()){
AppDatabase.destroyInstance();
}
}
似乎建议在ViewModel的
onCleared()
回调中执行此操作。例如,如果我对活动及其片段使用相同的ViewModel会怎么样?然后调用onCleared()
方法两次(对于ViewModel的每个实例)。您的实现很好。当您的活动
被销毁时,您可以释放数据库资源 您的实现很好。当您的活动
被销毁时,您可以释放数据库资源 为什么需要销毁实例?这是哪个类的实例?@DavidWasser它的Room数据库:公共抽象类AppDatabase扩展了RoomDatabase{…}
。我不知道为什么要销毁它,我已经看到,在这个方法中,只需将对数据库的引用设置为null
,以允许垃圾收集器回收它。在何处创建数据库?在类AppDatabase extensions RoomDatabase…
中,首先从存储库调用getDatabase()
,为什么需要销毁实例?这是哪个类的实例?@DavidWasser它的Room数据库:公共抽象类AppDatabase扩展了RoomDatabase{…}
。我不知道为什么要销毁它,我已经看到,在这个方法中,只需将对数据库的引用设置为null
,以允许垃圾收集器回收它。您在哪里创建数据库?在类AppDatabase extensions RoomDatabase…
中,首先从存储库调用getDatabase()