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