如何在android应用程序的整个生命周期中保持全局db4o

如何在android应用程序的整个生命周期中保持全局db4o,android,db4o,Android,Db4o,我们正在开发一个Android应用程序,它使用db4o在多个活动和服务中存储各种对象。我们正在寻找使用db4o的最佳方法,特别是何时打开和关闭数据库。我们不希望在每次存储操作后关闭数据库,并在每次检索操作时重新打开它,因为这可能会影响应用程序的速度,因为打开和关闭对处理器来说很困难。我们更愿意保持db4o的全局状态,以便在应用程序的整个生命周期中使用 我在这里看书 将数据库保存在自定义应用程序对象上并在需要时获取实例是一个好主意: public class MyApplication exten

我们正在开发一个Android应用程序,它使用db4o在多个活动和服务中存储各种对象。我们正在寻找使用db4o的最佳方法,特别是何时打开和关闭数据库。我们不希望在每次存储操作后关闭数据库,并在每次检索操作时重新打开它,因为这可能会影响应用程序的速度,因为打开和关闭对处理器来说很困难。我们更愿意保持db4o的全局状态,以便在应用程序的整个生命周期中使用

我在这里看书 将数据库保存在自定义应用程序对象上并在需要时获取实例是一个好主意:

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;
    }
}

然而,我意识到应用程序的onTerminate()方法仅用于仿真目的,并且从未在实际手机上执行。我的问题是,如果从未调用过onTerminate(),那么我们应该在哪里关闭db对象,打开和关闭的最佳策略是什么?

您可以在应用程序类中创建Lazy load singleton实例,并在启动Activity的OnCreate方法时初始化(打开)它,然后在onDestroy中关闭它