java - 用于多种 Activity 的全局 db4o 数据库

标签 java db4o

我正在从事一个设计项目,我需要一些关于 db4o 的指导,因为这是我第一次使用它。在该项目中,我们有一个 Android 应用程序,它有多个 Activity ,并且所有 Activity 都使用相同的数据库。在阅读和谷歌搜索后,这些数据库的打开和关闭对处理器来说很困难,因此在每个 Activity 中打开和关闭是不合理的。

如何打开和关闭在整个应用程序生命周期中需要使用的 db4o 数据库?我何时/何地调用开盘和闭盘?

编辑:我需要在应用程序中设置退出/关闭按钮来决定何时调用关闭数据库方法吗?

最佳答案

由于我的 Android 知识有限,我不能 100% 确定这是否有效。

自定义应用程序对象 您可以注册您的自定义应用程序对象。请参阅here 。该对象可以进行生命周期回调,在您的应用程序启动或终止时调用。它在各种 Activity 中保持活力。

因此,创建您自己的应用程序来扩展 android.app.Application:

public class MyApplication extends Application {
    private volatile ObjectContainer container;
    @Override
    public void onCreate() {
        super.onCreate();
        // the application object is a regular Android context,
        // So you can get the required info`
        this.container = Db4oEmbedded.openFile(...)
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        // if something was not finished, better rollback
        container.rollback();
        container.close();
    }

    public ObjectContainer database(){
        return container;
    }

}

然后使用以下方式注册该对象:

<application android:icon="@drawable/icon" 
       android:label="@string/app_name" 
       android:name="my.packages.MyApplication">

然后您可以在 Activity 中的任何时间使用以下实例:

MyApplication app = (MyApplication) getApplication();
ObjectContainer container = app.database();

静态单例

另一种解决方案是经典的“静态”单例。只要您的应用程序正在运行,就会加载相同的类实例。所以它会让容器保持活力。

关于java - 用于多种 Activity 的全局 db4o 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13225485/

相关文章:

java - db4o 类模型 transient 场

java - Db4o,Java : Storing images using blobs

Java:d​​b4o可以存储org.w3c.dom.Node吗?

java - Maven Resolver 始终从远程存储库下载 maven-metadata.xml

java - 通过 Web Start 执行单个 Java 应用程序时的多个安全对话框

java - 搜索对象数组

asp.net - 我应该如何在 ASP.NET 中使用 DB4O

java - 如何在 JSON 中写入编码流并在 ajax 中检索回来?

Java 执行器服务 :- Notify a thread to wake up when an event occurs

c# - db4o 似乎不存储添加到 List<T> 的项目