0

複数のアクティビティやサービスを通じてさまざまなオブジェクトを格納するために db4o を使用する 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 オブジェクトをどこで閉じる必要があるかということです。これは、開閉に関する最良の戦略でしたか?

4

1 に答える 1

0

アプリケーション クラスで遅延ロード シングルトン インスタンスを作成し、Launching Activity の OnCreate メソッドで初期化 (Open) し、onDestroy 内で閉じることができます。

于 2014-02-16T08:52:24.607 に答える