Приостановка работы приложения (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Узнайте, как сохранить важные данные вашего приложения среды выполнения Windows, когда система приостанавливает его работу. Когда ваше приложение приостанавливается системой, впоследствии его работа может быть завершена без предупреждения. Важно сохранить текущее состояние работы пользователя в приложении, чтобы при повторном запуске приложения вы могли восстановить это состояние. Пользователь не должен заметить, что приложение было приостановлено и завершено, когда оно находилось в фоновом режиме.

Выполните следующие действия, чтобы зарегистрировать событие checkpoint и использовать его для сохранения основного состояния приложения.

Инструкции

Этап 1: Регистрация для события "Контрольная точка"

Зарегистрируйте событие checkpoint в глобальной области. Это событие означает, что работа вашего приложения приостанавливается системой. Система может завершить работу приостановленного приложения, чтобы высвободить ресурсы. Поэтому важно сохранять данные приложения во время события "Контрольная точка".


var app = WinJS.Application;

app.addEventListener("checkpoint", checkpointHandler);

Этап 2: Сохранение данных приложения перед приостановкой

При обработке события checkpoint приложение получает возможность сохранить свои важные данные в функции обработчика для события checkpoint. Приложение может использовать объект sessionState для синхронного сохранения своих простых данных. Объект sessionState сохраняет данные таким образом, что приложение может получить к ним доступ во время активации после завершения работы.

function checkpointHandler(eventArgs) 
{
    var stateObject = new Object();

    // TODO: Populate the state object with app data

    // Save the state object to the session object
    app.sessionState.stateObject = stateObject;
}

Этап 3: Освобождение монопольных ресурсов и дескрипторов файлов

При обработке события checkpoint приложение также получает возможность освободить монопольные ресурсы и дескрипторы файлов. Примеры монопольных ресурсов: камеры, устройства ввода-вывода, внешние устройства и сетевые ресурсы. Явное освобождение монопольных ресурсов и дескрипторов файлов обеспечивает доступ к ним других приложений, пока ваше приложение их не использует. Приложение, активируемое после завершения работы, должно снова открывать свои монопольные ресурсы и дескрипторы файлов.

Замечания

Система приостанавливает работу вашего приложения всякий раз, когда пользователь переключается на другое приложение или на рабочий стол. Система возобновляет работу вашего приложения всякий раз, когда пользователь возвращается в него. Когда система возобновляет работу приложения, содержимое переменных и структур данных остается таким же, каким оно было до приостановки приложения. Система восстанавливает работу приложения точно с места приостановки, поэтому пользователю кажется, что приложение выполнялось в фоновом режиме.

Система старается сохранить ваше приложение и его данные в памяти, пока его выполнение приостановлено. Тем не менее по ряду причин операционная система может завершить выполнение вашего приложения после того, как оно было приостановлено. Несколько примеров того, как это может произойти: пользователь вручную закрывает ваше приложение, пользователь выходит из системы или системе не хватает ресурсов. Когда пользователь возвращается в приложение, работа которого была завершена, это приложение получает событие activated и должно проверить, определены ли его объекты sessionState. Если объекты определены, то приложение должно загрузить эти данные.

Система не уведомляет приложение при завершении его работы, поэтому в случае приостановки приложение должно сохранять свои данные и освобождать монопольные ресурсы и дескрипторы файлов, а затем восстанавливать их при возобновлении работы после приостановки или при активации после завершения выполнения.

Примечание  Если вам нужно выполнить асинхронное задание во время приостановки вашего приложения, потребуется отложить приостановку до завершения этого задания. Чтобы отложить приостановку до завершения асинхронного задания, вы можете использовать метод setPromise подробного свойства аргумента события checkpoint.

 

Примечание  Чтобы повысить скорость ответа системы, в Windows 8.1 и Windows Phone приложениям после приостановки предоставляется доступ к ресурсам с низким приоритетом. Для поддержки нового приоритета увеличено время ожидания для операции приостановки, чтобы приложение получило время, эквивалентное 5-секундному ожиданию при обычном приоритете в Windows (от 1 до 10 секунд в Windows Phone). Этот период ожидания нельзя продлить или изменить.

 

Замечание об отладке с использованием Microsoft Visual Studio: С помощью Visual Studio можно предотвратить приостановку системой Windows работы программы, подключенной к отладчику. Это позволяет пользователю видеть пользовательский интерфейс отладчика Visual Studio во время выполнения приложения. При отладке программы с помощью Visual Studio вы можете отправить ей событие приостановки. Убедитесь, что отображается панель инструментов Место отладки, а затем нажмите значок Приостановить.

Полный пример

Полные примеры кода, демонстрирующие обработку событий жизненного цикла приложения, см. в разделах Образец активации и приостановки приложения с использованием WinJS и Образец активации, возобновления и приостановки приложения с использованием WRL.

Связанные разделы

Задачи

Активация приложения

Возобновление работы приложения

Понятия

Жизненный цикл приложения

Руководство

Руководство по приостановке и возобновлению работы приложения

Ссылки

WinJS.Application.checkpoint

WinJS.Application.sessionState