SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

SQLite Connection vazou embora tudo fechado


A fonte em negrito na citação corresponde a esta parte do seu código:
private DatabaseManager open() throws SQLException {
    dbHelper = new DatabaseHelper(context);
    db = dbHelper.getWritableDatabase();

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

Abordagem nº 1:use uma fábrica abstrata para instanciar o SQLiteOpenHelper

Declare seu auxiliar de banco de dados como uma variável de instância estática e use o padrão Abstract Factory para garantir a propriedade singleton. O código de exemplo abaixo deve lhe dar uma boa idéia de como projetar a classe DatabaseHelper corretamente.

O método getInstance de fábrica estática garante que apenas oneDatabaseHelper existirá em um determinado momento. Se o objeto mInstance não tiver sido inicializado, um será criado. Se um já tiver sido criado, ele será simplesmente retornado.

Você não deve inicializar seu objeto auxiliar usando com new DatabaseHelper(context) .
Em vez disso, sempre useDatabaseHelper.getInstance(context) , pois garante que apenas um auxiliar de banco de dados existirá em todo o ciclo de vida do aplicativo.

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