2010-07-28 6 views
2

Je fournis un curseur à une ListActivity comme ceci: Ma question est de savoir comment/quand devrais-je fermer mon curseur quand j'ai terminé?Quand dois-je fermer le curseur que je fournis à ListView

Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
     if (cursor != null) { 
      mCursorAdapter = new CursorAdapter(this, cursor); 
      setListAdapter(mCursorAdapter); 
     } 

Merci.

Répondre

4

onDestroy(). Plus tôt, si vous éliminez spécifiquement la liste plus tôt que cela. Ou, appelez startManagingCursor(cursor), et Android le fermera pour vous, quand il est sûr de le faire.

+0

Que dois-je faire dans mon onDestory() pour fermer le curseur que je passe à CursorAdpater()? Ou je dois garder une référence à getContentResolover(). Query() moi-même et appeler 'close()' dans le onDestory() manuellement? Merci. – michael

+1

@michael: Si vous utilisez 'getContentResolver(). Query()', ce 'Cursor' est déjà géré, et vous n'avez donc pas besoin de le fermer vous-même, car Android le fermera pour vous. Je m'excuse - je me suis concentré sur le curseur et je n'ai pas réalisé que vous l'aviez obtenu à partir d'un 'ContentResolver' au lieu de SQLite. – CommonsWare

+0

@CommonsWare: Si je mets la ligne 'cursor.close()' dans 'onDestroy', le curseur sera fermé chaque fois que l'orientation de l'appareil changera et ce n'est pas souhaitable. Que puis-je faire dans ce cas? –

Questions connexes