Учебник по жизненному циклу приложений в Xamarin.Forms
Прежде чем работать с этим учебником, вы должны выполнить:
- Краткое руководство Создание первого Xamarin.Forms приложения.
- Руководство по StackLayout.
- Руководство по Entry.
В этом руководстве описано следующее:
- Отвечать на запуск, спящий режим или возобновление работы приложения.
- Сохранять данные при изменениях состояния жизненного цикла.
С помощью Visual Studio 2019 или Visual Studio для Mac вы создадите простое приложение, демонстрирующее, как сохранять данные при изменениях состояния жизненного цикла. На следующих снимках экрана показано готовое приложение.
Реагирование на изменения состояния жизненного цикла
Для работы с этим руководством у вас должен быть последний выпуск Visual Studio 2019 с установленной рабочей нагрузкой Разработка мобильных приложений на .NET. Кроме того, вам потребуется компьютер Mac для сборки учебного приложения на iOS. Сведения об установке платформы Xamarin см. в статье Установка Xamarin. Сведения о подключении Visual Studio 2019 к узлу сборки Mac см. в статье Связывание с Mac при разработке для Xamarin.iOS.
Запустите Visual Studio и создайте пустое приложение Xamarin.Forms, присвоив ему имя AppLifecycleTutorial.
Внимание
Для фрагментов кода на C# и XAML в этом руководстве необходимо решение с именем AppLifecycleTutorial. Выбор другого имени приведет к ошибкам сборки при копировании кода из этого руководства в решение.
Дополнительные сведения о создаваемой библиотеке .NET Standard см. в разделе Структура приложения Xamarin.Forms статьи Подробное изучение кратких руководств по Xamarin.Forms.
В обозревателе решений в проекте AppLifecycleTutorial разверните App.xaml и дважды щелкните файл App.xaml.cs, чтобы открыть его. Затем, в файле App.xaml.cs обновите методы
OnStart
,OnSleep
иOnResume
, переопределив их следующим образом:protected override void OnStart() { Console.WriteLine("OnStart"); } protected override void OnSleep() { Console.WriteLine("OnSleep"); } protected override void OnResume() { Console.WriteLine("OnResume"); }
Этот код обновит переопределения метода жизненного цикла приложения с помощью инструкций
Console.WriteLine
, которые указывают, когда был вызван каждый из методов.- Метод
OnStart
вызывается при запуске приложения. - Метод
OnSleep
вызывается когда приложение переводится в фоновый режим. - Метод
OnResume
вызывается при выходе из фонового режима.
Примечание.
Метода, отвечающего за завершение работы приложения, не существует. В обычных условиях завершение работы приложения происходит из-за метода
OnSleep
.- Метод
На панели инструментов Visual Studio нажмите кнопку Пуск (треугольная кнопка, похожая на кнопку воспроизведения), чтобы запустить приложение в выбранном удаленном симуляторе iOS или эмуляторе Android. При запуске приложения вызывается метод
OnStart
, а затем OnStart выводится в Visual Studio в окно Вывод.[Mono] Found as 'java_interop_jnienv_get_object_array_element'. OnStart [OpenGLRenderer] HWUI GL Pipeline
Когда приложение переходит в фоновый режим (после нажатия кнопки "Домой" в iOS или Android), вызывается метод
OnSleep
.[EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0) OnSleep [Mono] Image addref System.Runtime.Serialization[0x83ee19c0] -> System.Runtime.Serialization.dll[0x83f57b00]: 2
Затем, когда восстанавливается работа приложения (после нажатия значка приложения в iOS, нажатия кнопки "Обзор" в Android, и выбора приложения AppLifecycleTutorial), вызывается метод
OnResume
.Thread finished: <Thread Pool> #5 OnResume [EGL_emulation] eglMakeCurrent: 0x83ee2920: ver 3 0 (tinfo 0x8357eff0)
Примечание.
В этих блоках с кодом приведен пример результата выполнения приложения на Android.
В Visual Studio остановите приложение.
Дополнительные сведения о жизненном цикле приложения Xamarin.Forms см. в статье Жизненный цикл приложения Xamarin.Forms.
Сохранение данных при изменениях состояния жизненного цикла
Подкласс Application
имеет статический словарь Properties
, который можно использовать для хранения данных в изменениях состояния жизненного цикла. Словарь использует ключ string
и хранит значение object
. Словарь сохраняется на устройстве автоматически и будет заполнен повторно при перезапуске приложения.
Внимание
Словарь Properties
может только сериализовать примитивные типы для хранения.
В этом упражнении вы измените приложение для сохранения текста из Entry
после фоновой обработки и восстановите текст Entry
при перезапуске приложения.
В обозревателе решений в проекте AppLifecycleTutorial разверните App.xaml и дважды щелкните файл App.xaml.cs, чтобы открыть его. Удалите в App.xaml.cs весь код шаблона и замените его приведенным ниже кодом.
using System; using Xamarin.Forms; namespace AppLifecycleTutorial { public partial class App : Application { const string displayText = "displayText"; public string DisplayText { get; set; } public App() { InitializeComponent(); MainPage = new MainPage(); } protected override void OnStart() { Console.WriteLine("OnStart"); if (Properties.ContainsKey(displayText)) { DisplayText = (string)Properties[displayText]; } } protected override void OnSleep() { Console.WriteLine("OnSleep"); Properties[displayText] = DisplayText; } protected override void OnResume() { Console.WriteLine("OnResume"); } } }
Этот код определяет свойство
DisplayText
и константуdisplayText
. Когда приложение находится в фоновом режиме или завершает работу, методOnSleep
переопределяет значение свойстваDisplayText
словарюProperties
ключомdisplayText
. Затем при запуске приложения, при условии, что словарьProperties
содержит ключdisplayText
, значение ключа восстанавливается в свойствоDisplayText
.Внимание
Всегда проверяйте словарь
Properties
на наличие ключа, прежде чем получить доступ к нему, чтобы предотвратить непредвиденные ошибки.Нет необходимости восстанавливать данные из словаря
Properties
в перегрузке методаOnResume
. Это обусловлено тем, что когда приложение выполняется в фоновом режиме, оно и его состояние по-прежнему находятся в памяти.В обозревателе решений в проекте AppLifecycleTutorial дважды щелкните файл MainPage.xaml, чтобы открыть его. В MainPage.xaml удалите весь код шаблона и замените его приведенным ниже кодом:
<?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="AppLifecycleTutorial.MainPage"> <StackLayout Margin="20,35,20,20"> <Entry x:Name="entry" Placeholder="Enter text here" Completed="OnEntryCompleted" /> </StackLayout> </ContentPage>
Этот код декларативно определяет пользовательский интерфейс для страницы, который состоит из
Entry
вStackLayout
. СвойствоEntry.Placeholder
определяет текст заполнителя, который отображается, когда первым отображаетсяEntry
, а обработчик событийOnEntryCompleted
зарегистрирован с помощью событияCompleted
. Кроме того,Entry
имеет имя, указанное с помощью атрибутаx:Name
. Это позволяет файлу с выделенным кодом получать доступ к объектуEntry
с помощью назначенного имени.В обозревателе решений в проекте AppLifecycleTutorial разверните узел MainPage.xaml и дважды щелкните MainPage.xaml.cs, чтобы открыть его. Затем в MainPage.xaml.cs добавьте к классу переопределение для метода
OnAppearing
и обработчика событийOnEntryCompleted
.protected override void OnAppearing() { base.OnAppearing(); entry.Text = (Application.Current as App).DisplayText; } void OnEntryCompleted(object sender, EventArgs e) { (Application.Current as App).DisplayText = entry.Text; }
Метод
OnAppearing
возвращает значение свойстваApp.DisplayText
и задает его как значение свойстваText
Entry
.Примечание.
Переопределение метода
OnAppearing
выполняется после готовностиContentPage
, но только прежде чем он станет видимым. Таким образом лучше всего задать содержимое представлений Xamarin.Forms.Когда текст в
Entry
завершен с помощью ключа возврата, в свойствеApp.DisplayText
выполняется методOnEntryCompleted
и хранится текстEntry
.На панели инструментов Visual Studio нажмите кнопку Пуск (треугольная кнопка, похожая на кнопку воспроизведения), чтобы запустить приложение в выбранном удаленном симуляторе iOS или эмуляторе Android.
Введите любой текст в
Entry
и нажмите клавишу возврата. Затем выполните приложение в фоновом режиме, нажав кнопку "Домашняя страница", чтобы вызвать методOnSleep
.В Visual Studio остановите приложение и запустите его еще раз, после чего восстановится ранее введенный текст в
Entry
:В Visual Studio остановите приложение.
Дополнительные сведения о сохранении данных в словарь Properties см. в разделе Словарь Properties в руководстве по Xamarin.Forms классу приложения.
Поздравляем!
Поздравляем с завершением этого учебника, где вы научились:
- Отвечать на запуск, спящий режим или возобновление работы приложения.
- Сохранять данные при изменениях состояния жизненного цикла.
Следующие шаги
Чтобы узнать больше об основах создания мобильных приложений с помощью Xamarin.Forms, перейдите к учебнику по локальной базе данных.
Дополнительные ссылки
Возникла проблема с этим разделом? Если это так, отправьте нам отзыв, чтобы мы исправили этот раздел.