sql >> Base de Datos >  >> RDS >> SQLite

Se encontró una fuga en la base de datos SQLite

No estoy seguro de estar usando SQLiteOpenHelper correctamente... no necesitas eso myDataBase field, la idea es que administre la conexión de su base de datos por usted. No haga subclases de esa manera... a menos que esté haciendo cosas en onCreate() etc. que no se publican aquí, parece que solo puede usar SQLiteOpenHelper directamente, es decir:

SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
    DB_VERSION_NUMBER);

Suponiendo que finalizar la actividad también debería detener su tarea en segundo plano, recomendaría llamar a AsyncTask.cancel(true) desde tu Activity.onPause() . Asegúrese de que la base de datos esté limpia desde onCancelled().

Y si su tarea en segundo plano es lo único que lee la base de datos, conviértala en la instancia de SQLiteOpenHelper. Es fácil meterse en problemas con los datos estáticos, por lo que es mejor evitarlo en mi humilde opinión. Yo haría algo como esto:

protected class BackTask extends AsyncTask<String, Integer, String>
{
    private SQLiteOpenHelper sqlite;

    public void BackTask(Context ctx) {
        sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
                                      DB_VERSION_NUMBER);
    }
    @Override
    protected String doInBackground(String... params) 
    {
         try {
                //get requeste data from the database
                //access the web service
                return result;

              } catch (Exception e) { 
         }
         return null;
    }

    @Override
    protected void onCancelled() {
         sqlite.close();
    }

    @Override
    protected void onPostExecute(String result)
         sqlite.close();
         // Update UI here
    }
}