8

앱에 SQLite 데이터베이스에 데이터가 있습니다. UI는 주로 RecyclerView입니다. 문제는 주 스레드를 유지하면서 데이터베이스에서 UI로 데이터를 전송하는 최선의 방법입니다.SQLite 데이터를 RecyclerView에 전송

원래 CursorLoader, ContentProvider 및 RecyclerView를 사용할 계획이었습니다. 그러나 RecyclerView는 Cursor가 제공하는 데이터를 즉시 사용할 수 있도록 지원합니다. Dang. 다음 몇 가지 다른 옵션과 함께 나에게 잎

...

  1. AsyncTask를이 데이터를로드 모델 객체에 넣어, 그리고 RecyclerView 어댑터로 전달합니다. 못생긴 것 말고는 설정 변경이 아닙니다.

  2. SQL에서 데이터를로드하고 모델 오브젝트로 푸시하는 사용자 정의 로더.

  3. 커서 로더를 사용하고 커서가 돌아올 때 커서를 반복하여 데이터를 모델 객체로 푸시합니다. 나는 이것이 주 스레드에서 발생하고 성능을 손상시킬 수 있다고 생각합니다.

  4. Otto를 사용하여 데이터를 요청하는 요청 메시지를 보낸 다음 반환 메시지로 모델 개체 컬렉션을 반환합니다. ~ 500 개체가있을 수 있으므로 오토를 악용하는 것일 수도 있습니다.

I 모델의 컬렉션을 사용하고있는 경우 대신 내가 컨텐트 프로에 덜 혜택을 참조하십시오 커서의 객체, 그리고 나 또한 (유용 할 수 있습니다) 데이터 변경에 대한 자동 새로 고침에 UI에 대한 능력을 상실 .

이러한 옵션 중 어느 것도 매력적이지 않습니다. 더 좋은 방법이 있습니까? 앱 실행에 시간이 많이 소요되므로 구현하기가 상당히 빨라야합니다. 불행하게도 UI는 가로로 스크롤해야하며 Lollipop 만 대상으로하므로 RecyclerView는 ListView보다 나은 것으로 보입니다.

+0

내 앱 중 하나에서 메소드 3을 사용하고 onLoadFinished에서 데이터에서 모델 객체를 만드는 새 스레드를 생성합니다. 이 방법에 아직 문제가 없었습니다 – tyczj

+1

https://gist.github.com/Shywim/127f207e7248fe48400b를 참조하십시오. 커서를 반복하지 마십시오. 약간의 의미가 있으며 성능이 저하되었다고 말씀하셨습니다. – pskink

+0

커서를 가져와 다른 작업으로 밀어 넣을 수 있습니까? 물론 바람직하지 않습니다. –

답변

5

사용이 간단한 어댑터 https://gist.github.com/Shywim/127f207e7248fe48400b, 또는 당신이 android.support.v17.leanback.widget.CursorObjectAdapter 만에 android.support.v17.leanback.widget.ItemBridgeAdapter를 사용할 수있는 이유는 열심히 자신의 삶을 만들어?

관련 문제