2012年9月7日金曜日

[android] SQLiteOpenHelperをシングルトンにする

ActivityとWidgetを併用するようなアプリ

もしくはActivityの裏でDBのデータを頻繁に更新するような、Serviceを動かすアプリ



このようなアプリを作る場合、SQLiteへのアクセスが頻発し、トランザクションをかますような

処理をした時に、参照系のSQLがエラーでアプリが落ちる。という事があります。


このような場合、SQLiteOpenHelperを継承したクラスをシングルトンにすることで対応できます。


class DatabaseHelper extends SQLiteOpenHelper {
    // 唯一のクラスインスタンス
    private static DatabaseHelper instance = null;
    
    /**
     * コンストラクタをprivateにすることで、外部からはインスタンス化できないようにする
     */
    @Override
    private DatabaseHelper(Context context) {
        super(context, "DBNAME", null, 1);
    }

    /**
     * このstaticメソッドからインスタンスを得る
     * 多数のクラスから参照されても、常にインスタンスは1つになる
     */
    public static synchronized DatabaseHelper getInstance(Context context) {
        if (instance == null) {
            instance = new DatabaseHelper(context);
        }
        return instance;
    }

    @Override
  public void onCreate(SQLiteDatabase db) {
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  }
}

このクラスは他の常用クラスとまとめてjarにしてもいいかも。

0 件のコメント:

コメントを投稿