1

私は設計プロジェクトに取り組んでおり、db4o を使用するのは初めてなので、db4o に関するガイダンスが必要です。このプロジェクトには、複数のアクティビティがあり、そのすべてが同じデータベースを使用する Android アプリがあります。これらのデータベースを読んでグーグルで調べた後、これらのデータベースを開いたり閉じたりするのはプロセッサにとって難しいため、各アクティビティ内で開いたり閉じたりするのは不合理です。

アプリケーションの存続期間を通じて使用する必要がある db4o データベースを開いたり閉じたりするにはどうすればよいですか? いつ/どこでオープンとクローズを呼び出しますか?

編集:データベースを閉じるメソッドをいつ呼び出すかについて、アプリに終了/閉じるボタンが必要ですか?

4

1 に答える 1

0

私の Android の知識は限られているため、これが機能するかどうかは 100% ではありません。

カスタム アプリケーション オブジェクト カスタム アプリケーション オブジェクト を登録できます。ここを参照してください。このオブジェクトは、アプリの開始時または終了時に呼び出されるコールバックをライフサイクルできます。アクティビティ全体で生き続けます。

したがって、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();

静的シングルトン

別の解決策は、古典的な「静的」シングルトンです。アプリケーションが実行されている限り、クラスの同じインスタンスがロードされます。したがって、コンテナは存続します。

于 2012-11-06T19:48:52.950 に答える