【问题标题】:global db4o database for multiple activities用于多个活动的全局 db4o 数据库
【发布时间】:2012-11-05 03:15:48
【问题描述】:

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

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

编辑:我是否需要应用程序中的退出/关闭按钮来确定何时调用关闭数据库方法?

【问题讨论】:

    标签: java db4o


    【解决方案1】:

    如果这可行,我不是 100%,因为我的 Android 知识有限。

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

    所以,创建您自己的扩展 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">
    

    然后您可以在您的活动中的任何时间使用:

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

    静态单例

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

    【讨论】:

    • 感谢您的回复,我尝试使用小教程中发布的方式,但最终尝试使用单例,我有另一篇帖子,因为我也遇到了麻烦! :(
    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多