В одном из своих выступлений на недавней конференции NT я рассказал о некоторых новых способах работы с данными приложений в Windows Phone 8.1. Со всеми замечательными дополнениями к последним API-интерфейсам Windows Phone 8.1, лучшими новостями, касающимися данных приложений в этих новых API-интерфейсах, является то, что теперь они (в основном) приведены в соответствие с Windows Runtime (WinRT), поэтому разработчики Windows 8 могут сразу их использовать. и перевести свою работу на новую платформу, поделиться кодом и т. д.
Благодаря API согласованных данных приложения Windows Phone 8.1 (как Silverlight, так и Runtime) теперь могут хранить свои данные в одной из следующих папок:
- LocalFolder — локальная папка, используемая для хранения данных приложения, она постоянна при обновлении приложений и резервируется в облако. Эта папка уже была доступна в Windows Phone 8, и это та же папка, что и в изолированном хранилище, известная из Windows Phone 7.
- TemporaryFolder — тоже локальная папка, но ее пространство управляется ОС. Всякий раз, когда система обнаруживает, что ей не хватает места на диске, она начинает временно удалять файлы, поэтому не сильно зависит от файлов, хранящихся в этой папке. Это идеальное место для хранения кэшированных веб-ответов или изображений, которые можно воссоздать в любое время. Эта папка не участвует в резервном копировании.
- RoamingFolder — файлы, хранящиеся в этой папке, будут перемещаться по устройствам, что означает, что эти файлы будут синхронизироваться через облако по мере возможности. Идеально подходит для настроек и / или небольших кусков состояния (например, для постоянных клиентов). Когда роуминг отключен на устройстве, эти файлы (и настройки) также будут сохранены. Объем памяти ограничен 100 КБ — если приложение превышает эту квоту, синхронизация останавливается (до тех пор, пока общее использование не снизится до квоты роуминга).
LocalCacheFolder
Но подождите — в Windows Phone 8.1 есть еще одна папка, которая доступна только в Windows Phone 8.1 API. Более того, в отличие от некоторых других API-интерфейсов, которые присутствуют как в Windows, так и в Windows Phone и выдают исключение при использовании с не той платформы, этот полностью скрыт от Windows. Используя его из общего проекта, вы должны #ifdef его из платформы Windows и включить только в сборку Windows Phone:
#if WINDOWS_PHONE_APP var localCache = ApplicationData.Current.LocalCacheFolder; #endif
Так что же это? Используется ли для кеширования? Ну, не совсем (хотя это возможно, но я предпочитаю TemporaryFolder для этого).
LocalCacheFolder почти так же , как старый добрый LocalFolder , с одним, но важным исключением — в отличие от LocalFoder , файлы , записанные в этой папке не будут сохранены в облаке , и всегда будет оставаться на устройстве он был изначально написан на. Хорошо подходит для хранения некоторой (полу) конфиденциальной информации или фрагментов состояния, которые вы не хотите или не хотите восстанавливать позже.
И хотя я упомянул конфиденциальные данные, стоит упомянуть еще одну вещь — лучшее место для хранения конфиденциальных данных — это хранилище учетных данных (представленное классом PasswordVault ), знакомый класс из WinRT API, который теперь также доступен для Windows Phone 8.1 — УРА!
Резюме
Чтобы закончить, вот краткий обзор — используйте PasswordVault для хранения конфиденциальной информации, LocalCacheFolder для данных, которые вы не хотите оставлять на конкретном телефоне, TemporaryFolder для временных данных, которые легко воссоздаются, RoamingFolder для настроек и небольшое состояние для синхронизации на разных устройствах и LocalFolder для данных основного приложения, которые копируются в облако (и, конечно, — восстанавливаются).