读取Android Cursor是否一直到数据库?

Sof*_*les 3 database android

我有一个沉重的Android应用程序,并希望确保永远不会ANR它.

我搬到我的数据库查询从UI线程(以AsyncTasks)的距离,但我还是从光标在UI线程读取,因为我想返回光标某处存储在内存中,也就是它的实际读数不走了整个数据库的方式.这是正确的还是我真的需要将所有光标读取移动到非UI线程?

更具体:

是否例如http://developer.android.com/reference/android/database/Cursor.html#getInt(int)从memeory读呢,还是从实际的SQLite数据库AQUIRE某种读锁.

我想我的案例中的Cursor实现是一个SQLiteCursor,因为ContentProvider是使用SQLite数据库实现的.

Com*_*are 10

当你打电话query()或打电话rawQuery()SQLiteDatabase,Cursor会立即返回a ,因为实际查询本身会延迟,直到你开始使用数据.操纵Cursor或需要暗示执行查询的数据的任何调用(例如getCount())将实际执行查询.因此,最好在后台线程中"触摸" Cursorin doInBackground().

但是,从那时起,整个结果集在内存中,结果集低于1MB.

  • @SoftCharles:"至少不在使用ContentProviders的Android环境中" - 你的问题讨论了SQLite,而不是内容提供者,所以我给了你SQLite的答案,而不是内容提供者.我为没有回答你实际上没有问过的问题而道歉. (7认同)