Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Singleton vs una clase interna estática para la clase de ayuda de base de datos en Android

Estoy tratando de ver cuál de estas implementación es mejor para acceder a la base de datos sqlite en las aplicaciones de Android

Implementación 1

Utilizar las clases de DatabaseHelper que amplían SqliteOpenHelper y utilizan patrón singleton. En algunas raras ocasiones veo bloqueos porque la base de datos está cerrada. Aunque un poco irritante, les dejé pasar sólo porque era menor en el gran esquema de cosas y el número de proyectos que tengo.

  • Android obtiene el valor del botón de radio seleccionado
  • DialogFragment con un diseño personalizado causa un bloqueo en mi aplicación
  • Cómo realizar la implementación personalizada de Retrofit2.Call <T>
  • Android - Configuración de Roboguice 2.0?
  • Cómo escribir un InputStream potencialmente enorme para el archivo?
  • La pista EditText de Android no aparece
  • 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) {} } 

    Implementación 2

    La otra forma de implementar esto es crear la clase auxiliar como una clase interna estática dentro de la clase Proveedor de contenido. Así es como se hace en el ejemplo del Bloc de notas en las muestras.

     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 } } 

    Cuál entre éstos es una manera mejor o estándar de cosas y porqué. Estoy adivinando que es el segundo enfoque, ya que es una clase privada interna, pero me gustaría tener una opinión de expertos.

    Estoy usando Proveedores de contenido siempre si eso importa.

    Gracias

  • ¿Cómo implemento el mecanismo de reciclado de la vista para PagerAdapter?
  • Carpeta de instalación de SDK de Android en OS X
  • Cargando todas las imágenes de la galería en la aplicación en android
  • Alineación derecha del texto en Android TextView
  • ¿Por qué Android Gradle preDexDebug "Origen y destino debe ser diferente" la construcción falló?
  • No se puede pausar la actividad, la vista de contenido aún no se ha creado
  • One Solution collect form web for “Singleton vs una clase interna estática para la clase de ayuda de base de datos en Android”

    Yo tampoco. Tengo una clase no-estática que extienda SqliteOpenHelper . Cada vez que necesito el db, lo abro creando una nueva instancia de DBHelper , hago lo que necesito hacer con él, y cierro de inmediato, reabriéndolo más tarde sólo cuando lo necesite. Es posible ejecutar en el caso con esta implementación donde dos secciones de código tratan de modificar el db al mismo tiempo. Para evitarlo, envuelva cada método en bloques sincronizados. No he tenido ningún problema con este enfoque.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.