2015-09-17 2 views
3

Я пытаюсь найти лучшую стратегию кэширования данных в 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.

Итак, вопрос в том, какую модель следует придерживаться? Существуют ли ситуации, в которых лучше других? Или есть ли лучшие способы обработки этого процесса, о котором я не знаю?

+0

Я знаю, что это действительно не отвечает на ваш вопрос, но может ли это быть альтернативой для доставки данных в предварительно загруженную базу данных SQLite?В этом случае я предлагаю вам ознакомиться с этим небольшим учебником: http://www.6020peaks.com/2015/03/how-to-ship-an-android-app-with-preloaded-data/ – narko

+0

Наверное, нет. Мои данные очень часто меняются, поэтому они бесполезны, если только это не связано с API. – spacitron

+0

Хорошо. В этом случае я предлагаю проверить код приложения Google IO. Я помню, что они решили ту же проблему, что и вы, для получения данных для разных событий: https://github.com/google/iosched Возможно, вы захотите начать здесь: https://github.com/google/iosched/tree/master/updater/src/main/java/com/google/iosched/input/fetcher – narko

ответ

0

Возможное решение вашей проблемы может быть использовано в Google IO app. Они анализируют JSON на удаленном сервере и отображают этот контент напрямую. Чтобы избежать пустых экранов, они используют загрузочный json-файл, содержащий изображение данных, доступных на сервере. Вся эта информация доступна here. Более конкретно:

Данные начальной загрузки Когда пользователь запускает приложение в первый раз, они ожидают увидеть данные. Однако, если бы мы полагались только на механизм синхронизации для приведения данных в приложение, первый пользователь смотрел бы на пустой экран, ожидая синхронизации, и это было бы плохой пользовательский интерфейс.

Именно поэтому IOSched-корабли с предварительно загруженными «бутстрап-данными», которые по существу представляют собой предварительно загруженный автономный снимок данных JSON. Эти данные анализируются приложением и сохраняются в базе данных при первом выполнении.

Вы можете найти этот файл в res/raw/bootstrap.json. Это просто текстовый файл с комбинированным снимком файлов JSON на сервере.

+0

Это круто, но не решение моей общей проблемы. Я действительно спрашиваю здесь, как я могу перейти от необработанных данных JSON к содержательному дисплею пользовательского интерфейса без введения горных шаблонов и сложности? – spacitron

Смежные вопросы