为了避免阻塞主/ UI线程,Android API提供了Loader
来访问数据库。为了节省内存(RAM),API不会将整行(结果)加载到内存中,因此我们可以让ListView
包含这么多项而不会出现内存。
OrmLite& greenDAO提供了这两种功能吗?如果没有,是否有任何方法可以进行异步查询和部分加载和交换,以便将巨大的数据填充到ListView
?
答案 0 :(得分:0)
我认为ORM框架不能仅加载行部分。
使用greendao,您可以使用listLazy()
上的Query
从数据库懒洋洋地加载实体。与“预取”所有实体相比,这会带来很大的性能优势。
我知道greendao还提供了一些用AsyncSession
异步加载实体的方法。但我目前不知道如何使用它。
通常,greendao中的所有CRUD操作都发生在调用update等的同一个线程上。
我还没有使用过OrmLite,所以我没有关于此的信息。
答案 1 :(得分:0)
我无法通过OrmLite发音但是使用greenDAO我知道你可以在db上执行原始查询。毕竟,所有生成的代码都在于SQLITE数据库。
查看greenDAO示例项目中的NoteActivity: https://github.com/greenrobot/greenDAO/blob/master/DaoExample/src/main/java/de/greenrobot/daoexample/NoteActivity.java
在onCreate()中,您可以清楚地看到光标是这样获取的:
DevOpenHelper helper = new DaoMaster.DevOpenHelper(this," db_name",null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster =新DaoMaster(db);
DaoSession daoSession = daoMaster.newSession(); ObjectDao objectDao = daoSession.getObjectDao();
[..]
游标cursor = db.query(objectDao.getTablename(),objectDao.getAllColumns(),null,null,null,null,null);
如您所见,此光标可用作显示数据的任何其他光标。 现在,在主线程上执行此操作是错误的,这只是为了公开功能。你能做些什么(因为你提到装载机):