SQLite
 sql >> Database >  >> RDS >> SQLite

La connessione SQLite è trapelata anche se tutto è stato chiuso

Il carattere in grassetto nella citazione corrisponde a questa parte del tuo codice:

private DatabaseManager open() throws SQLException {
    dbHelper = new DatabaseHelper(context);
    db = dbHelper.getWritableDatabase();

da:http://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html

Approccio n. 1:utilizzare una fabbrica astratta per creare un'istanza di SQLiteOpenHelper

Dichiara il tuo database helper come variabile di istanza statica e usa il modello Abstract Factory per garantire la proprietà singleton. Il codice di esempio riportato di seguito dovrebbe darti una buona idea su come progettare correttamente la classe DatabaseHelper.

Il metodo statico getInstance di fabbrica garantisce che esisterà solo oneDatabaseHelper in un dato momento. Se il mInstanceobject non è stato inizializzato, ne verrà creato uno. Se ne è già stato creato uno, verrà semplicemente restituito.

Non dovresti inizializzare il tuo oggetto helper usando con new DatabaseHelper(context) .
Invece, usa sempreDatabaseHelper.getInstance(context) , in quanto garantisce l'esistenza di un solo supporto database durante l'intero ciclo di vita dell'applicazione.

public static class DatabaseHelper extends SQLiteOpenHelper { 

  private static DatabaseHelper mInstance = null;

  private static final String DATABASE_NAME = "database_name";
  private static final String DATABASE_TABLE = "table_name";
  private static final int DATABASE_VERSION = 1;

  public static DatabaseHelper getInstance(Context ctx) {

    // Use the application context, which will ensure that you 
    // don't accidentally leak an Activity's context.
    // See this article for more information: http://bit.ly/6LRzfx
    if (mInstance == null) {
      mInstance = new DatabaseHelper(ctx.getApplicationContext());
    }
    return mInstance;
  }

  /**
   * Constructor should be private to prevent direct instantiation.
   * make call to static factory method "getInstance()" instead.
   */
  private DatabaseHelper(Context ctx) {
    super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
  }
}