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

Vazamento de banco de dados SQLite encontrado


Não tenho certeza se você está usando SQLiteOpenHelper corretamente... você não precisa desse myDataBase campo, a ideia é que ele gerencie sua conexão com o banco de dados para você. Não subclassifique dessa maneira... a menos que você esteja fazendo coisas em onCreate() etc que não são postados aqui, parece que você pode usar apenas SQLiteOpenHelper diretamente, ou seja:
SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
    DB_VERSION_NUMBER);

Supondo que encerrar a atividade também deva interromper sua tarefa em segundo plano, recomendo chamar AsyncTask.cancel(true) do seu Activity.onPause() . Certifique-se de que o banco de dados seja limpo de onCancelled().

E se sua tarefa em segundo plano for a única coisa que lê o banco de dados, torne-a proprietária da instância SQLiteOpenHelper. É fácil ter problemas com dados estáticos, por isso é melhor evitar IMHO. Eu faria algo assim:
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
    }
}