He estado intentando ejecutar mi aplicación en StrictMode para comprobar si hay algún problema oculto que pueda haberse infiltrado. Un problema con el que me encontré es lo que parece ser un falso positivo de Leaked DatabaseConections al usar ContentResolver.Android StrictMode que informa falsos positivos
Después de algunos experimentos tiene el problema simplificado para los siguientes 2 líneas de código:
Cursor c = context.getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, cols, null, null, MediaStore.Video.Media.DEFAULT_SORT_ORDER);
c.close()
Las 2 líneas por encima de generar los siguientes StrictMode violación:
ERROR/StrictMode(26219): Releasing cursor in a finalizer. Please ensure that you explicitly call close() on your cursor:
ERROR/StrictMode(26219): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
ERROR/StrictMode(26219):
at android.database.CursorWindow.<init>(CursorWindow.java:62)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:403)
at android.content.ContentResolver.query(ContentResolver.java:302)
Estoy asumiendo que esto es algo específico del hecho de que el Cursor fue devuelto por un contentProvider (por lo que no es un cursor SQLite directo).
¿Alguien tiene alguna idea si esto es de hecho un falso positivo o realmente hay un cursor con fugas.
Estoy viendo algo similar usando la API de CursorLoader lanzada con Honeycomb. Tengo un CursorLoader (que realiza la consulta en una cadena de fondo) y un SimpleCursorAdapter. En principio, SimpleCursorAdapter debería cerrar cualquier cursor existente cuando cambie uno nuevo desde CursorLoader. Sin embargo, sigo viendo estas violaciones al terminador de cursores de StrictMode también, así que es un poco desconcertante. – tomtheguvnor