2012-08-09 9 views
15

Tengo algunas preguntas con respecto a Cursor.Desventajas de Android de no cerrar el cursor

Quiero saber cuáles son las desventajas de no cerrar un Cursor?

Desasigna recursos, pero ¿qué recursos se desasignan?

Si no cerramos el Cursor? ¿Cuáles serán las consecuencias y en qué medida?

No cerrando un Cursor no afecta un poco a Activity, pero da error en un log cat.

Respuesta

-2

Si no cierra el cursor, tendrá problemas para acceder a sus datos en su base de datos porque mientras la base de datos esté abierta, no se podrá acceder si ocurre algo como la Actividad está en pausa o no. Específicamente, este problema se puede aliviar si dejas que la Actividad lo administre.

+0

No he cerrado el cursor en mi código, y está mostrando los datos correctamente, estoy accediendo a los datos y la aplicación se está ejecutando bien, solo está dando error en logcat que no se ha desactivado Cerrar o cerrar – Haris

+0

Es su Actividad que controla el significado del cursor ¿usaste manageCursor (X)? – JoxTraex

+0

no, está funcionando sin administrarCursor – Haris

7

Al cerrar un Cursor se evitarán posibles fugas de memoria, por lo que deben estar siempre cerrados cuando ya no se usen.

+0

¿no es que java maneja todos los problemas de memoria? ¿Qué recursos especiales en este caso? Sé que debería estar cerca, solo quiero saber por qué? – Haris

+0

Un 'Cursor' tiene recursos nativos detrás, como un identificador de archivo (recuerde, una base de datos SQLite usa archivos indexados). Además, como nota al margen, 'Cursor's debe cerrarse en un bloque' finally' para garantizar que se cierren. –

+1

que recursos nativos? y cómo son tan dañinos? o no causa un daño extremo? – Haris

3

Cursor es solo una interfaz. Mucho depende de la aplicación, lo clase que implementa la interfaz que está utilizando ...

específico en el caso de SQLiteCursor, hay bastantes cosas para conseguir limpiado arriba (esto es de Froyo):

@Override 
public void close() { 
    super.close(); 
    deactivateCommon(); 
    mQuery.close(); 
    mDriver.cursorClosed(); 
} 

no se cierra el cursor, los datos deben todavía ser coherente, pero que van a perder memoria ...

3

no creo que puedes encontrar diversas cuestiones olvidarse de cerrar un cursor. El problema (y esto se aplica a casi cualquier fuga de memoria) es que si sigues haciéndolo una y otra vez, eventualmente ocurrirá algo malo.

Por ejemplo, escribí una aplicación que carga datos de la base de datos SQLite de un dispositivo a un servidor. Si no cerraba el cursor cada vez que terminaba de leer y escribir desde la base de datos, eventualmente me encontraba con errores de falta de memoria y varios otros problemas.