2014-06-05 7 views
4

메인/UI 스레드를 차단하지 않기 위해 Android API는 데이터베이스에 액세스하기 위해 Loader을 제공합니다. 메모리 (RAM)를 절약하기 위해 API는 전체 행 (결과)을 메모리에로드하지 않기 때문에 메모리가 부족한 많은 항목이 포함 된 ListView을 가질 수 있습니다.OrmLite & greenDAO가 백그라운드 스레드에서 쿼리를 실행하고 결과를 메모리에 부분적으로로드합니까?

마. OrmLite & greenDAO은 두 가지 기능을 모두 제공합니까? 그렇지 않은 경우 비동기 쿼리를 수행하고 거대한 데이터를 ListView에 채우는 데 대한 부분로드 앤드 스왑을 수행하는 방법이 있습니까?

+0

이 질문에 대한 공지 사항은 무엇입니까?나는 같은 질문을 가지고 있으며, 실제로 Android 기본 구성 요소를 사용하는 것이 GreenDAO를 사용하는 것보다 낫다고 생각합니다. – gonzalomelov

+0

나는 아직도 대답을 기다리고있다. 지금까지 두 가지 모두 쿼리를 비동기 적으로 실행하고 결과 행을 부분적으로로드하는 것을 볼 수 없습니다. – BornToCode

답변

0

ORM 프레임 워크가 행 부분 만로드하는 기능을 제공한다고 생각하지 않습니다.

greendao를 사용하면 QuerylistLazy()을 사용하여 DB에서 느리게 엔티티를로드 할 수 있습니다. 이렇게하면 모든 항목을 "프리 페치"하는 것보다 뛰어난 성능 이점을 얻을 수 있습니다.

greendao도 AsyncSession으로 엔티티를 비동기 적으로로드하는 방법을 제공합니다. 그러나 나는 현재 이것이 어떻게 사용될 것인지 모른다.

일반적으로 greendao의 모든 CRUD 작업은 update 등을 호출 한 동일한 스레드에서 발생합니다.

아직 OrmLite를 사용하지 않았으므로 이에 대한 정보가 없습니다.

+0

@DamodarPeriwal 문제 없음. 내가 말한대로 : IMHO 귀하의 의견이 스레드에 맞는,하지만이 대답에 ... – AlexS

0

나는 OrmLite 이상으로 발음 할 수 없지만 greenDAO를 사용하면 데이터베이스에서 원시 쿼리를 실행할 수 있다는 것을 알고 있습니다. 모든 코드가 생성 된 후에 SQLite 데이터베이스가 있습니다.

DevOpenHelper 도우미 = 새로운 DaoMaster.DevOpenHelper : 당신이 커서가이 같은 가져온 것을 분명히 알 수 있습니다)에서 onCreate (에서 https://github.com/greenrobot/greenDAO/blob/master/DaoExample/src/main/java/de/greenrobot/daoexample/NoteActivity.java

:

greenDAO 예제 프로젝트 NoteActivity여보세요 (this, "db_name", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = 새 DaoMaster (db);
DaoSession daoSession = daoMaster.newSession(); ObjectDao objectDao = daoSession.getObjectDao();
[..]
커서 커서 = db.query (objectDao.getAllColumns(), null, null, null, null, null);

이 커서는 다른 커서로 사용하여 데이터를 표시 할 수 있습니다. 이제 주 스레드에서이 작업을 수행하는 것은 잘못되었으며이 작업은 기능을 노출하기 위해 수행됩니다. 로더에 대해 언급 한 이후로 수행 할 수있는 작업 :

  1. 응용 프로그램마다 db/daoSession의 단일 인스턴스를 유지하십시오. 이상적으로 코드를 응용 프로그램 클래스로 이동하거나 처리 할 싱글 톤을 만듭니다.
  2. loader를 만들고 loadInBackground()를 재정의합니다. 이 메소드에서 db 쿼리를 실행하고 커서를 리턴하십시오. 로더 결과를 커서 어댑터와 함께 사용하고 데이터를 표시하십시오.