Sto cercando di vedere quali di queste implementazioni è meglio per l'accesso ai database SQLite in Applicazioni AndroidSingleton vs una classe interna statica per la classe Helper database in Android
Attuazione 1
Utilizzando DatabaseHelper classi estendono SqliteOpenHelper e utilizzando modello singleton. In alcune rare occasioni vedo arresti anomali perché il database viene chiuso. Anche se un po 'irritante, li ho lasciati passare solo perché era secondario nel grande schema delle cose e nel numero di progetti che ho.
public class DBHelper extends SQLiteOpenHelper {
private static DBHelper instance;
private final String CREATE_HEALTH_DATA_TABLE = "CREATE TABLE IF NOT EXISTS my_table ("
+ BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
+ MT_FIELD_NAME + " TEXT NOT NULL);";
private DBHelper getInstance(Context c) {
if (instance == null) {
instance = new DBHelper(c);
}
return instance;
}
private DBHelper(Context c) {
super(c, "my_database.sqlite", null, 0);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}
Attuazione 2
L'altro modo di attuare questo è quello di creare la classe helper come una classe interna statica all'interno della classe provider di contenuti. Questo è come si fa nell'Esempio di Blocco note negli esempi.
public class DataProvider extends ContentProvider {
/*..Content provider implementation only dbhelper variable and onCreate are shown */
private MTDBHelper dbHelper;
@Override
public boolean onCreate() {
dbHelper = new DBHelper(getContext());
return true;
}
private static class DBHelper extends SqliteOpenHelper {
/// Implementation without making it a singleton
}
}
Quale tra questi è un modo migliore o standard di cose e perché. Immagino che sia il secondo approccio in quanto è una classe privata interiore, ma vorrebbe avere un'opinione di esperti.
Utilizzo i fornitori di contenuti sempre se ciò è importante.
Grazie
http://stackoverflow.com/questions/6092631/static-class-vs-singleton-class – wtsang02
Sono consapevole di come si comporta la classe interna statica. Sto cercando una risposta specifica per l'implementazione di Android che mi aiuti a capire i vantaggi/svantaggi quando si tratta di aprire/accedere/chiudere il database e il threading. – achie