OrmLite 和 greenDAO 是否在后台线程中执行查询,它们是否将结果部分加载到内存中?



为了避免阻塞主线程/UI线程,Android API提供了Loader访问数据库。为了节省内存(RAM), API不会将整行(结果)加载到内存中,因此我们可以拥有包含如此多项的ListView而不会内存不足。

Do OrmLite &greenDAO提供了这两种功能。如果没有,是否有任何方法做异步查询和部分加载和交换填充巨大的数据到ListView ?

我不认为orm框架提供了只加载行部分的能力。

使用greendao,您可以在Query上使用listLazy()从DB惰性加载实体。与"预取"所有实体相比,这带来了巨大的性能优势。

我知道greendao还提供了一些使用AsyncSession异步加载实体的方法。但我目前不知道如何使用它。

通常情况下,greendao中的所有crud操作都发生在调用update等操作的同一个线程上。

我还没有使用过OrmLite,所以我没有关于这个的信息

我不能在OrmLite上发音,但是使用greenDAO我知道你可以在数据库上执行原始查询。毕竟,在所有生成的代码下面是一个SQLITE数据库。

看一下greenDAO示例项目中的NoteActivity:https://github.com/greenrobot/greenDAO/blob/master/DaoExample/src/main/java/de/greenrobot/daoexample/NoteActivity.java

在onCreate()中,你可以清楚地看到光标是这样获取的:

DevOpenHelper = new DaoMaster。DevOpenHelper(this, "db_name", null);

sqliteddatabasedb = helper.getWritableDatabase();DaoMaster = new DaoMaster(db);
DaoSession = daoMaster.newSession();ObjectDao ObjectDao = daossession . getobjectdao ();
[. .]
Cursor = db.query(objectDao.getTablename(), objectDao.getAllColumns(), null, null, null, null, null);

可以看到,这个游标可以用作任何其他游标来显示数据。现在,在主线程上这样做是错误的,这样做只是为了暴露一个功能。您可以从这里做什么(因为您提到了加载器):

  1. 为每个应用程序保留一个db/daoSession实例。理想情况下,将代码移动到应用程序类中或创建一个单例来处理它
  2. 创建加载器并覆盖loadInBackground()。在该方法中,运行db查询并返回游标。将加载结果与光标适配器一起使用并显示数据。

相关内容

  • 没有找到相关文章

最新更新