Насколько я знаю, для этого вообще нет единой основы. Здесь довольно много постов, посвященных кешированию изображений, которые можно легко адаптировать, но я ничего не знаю о полностью обобщенных или специализированных для просмотра в автономном режиме. Тем не менее, большинство решений работают только с URL-адресами и файлами, поэтому оно может работать довольно легко, если ваши данные очень просты. Это очень сильно зависит от ваших данных и того, как вы планируете их отображать. Если он состоит из веб-страниц, отображаемых в WebView, то это может раздражать, потому что тогда вам придется проходить ссылки (включая изображения, CSS, JavaScript и т. Д.) И кэшировать их. Однако, если вы работаете с конкретными изолированными URL-адресами или структурированными данными, из которых вы можете легко проанализировать все связанные URL-адреса, тогда это будет намного проще.
Вот одно из таких ориентированных на изображение решений: https://github.com/ZaBlanc/WebImageView
Общий подход довольно прост. Это может быть что-то вроде этого:
- Каждый раз, когда вы пытаетесь «получить» URL, вы всегда читаете его из своего кэша
- Если в вашем кеше он есть, вы можете с радостью использовать его и быть в пути
- Если в вашем кеше его нет, вы должны поставить в очередь запрос на асинхронную загрузку файла
- Как только загрузка файла будет завершена, отправьте какое-то уведомление, чтобы приложение сообщило, что его обработать.
Вам также приходится иметь дело с такими вещами, как политики истечения срока действия кэша и способы отображения данных, но это может быть началом.
Если вы думаете о двусторонней синхронизации, то это станет намного сложнее. Вы должны подумать о блокировках и конфликтах (могут ли два человека обновлять один и тот же элемент одновременно? Если да, то что происходит?), Атомарности (есть ли у вас связанные элементы, которые имеют смысл, только если оба обновлены / добавлены?), проверка данных (что делать, если пользователь отправляет неверные данные) и многое другое. Наверное, поэтому никто еще ничего не придумал (о чем я знаю). Это было бы весьма полезно, но это может быть довольно сложным и действительно включает в себя работу как клиента, так и сервера.