Java 在Android上正确处理域入口

Java 在Android上正确处理域入口,java,android,realm,Java,Android,Realm,我正在为我的Android应用程序使用Realm,我注意到每次打开应用程序时,磁盘使用量都会增加很多。原因是我从未真正关闭过一个领域。我有大约5个不同的活动,使用来自Realm的数据和一个处理与Realm的所有交互的单例类。我选择只有一个类,因为它删除了很多重复的代码。由于我使用的是带有观察者(活动)的单例类,我不知道何时关闭一个领域,也不知道如何避免创建多个实例 现在,每当我需要访问服务器上的数据时,我都在使用Realm.getIntanceAsync(),但据我所知,这不是最佳的,而且显然是

我正在为我的Android应用程序使用Realm,我注意到每次打开应用程序时,磁盘使用量都会增加很多。原因是我从未真正关闭过一个领域。我有大约5个不同的活动,使用来自Realm的数据和一个处理与Realm的所有交互的单例类。我选择只有一个类,因为它删除了很多重复的代码。由于我使用的是带有观察者(活动)的单例类,我不知道何时关闭一个领域,也不知道如何避免创建多个实例

现在,每当我需要访问服务器上的数据时,我都在使用
Realm.getIntanceAsync()
,但据我所知,这不是最佳的,而且显然是对Realm实例的糟糕处理

如果我有单独的活动,所有这些活动都需要来自领域的更新数据,而不存储单个领域的多个副本/版本,那么我将如何构造领域的使用?如果可能的话,我想尽量避免代码重复,但我在Android上看到的大多数领域实例都是在每个活动中打开领域实例,然后在活动的
onDestroy()
中关闭领域实例。我还更希望拥有少量依赖于领域的类,而不是整个应用程序


编辑:我正在使用一个与领域对象服务器同步的领域。

您不需要只有一个类来处理领域管理。 Realm已经管理多个实例,因此它是完全安全的

不关闭领域实例是不好的做法,您应该避免这样做。实际上有两种不同的方式:

  • 或者在需要时获取一个领域实例,然后尽快关闭它。如果运行异步请求,您可能会遇到麻烦

  • 或者在onCreate/onResume方法中获取一个实例,将其存储为类成员,并相应地在onDestroy/onPause中关闭它


但是,创建多个Realm实例并不是磁盘使用率增加的原因。您可以检查是否正确设置了主键。因为如果您不注意,数据可能会被多次存储,导致孤立的数据不会被替换,因此会扩大您的本地数据库。

我明白了,我将检查主键。但是,在每个需要领域数据的活动中打开一个新领域实例不是一种浪费吗?
或者在需要时获取一个领域实例,然后尽快将其关闭。
不建议使用Sync,因为线程上至少需要一个开放领域实例才能使结果保持有效(并允许观察)。虽然如果onCreate/onDestroy中也有领域,那么它会工作,因为它们是ref-counted。好的,感谢您的澄清,我使用的是领域适配器,这意味着我无法尽快关闭实例,我想在onDestroy()中关闭领域是安全的。