2010-09-17 11 views
0

Dans une application Android que j'ai développée, j'ouvre un curseur sur une requête avec un jeu de résultats assez volumineux (~ 1k lignes) et je le garde ouvert indéfiniment. Est-ce une bonne pratique? Si ce n'est pas le cas, dois-je fermer le curseur dans le gestionnaire onClose(), puis le rouvrir dans le gestionnaire onStart()?Maintien de l'ouverture d'un curseur Sqlite

L'application semble fonctionner correctement, mais elle se bloque parfois de manière aléatoire après avoir été inactive pendant une longue période de temps et je pense qu'elle pourrait être liée au curseur.

Répondre

1

Le curseur ne doit pas rester ouvert indéfiniment car il laissera la base de données dans un état incorrect lorsque votre application est finalement supprimée, entraînant des erreurs dans le journal si vous avez remarqué.

Ce que vous pouvez faire est de le fermer dans onStop et de l'ouvrir de nouveau dans onStart. Alternativement, vous pouvez laisser Android gérer cela automatiquement pour vous en appelant startManagingCursor(c) à partir de votre activité.

docs

+0

Je le ferme dans la méthode onDestroy. J'ai effectivement trouvé la cause première du problème et ce n'est pas lié au curseur afaik. Je veux garder le curseur ouvert car il est coûteux de le recréer. – ghempton

+0

Tant qu'il est fermé à un certain point, tout devrait bien se passer. Sachez que onDestroy ne peut pas être appelé tout le temps. (consultez le cycle de vie) – smith324