SQLite
 sql >> Base de données >  >> RDS >> SQLite

Fuite de base de données SQLite trouvée

Je ne suis pas sûr que vous utilisez SQLiteOpenHelper correctement... vous n'avez pas besoin de cette myDataBase domaine, l'idée est qu'il gère votre connexion à la base de données pour vous. Ne sous-classez pas de cette façon... sauf si vous faites des choses dans onCreate() etc qui ne sont pas publiés ici, il semble que vous puissiez simplement utiliser SQLiteOpenHelper directement, c'est-à-dire :

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

En supposant que la fin de l'activité devrait également arrêter votre tâche en arrière-plan, je vous recommande d'appeler AsyncTask.cancel(true) depuis votre Activity.onPause() . Assurez-vous que la base de données est nettoyée de onCancelled().

Et si votre tâche en arrière-plan est la seule chose à lire la base de données, faites en sorte qu'elle possède l'instance SQLiteOpenHelper. Il est facile d'avoir des ennuis avec des données statiques, il vaut donc mieux éviter à mon humble avis. Je ferais quelque chose comme ça :

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