Я пытаюсь найти лучшую стратегию кэширования данных в Android, особенно с учетом использования библиотеки привязки данных.Каковы наилучшие стратегии обработки данных JSON в Android?
Документация на Android действительно, похоже, делает большой упор на использовании встроенной базы данных SQLite и доступа к ней с помощью контент-провайдеров. Однако, если предположить, что мое приложение получает данные в формате JSON с REST API, с помощью этой стратегии повлечет за собой следующее:
Make HTTP request --> Parse JSON --> Insert results into DB
--> Call content provider --> Build model from cursor --> Bind to view
не только это, кажется, как окольный способ сделать что-то относительно простой, но при условии, все это происходит, когда пользователь сначала открывает приложение, результат будет много и много ожиданий, прежде чем что-нибудь полезное появится на экране.
Чтобы ускорить процесс я могу решить, чтобы создать свою модель раньше, и пусть кэширование имеет место в отдельном потоке, как это:
Make HTTP request --> Build model from JSON --> Bind to view
-->(NEW THREAD) --> Insert results into DB
После того как данные в кэше, в следующий раз, открывает пользователь приложение следующий будет иметь место:
Call content provider --> Build model from cursor --> Bind to view
Но, конечно, это было бы добавить еще больше сложности, например, заставляя меня поддерживать код, чтобы построить модель из двух источников: JSON и курсоры, возвращаемые поставщиком контента.
Учитывая вышеизложенное я еще больше соблазн покончить с моделью SQLite/ContentProvider и вместо того, чтобы сделать следующее:
Make HTTP request --> Build Model and Store JSON to file --> Bind to view
Но в то время как это было бы значительно уменьшить шаблонного, синтаксический анализ (множество библиотек, доступных для JSON синтаксический анализ) и общей сложности, это также означает, что я не могу воспользоваться преимуществами поставщиков контента или функциональности SQLite.
Итак, вопрос в том, какую модель следует придерживаться? Существуют ли ситуации, в которых лучше других? Или есть ли лучшие способы обработки этого процесса, о котором я не знаю?
Я знаю, что это действительно не отвечает на ваш вопрос, но может ли это быть альтернативой для доставки данных в предварительно загруженную базу данных SQLite?В этом случае я предлагаю вам ознакомиться с этим небольшим учебником: http://www.6020peaks.com/2015/03/how-to-ship-an-android-app-with-preloaded-data/ – narko
Наверное, нет. Мои данные очень часто меняются, поэтому они бесполезны, если только это не связано с API. – spacitron
Хорошо. В этом случае я предлагаю проверить код приложения Google IO. Я помню, что они решили ту же проблему, что и вы, для получения данных для разных событий: https://github.com/google/iosched Возможно, вы захотите начать здесь: https://github.com/google/iosched/tree/master/updater/src/main/java/com/google/iosched/input/fetcher – narko