Die App enthält Daten in einer SQLite-Datenbank. Die Benutzeroberfläche ist in erster Linie eine RecyclerView. Die Frage ist, wie man am besten Daten von der Datenbank in die UI überträgt und dabei den Hauptthread fernhält?
Ursprünglich wollte ich einen CursorLoader, ContentProvider und RecyclerView verwenden. Aber wenn man es liest, sieht es so aus, als ob RecyclerView keine von Cursors gelieferten Daten sofort unterstützt. Dang.
Das lässt mich dann mit ein paar anderen Optionen ...
AsyncTask lädt die Daten, fügt sie in Modellobjekte ein und gibt sie an den RecyclerView Adapter weiter. Abgesehen davon, dass es hässlich ist, ist es nicht konfigurationsfreundlich.
Ein benutzerdefinierter Loader, der die Daten aus SQL lädt und in Modellobjekte verschiebt.
Verwenden Sie einen Cursor-Loader, und wenn er zurückkehrt, durchläuft der Cursor ihn, um die Daten in Modellobjekte zu verschieben. Ich vermute, dass dies auf dem Hauptthread auftreten würde und die Leistung beschädigen könnte.
Verwenden Sie Otto, um eine Anforderungsnachricht zum Anfordern von Daten zu senden, und geben Sie dann eine Modellobjektsammlung per Rückmeldung zurück. Es kann ~ 500 Objekte geben, also denke ich, dass ich Otto dabei eher missbrauchen darf.
Wenn ich eine Sammlung von Modellobjekten anstelle eines Cursors verwende, sehe ich weniger Nutzen für einen ContentProvider, und ich verliere auch die Möglichkeit, dass die Benutzeroberfläche bei Datenänderungen automatisch aktualisiert wird (was nützlich sein kann).
>Keine dieser Optionen spricht viel an, gibt es einen besseren Weg? Die App ist unter Zeitdruck, was auch immer es sein muss, muss ziemlich schnell implementiert werden. Unglücklicherweise muss die Benutzeroberfläche horizontal scrollen und zielt nur auf Lollipop, daher scheint RecyclerView eine bessere Wette zu sein als ListView.