싱글 도우미를 찾고있는 데이터베이스 도우미 클래스를 한 번만 초기화하려는 경우 ?? 여기 당신이 처음 ContactDBHelper.getInstance();
를 호출하는 경우가
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();
}
}
, 그 인스턴스를 초기화 할 수있는 방법을 예입니다, 모든 응용 프로그램 구성 요소 또는 호출됩니다 어떤 방법 그 후, 그것은 습관이 싱글을 반환합니다 초기화 초기화 된 인스턴스. 참고 : Util.getApplicationContext의 경우 주 활동에 설정된 응용 프로그램 컨텍스트를 반환하는 정적 도우미 메서드입니다.
메모리 누수를 들어, 피할 수 또는 여기
WeakReference
또는 SoftRerference
를 사용에서 응용 프로그램을 보호 당신은 응용 프로그램 클래스를 확장하고 하나의 글로벌 참조를 사용할 수있는 백분율 클래스
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);
}
}
사실 나는 그런 것을하려고 생각했지만 WeakReference를 사용하지는 않았습니다. 정말 도움이되었습니다, 많이 감사합니다! – hardartcore