Как использовать базу данных SQLite для хранения данных синхронизации из безопасности веб-потоков

У меня есть AsyncTask который получает информацию из веб-службы и отображается в пользовательском интерфейсе. Это требует от меня извлечения информации при каждом запуске приложения, что приводит к потере пропускной способности и занимает много времени для появления информации при запуске приложения.

Я хотел бы хранить извлеченную информацию в локальной базе данных SQLite и периодически синхронизировать ее с данными из веб-службы.

Каков наилучший подход для этого?

Если я создам другой AsyncTask для базы данных и запускаю ее, как только приложение запускается, я рискую иметь состояние гонки, при котором база данных обновляется, так как я читаю информацию из нее для отображения в пользовательском интерфейсе. Что для этого рекомендуется? Я предполагаю, что это общая проблема, хотя я не смог найти правильные ключевые слова, чтобы найти ответ...

Спасибо

Изменить: мой минимальный уровень API 8, поэтому любое решение должно работать с ним или доступны в библиотеке поддержки.

2 ответа

Решение

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

Я отговаривал вас использовать AsyncTask для выполнения любых сетевых вызовов. Как вы упомянули, AsyncTask создается снова при повторном запуске Activity, в том числе когда вы просто меняете ориентацию вашего устройства. Загрузчики лучше, но они не были созданы для выполнения вызовов запросов, хотя загрузчик не создается снова, когда ваша деятельность возобновляется, загрузчик будет возобновлен, но перезапустит свои вещи с нуля.

Наилучшим подходом является использование Service API, как упомянуто в GoogleIO 2010. Поскольку вы хотите обеспечить некоторую согласованность данных с локальной базой данных с удаленного сервера, я предлагаю вам использовать RESTDroid

Другие вопросы по тегам