Життєвий цикл додатки Windows Runtime

Навчившись зберігати налаштування і стан додатки в локальне сховище, спробуємо розібратися, коли необхідно це робити і яким життєвим циклом володіє додаток в Windows 8

ПосколькувсеприложенияMetroориентируютпользователянаработусконтентом, то немає необхідності тримати додаток в памяті, коли користувач почав роботу з іншим додатком З іншого боку, користувач може в будь-який момент спробувати повернутися в додаток, тому виробляти його запуск з нуля теж погано У звязку c цим Windows 8 призупиняє роботу програми щоразу, коли користувач перемикається на якесь інше заняття, і тримає це додаток в памяті, поки є можливість Як тільки користувач повертається в додаток, Windows 8 може або активувати існуючий в памяті екземпляр, або ж, якщо додаток було видалено, викликати його знову Саме тому у розробника виникає ряд завдань

·&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Як тільки додаток переходить в стан очікування, дані,

критичні для його поновлення, необхідно зберегти

·&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp У разі відновлення роботи додатку з памяті необхідно визначитися, чи потрібно оновлювати інтерфейс програми (так як за час його «сну» багато що могло змінитися) і відновлювати мережеві підключення Адже якщо залишити програму в режимі сну занадто довго, простіше оновити весь інтерфейс з нуля

·&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp У разі відновлення роботи додатка необхідно вважати всі збережені дані і запустити додаток з того стану (якщо це можливо), на якому користувач покинув додаток, або ж перезапустити програму в штатному режимі

Щоб реалізувати всі вищеописані механізми, в класіApplication

представлено кілька корисних подій Давайте їх розглянемо

·&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Activated   – Подія генерується в разі успішного запуску програми Теоретично, саме тут необхідно визначати, як саме було запущене додаток, чи потрібно відновлювати стан та ін На практиці перевизначити цю подію не можна, і тут існують інші механізми

·&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Suspending  – Це подія дозволяє зберегти поточний стан програми На це у програми є 5 секунд, після чого робота буде завершена в будь-якому випадку Нічого складного в розглянутому подію немає, достатньо визначити обробник і використовувати локальне сховище для збереження даних

·&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Resuming – Подія, яка дає шанс розробнику відновити зовнішні ресурси у разі, якщо додаток було запущено з памяті Очевидно, що під час «сну» додатка мережеві зєднання були зруйновані, та й контент міг змінитися Тут потрібно враховувати, що обробник цієї події не запускається в интерфейсном потоці, отже, потрібно використовувати Dispatcher

Повернемося до події Activated Справа в тому, що додаток може бути запущено з багатьох причин: для використання програми як джерела пошуку внаслідок передачі якогось файлу даних внаслідок активації через FilePicker та ін Саме тому, щоб полегшити життя розробнику, клас Application пропонує кілька методів перевантаження Прикладами таких методів можуть служитиOnFileActivated,  OnSearchActivated,  OnShareTargetActivated та ін Іншими словами, якщо запуск Вашого застосування повязаний з ініціацією якогось контракту, то потрібно спробувати знайти метод, відповідний цим контрактом Якщо метод для контракту не знайдений, то можна скористатися методом OnActivated, Який отримує в якості параметрів тип контракту

async protected override void OnActivated(IActivatedEventArgs args)

{

switch (argsKind)

{

case ActivationKindCameraSettings:

.

break

case ActivationKindContactPicker:

.

break

case ActivationKindPrintTaskSettings:

.

break

.

} baseOnActivated(args)

}

Якщо ж Вас не цікавлять контракти, то рекомендується перевантажувати метод OnLanched (Він вже є у Вас в коді) і саме тут робити перевірки на стан, з якого було запущено додаток, а також приймати рішення, які дані потрібно оновлювати і яку сторінку робити основний Параметр методу OnLauched  містить одну корисну властивість –PreviousExecutionState, Яке дозволяє визначити, з якого стану було запущено додаток Можливі нижченаведені значення перечислимого типу

·&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp ClosedByUser – Додаток було закрито користувачем У цьому випадку все добре і можна спробувати вичитати дані, які були збережені в обробнику події Suspending

·&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp NotRunning – Програма не працювало, тобто можна спробувати відновити дані

·&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Running – Додаток було активно і працювало Мабуть, система ще не встигла відправити подія Suspending

·&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Suspended – Додаток було призупинено і знаходилося в памяті

·&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Terminated – Робота додатка аварійно завершена, тому краще рішення – запустити його заново

Базуючись на цих значеннях, розробнику належить зробити висновок, як вести додаток і чи потрібно завантажувати якісь дані

Сергій Лутай, Сергій Байдачний, Windows 8 для C # розробників

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*