シングルトンを探しているときにデータベースヘルパークラスを一度だけ初期化しようとしている場合はどうなりますか?? ここにあなたがそれを作ることができる例があります
public class ContactDBHelper extends SQLiteOpenHelper {
private ContactDBHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
private static ContactDBHelper mInstance;
public static synchronized ContactDBHelper getInstance() {
if (mInstance == null) {
mInstance = new ContactDBHelper(Util.getApplicationContext(),
ContactDB.DB_NAME, null, ContactDB.DB_VERSION);
}
return mInstance;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(ContactDB.Contact.CREATE_STMT);
db.execSQL(ContactDB.Contact.CREATE_PHONE_NUMBER_INDEX);
db.execSQL(ContactDB.Contact.CREATE_REVERSE_PHONE_NUMBER_INDEX);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
@Override
protected Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
}
最初に呼び出すとContactDBHelper.getInstance();
、インスタンスが初期化されます。その後、任意のアプリケーション コンポーネントまたは任意のメソッドが呼び出すと、初期化されず、初期化されたシングルトン インスタンスが返されます。注: Util.getApplicationContext の場合、メインの Activity に設定されているアプリケーション コンテキストを返す静的ヘルパー メソッドです。
メモリリークの場合、またはを使用してアプリを回避または保護できWeakReference
ますSoftRerference
ここにUtilクラスがあります
public class Util {
private static WeakReference<Context> applicationContext;
public static Context getApplicationContext() {
return applicationContext.get();
}
public static void setApplicationContext(Context context) {
applicationContext = new WeakReference<Context>(context);
}
}