3

ユーザーがSQLiteOpenHelperオブジェクトを取得できるようにする次のクラスがあります

import android.content.Context;

public class DBUtils {  

    private DBUtils(){

    }


    private static DBHelper dbHelper ;


    public static synchronized DBHelper getDBHelper(Context context){

        if(dbHelper == null){
            dbHelper = new DBHelper(context, ApplicationMetaData.DATABASE_NAME, null, ApplicationMetaData.DATABASE_VERSION);
        }
        return dbHelper;


    }



    public static synchronized void closeDBHelper(){

        if(dbHelper!=null )
            dbHelper.close();
        dbHelper = null;
    }


    @Override
    protected Object clone() throws CloneNotSupportedException {
        // TODO Auto-generated method stub
        throw new CloneNotSupportedException();
    }

}

closeこのシングルトン オブジェクトは、呼び出されないため、メソッドでリレーできませんonTerminate()。ユーザーがアプリを終了したときに閉じたいですか? これに対する任意の解決策

4

3 に答える 3

7

閉じても気にしないでください。複数の SQLiteOpenHelper を作成しないようにしてください。ここを参照してください:

http://touchlabblog.tumblr.com/post/24474750219/single-sqlite-connection

于 2012-12-20T23:03:42.587 に答える
3

設計上、Android にはそのような「アプリが閉じられた」イベントはありません。データベース接続ごとに処理してActivity、いつ破棄されるかを知るか、Activityどのオブジェクトがデータベースヘルパーを使用しているかをどうにかして注意し、他のオブジェクトがヘルパーを使用しなくなったときにのみヘルパーを閉じる必要があります。

シングルトン ソリューションを使用する場合は、メモリ リークが発生する可能性があるため、コンテキストではなくApplicationコンテキストをgetDBHelper()メソッドに渡すことに注意してください。Activity

于 2012-04-29T10:25:23.657 に答える
0

AtomicIntegerを使用して呼び出しの数を追跡することをお勧めしgetDBHelperます。getDBHelper次に、それぞれを呼び出して/Activityで閉じることができます(状況に応じて)。各 close コールはカウンターをデクリメントし、カウンターがその位置にある場合は、ヘルパーを実際に閉じることができます。たとえば、このアプローチを示す ORMlite のサンプル コードを参照してください。onPauseonDestroy0

于 2012-04-29T10:39:57.020 に答える