Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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 实例化和关闭领域实例_Android_Persistence_Realm - Fatal编程技术网

Android 实例化和关闭领域实例

Android 实例化和关闭领域实例,android,persistence,realm,Android,Persistence,Realm,我对如何/何时/为什么关闭领域实例有点困惑。在应用程序的整个过程中,我从未在我的领域实例上调用过.close(),因为如果我关闭它,我将无法再使用我处理的领域对象。也许关闭领域实例的点应该在我的应用程序onDestroy()中,就像我在应用程序onCreate()中创建实例一样。实际上,我使用的是在我的应用程序中创建的领域[*]的一个单例实例 这(领域单例)是一个好方法吗?如果我不关闭我的领地会发生什么 [*]事实上,我现在考虑的是Flywheight领域实例集合,而是每个线程存储一个实例,因为

我对如何/何时/为什么关闭领域实例有点困惑。在应用程序的整个过程中,我从未在我的领域实例上调用过
.close()
,因为如果我关闭它,我将无法再使用我处理的领域对象。也许关闭领域实例的点应该在我的应用程序
onDestroy()
中,就像我在应用程序
onCreate()中创建实例一样。实际上,我使用的是在我的应用程序中创建的领域[*]的一个单例实例

这(领域单例)是一个好方法吗?如果我不关闭我的领地会发生什么


[*]事实上,我现在考虑的是Flywheight领域实例集合,而是每个线程存储一个实例,因为现在我的应用程序中出现了服务意图,需要从其线程访问领域。我认为在这里(在服务意图中),我可以在
ondestory()中关闭领域,因为线程将完成工作。

领域在内部处理缓存,并尽可能提高性能。因此,您不应该害怕调用
Realm.getInstance()
。原因是需要
close()
,这可能会导致内存泄漏,最终导致应用程序死机

简而言之,您不应该自己创建领域单例或其他缓存模式。 您可以在此处阅读有关控制领域生命周期的最佳实践的更多信息:


请注意,
Application.ondestory()
不存在,并且正常应用程序不会调用
Application.onTerminate()

首先感谢您抽出时间。请您再解释一下,如果不关闭服务器,内存泄漏的风险有多大?我开始面临这样的问题:“IllegalStateException:这个领域实例已经被关闭,使其无法使用”,并且从错误的线程访问领域。提前感谢。Realm在引擎盖下分配了大量本地资源。即使不再需要,不关闭王国也会让它们留在身边。不过,一个更大的问题是,开放领域保留了它们使用的版本,因此在不自动更新领域的后台线程上,必须跟踪更多的更改,这些更改将转换为您的领域文件,其大小将比必须的要大。