如果您仅在寻找单例时才尝试初始化数据库帮助程序类,对吗?这是一个如何制作的示例
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);
}
}