Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 销毁数据库实例的位置:Activity onDestroy()或ViewModel onCleared()?_Android_Memory Management_Viewmodel_Android Lifecycle_Android Viewmodel - Fatal编程技术网

Android 销毁数据库实例的位置:Activity onDestroy()或ViewModel onCleared()?

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()回调中执行此操作。例如,如果我对

我应该在哪里销毁数据库实例<代码>OnTestRoy()在活动中,还是在其ViewModel中
onCleared()

我已经在我的Activity
onDestroy()
方法中实现了它:

@覆盖
受保护的空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()