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在引擎盖下分配了大量本地资源。即使不再需要,不关闭王国也会让它们留在身边。不过,一个更大的问题是,开放领域保留了它们使用的版本,因此在不自动更新领域的后台线程上,必须跟踪更多的更改,这些更改将转换为您的领域文件,其大小将比必须的要大。