2016-04-19 1 views
0

Мне нужно написать приложение, способное работать в автономном режиме, но также и в присутствии сети, чтобы минимизировать количество повторяющихся сетевых запросов. Как сделать я думаю. Я буду использовать модификаторы, погрузчики, sqlite. Cache недействительности будет на время (DateTime Колонка в таблице) сервера API -> JSON -> Object -> SqliteСтратегия кэша в android

1) При работе в базе данных сети SQLite будет заполнена с отметкой времени, когда данные были полученное
2) При повторном запросе, если данные о времени не устарели (например, менее 8 часов) доступных данных в БД для использования.
3) Если данные истекает срок будут выполняться повторные запросы и обновление данных в SQLite
4) Если сеть не имеет и не являются текущими, то приложение будет использовать старые данные

Если технически правильный вариант?

Если возможно, пожалуйста, предоставьте детали реализации, имена классов, библиотек, ссылки на GitHub и т.д. ... Спасибо

PS простите за английский)

+0

Я удивлён так много людей используют SQLite, пока они не https://en.wikipedia.org/wiki/Relational_database вообще, рассматривали ли вы какой-либо другой тип памяти? –

ответ

0

Вариант 1: You может использовать адаптер синхронизации, чтобы ваши данные обновлялись. http://developer.android.com/training/sync-adapters/creating-sync-adapter.html

Вариант 2: Вы можете определить правило недействительности кеша. вы можете сохранить в настройках, когда была последняя операция записи, если она превышает 8 часов или независимо от того, какую сумму вы решите, удалите всю базу данных, таблицу или просто строку. И просто сохраняйте каждый запрос ответа на БД при его получении.

PS Вы также можете использовать okhttp с модификацией для кэширования своего ответа для вас в кеше LRU.

okHttpClient = new OkHttpClient.Builder() 
      .cache(new Cache(new File(Constants.CACHE_DIR, "http"), 10485760)) 
      .build(); 
    restApi = new Retrofit.Builder() 
      .baseUrl(RestApi.API_BASE_URL) 
      .client(okHttpClient).build(); 
+0

_Вы можете использовать адаптер синхронизации, чтобы поддерживать ваши данные в актуальном состоянии. Могу ли я использовать JobScheduler или GcmNetworkManger вместо SyncAdapter? –

+0

Да, вы можете. Но обратите внимание, что хотя адаптер синхронизации трудно настроить и его много, но он выполняет свою работу. При использовании JobScheduler или GcmNetworkManager возможно, но вам придется реализовать всю логику синхронизации, которая может быть трудно реализовать правильно и эффективно. –