¿La lectura de un Cursor de Android va todo el camino a la base de datos?
Tengo una especie de pesada aplicación de Android y quiero asegurarse de que nunca ANR.
He movido mis consultas de la base de datos lejos del hilo de UI (a AsyncTasks), pero todavía leo del cursor en el hilo del ui puesto que supongo que el cursor vuelto se almacena en alguna parte en memoria, es decir la lectura real de él no va el todo el camino a la base de datos. ¿Es correcto o debo realmente mover todas las lecturas del cursor a los subprocesos no UI también?
- ¿Cómo funciona realmente el oyente de firebase?
- IllegalArgumentException: el valor de enlace en el índice 1 es nulo
- No se pudo recuperar datos de la base de datos a listview.
- Acceso a bases de datos en Android
- Realm.io y consultas asincrónicas
Para ser más especifico:
Hace por ejemplo http://developer.android.com/reference/android/database/Cursor.html#getInt(int ) leyó de memeory, o hace aquire una cierta clase de bloqueo de la lectura de la base de datos real de SQLite.
Supongo que la implementación Cursor en mi caso es un SQLiteCursor ya que el ContentProvider se implementa utilizando una base de datos SQLite.
- Android SQLiteException "no such table" durante la compilación: tabla INSERT INTO
- Cómo comprobar si ya existe un valor en la base de datos en Android
- Conectar la aplicación android con la base de datos de un sitio web
- ¿Cómo conectarse a un servidor PostgreSQL a través de JDBC en Android?
- Cómo poner base de datos existente en el archivo .apk?
- ¿Cómo se comprueba si existe una tabla en una base de datos SQLite de Android?
- Base de datos de Firebase de Android: Recuperación de datos únicos sin detector de eventos
- Base de datos pre-poblada de Android
Cuando llama a query()
oa rawQuery()
en un SQLiteDatabase
, un Cursor
se devuelve inmediatamente, porque la propia consulta real se retrasa hasta que empiece a utilizar datos. Cualquier llamada que manipule el Cursor
o necesite datos que impliquen que la consulta se ejecute (por ejemplo, getCount()
) ejecutará la consulta. Por lo tanto, es mejor "tocar" el Cursor
en doInBackground()
mientras está en el hilo de fondo.
A partir de ese momento, sin embargo, todo el conjunto de resultados está en la memoria, para los conjuntos de resultados en 1 MB.
- El servicio no se reinicia después de que "Clear Memory" + appWidget se bloquea
- view.getHitRect (rect) no funciona