【问题标题】:android db4o deactivate object properlyandroid db4o 正确停用对象
【发布时间】:2011-01-13 22:42:09
【问题描述】:

我使用 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/c 我永远不必更新它们,我该怎么做?

【问题讨论】:

    标签: java android db4o onconfigurationchanged


    【解决方案1】:

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

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

    现在您不应该收到 DatabaseClosedException。

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

    【讨论】:

    • 啊,很高兴知道,我对停用的理解有误,感谢您的澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多