В четвертом выпуске этой серии о том, как разработать приложение для Windows Phone с нуля, мы создали страницу настроек, используя комбинацию Expression Blend и Visual Studio 2010. Функциональная страница настроек имеет ограниченную функциональность, но она может изменять строку, которая в конечном итоге будет отображаться в задняя часть вторичной плитки. В этом выпуске мы рассмотрим, как хранить данные в IsolatedStorage .
Если вы смотрели видео эпизода 4, вы заметили, что строка, содержащая текст, который будет в конечном итоге отображаться на обратной стороне вторичной плитки, не была сохранена при закрытии приложения, поскольку при повторном запуске приложения отображалась строка по умолчанию. Чтобы сохранить строку, чтобы она была доступна при повторном запуске приложения, мы собираемся сохранить ее в определенной части нашего IsolatedStorage. IsolatedStorage можно использовать для хранения файлов и настроек системы. Это просто жесткий диск с одним небольшим, но важным отличием. IsolatedStorage — это… изолированы . Все, что хранится в IsolatedStorage, доступно исключительно для приложения, которому оно принадлежит, поэтому другие приложения не могут получить к нему доступ.
Когда приложение Windows Phone запускается, оно будет работать на переднем плане с видимой главной страницей. Пока пользователь работает с приложением, оно остается на переднем плане. Пользователь может закрыть приложение, нажимая клавишу «Назад» на телефоне, пока последняя страница приложения не будет закрыта. Приложение также можно переместить в фоновый режим. Это происходит, когда пользователь активирует другое приложение или, например, когда пользователь отвечает на телефонный звонок. При запуске происходит событие запуска. В файле App.xaml.cs уже есть обработчики событий, определенные для событий Launching и Closing. Это события, которые мы собираемся использовать для хранения / извлечения нашей строки, содержащей текст обратной стороны для нашей Вторичной плитки.
ПРИМЕЧАНИЕ . Пример кода, получение и сохранение данных в событии запуска / закрытия работает нормально. Однако весь код, выполняемый при запуске этих событий, имеет ограничение по времени 10 секунд. Если для выполнения обработчика события потребуется больше времени, приложение будет немедленно закрыто. Если у вас есть много данных для хранения / извлечения, вам следует использовать альтернативный подход. Например, в таких ситуациях вы можете использовать отдельный поток для извлечения / хранения информации. Для того чтобы наш образец был скудным и средним, мы будем напрямую извлекать / сохранять данные в IsolatedStorage из обработчиков событий Launching / Closing.
Поскольку все функциональные возможности уже доступны на странице настроек для хранения текста на обратной стороне вторичной плитки, мы только добавляем некоторые функциональные возможности в файл App.xaml.cs. Первое, что нужно сделать, — это получить доступ к IsolatedStorageSettings для нашего приложения, который фактически является словарем, в котором значения могут храниться / извлекаться через ключ. IsolatedStorageSettings реализованы как одноэлементные и создаются при первом обращении к ним. Доступ к IsoloatedStorageSettings можно получить изнутри всего нашего приложения, хотя сейчас мы будем использовать только IsolatedStorageSettings внутри файла App.xaml.cs.
IsolatedStorageSettings
public const string DefaultSecBackContent = "Having an even # of tiles on my StartScreen"; public const string keyActSecBackContent = "K_ASBC"; public static string ActualSecBackContent { get; set; } private IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings;
Во фрагменте кода вы можете увидеть объявление ключа (просто строковой переменной), который используется для хранения / извлечения строки, содержащей содержимое для обратной стороны вторичного тайла. Вы также можете увидеть, как объявляется приватная переменная, которая инициализируется единственным экземпляром настроек нашего приложения в IsolatedStorage.
Application_Launching
// Code to execute when the application is launching (eg, from Start) // This code will not execute when the application is reactivated private void Application_Launching(object sender, LaunchingEventArgs e) { if (!appSettings.Contains(keyActSecBackContent)) { appSettings[keyActSecBackContent] = DefaultSecBackContent; } ActualSecBackContent = (string)appSettings[keyActSecBackContent]; }
Каждый раз, когда приложение запускается, метод Application_Launching будет выполняться. В этом методе мы проверяем, хранится ли объект под ключом keyActSecBackContent . Если это не так, мы создаем новую запись в словаре настроек приложения и присваиваем ей текст по умолчанию, который можно записать на обратной стороне вторичной плитки. Если запись уже существует (что обычно происходит после ее создания в самый первый раз), мы извлекаем фактическую строку из этой записи. Поскольку словарь настроек приложения хранит объекты, нам необходимо привести фактическое значение к строке.
Когда приложение завершается, содержимое строки, содержащей текст для обратной стороны вторичной плитки, может быть изменено на странице настроек. Вот почему мы храним эту строку всегда, когда приложение заканчивается.
Application_Closing
// Code to execute when the application is closing (eg, user hit Back) // This code will not execute when the application is deactivated private void Application_Closing(object sender, ClosingEventArgs e) { appSettings[keyActSecBackContent] = ActualSecBackContent; }
Похоже, мы теперь правильно сохранили настройки нашего приложения. Однако это не совсем так, поскольку наше приложение может быть временно прервано, потому что пользователь может запускать другие приложения, не прерывая наше приложение. В этих ситуациях мы должны взглянуть на жизненный цикл приложения. Это будет тема другого эпизода EvenTiles. Также интересно посмотреть, какая именно информация хранится в IsolatedStorage. Для этого вы можете использовать инструмент изолированного хранилища , удобный инструмент, который будет описан в шестой серии EvenTiles.
В следующем видео вы можете увидеть все шаги, необходимые для сохранения настроек приложения, и извлекать их при каждом запуске приложения.
Примечание: время от времени я буду следить за тем, чтобы вы могли загрузить весь исходный код, который мы создали до сих пор. Я настоятельно рекомендую вам сделать это и начать экспериментировать с этим кодом. В конце концов, взгляд на реальный код, его изменение и понимание ваших модификаций, надеюсь, поможет вам быстро стать великим разработчиком Windows Phone.
If you want to keep up with the code of EvenTiles that is available until now, you can download it as a Zip file from this location. After downloading and unzipping it, you can open the EvenTiles solution in Visual Studio 2010 Express for Windows Phone. You must have the Windows Phone SDK 7.1 installed on your development system to do so. If you have a developer unlocked phone you can deploy the application to your phone, if you don’t have a developer unlocked phone you can still experiment with this application inside the emulator.
Source: http://mstruys.com/2011/12/06/eventiles-from-start-to-finishpart-5/