0

我使用 db4o 的方式实际上只是只读的。我将在应用程序中打包一个数据库,并不时对其进行一些后台更新,我可以以不同的方式处理。但是对于我显示来自数据库的数据的活动,我不需要进行任何更新,因此我只想从数据库中获取数据并将该数据“停用”,以便当活动有由于屏幕方向更改或其他原因导致的配置更改,我可以再次快速布局活动。什么是停用对象的正确方法,以便它们仍然可用于我的活动。目前我有类似的代码

List<MyObject> mList = db().queryByExample(persistentClass);  // db just gets my ObjectContainer

我试过做这样的事情

db().ext().deactivate(mList);

但它似乎没有工作。我需要遍历列表的每个项目以停用它吗?

当您更改 android 上的屏幕方向时,它会触发我关闭数据库的活动关闭方法。但随后重新启动,我不想再次填充 mList。

所以我不断收到“ com.db4o.ext.DatabaseClosedException”异常,因为在我的活动布局中,我做了类似的事情

mList.size()

我真的只是想停用 b/ci 对象永远不必更新它们,我该怎么做?

4

1 回答 1

4

首先,您要确保所有对象都已加载。db4o 只返回一个延迟加载列表,它会在您访问对象时加载它们。您需要将对象复制到不需要正在运行的数据库的常规列表中。这很简单,只需将查询结果传递给一个新的数组列表即可:

 List<MyObject> mList = new ArrayList<MyObject>(db().queryByExample(persistentClass)); 

现在你不应该得到 DatabaseClosedException。

然后我只想补充一点,db4o 中的“停用”是完全不同的。它与激活机制有关。去激活与激活相反。激活将对象从数据库加载到内存中。停用使内存中的对象变成一个空壳,其中没有数据。显式停用仅在特殊情况下对安全内存有用。

于 2011-01-14T13:45:46.160 回答