Фоновые задачи и многозадачность для Windows Phone

Post on 28-Nov-2014

109 views 4 download

description

Фоновые задачи и многозадачность для Windows Phone

transcript

Михаил Галушко, Microsoft MVP

Фоновые задачи и многозадачность

Windows XAML+

Silverlight 8.1

24 апреля 2014

Building Apps for Windows Phone 8.1 Jump Start

Ключевые темы

Многозадачность в Windows PhoneИспользуем фоновые задачиФоновые задачи и триггерыУсловное выполнение фоновых задачPush notification как триггер

Мобильная многозадачность

Приложения, которые не видны, переходят в режиме suspended

Приложения могут выполнять действия в режиме suspended:

1. Живые плитки или «тосты»2. Запланированные оповещения3. Задачи вызванные ОС4. Фоновые задачи и агенты

Запланированные задачи

PeriodicTask, ResourceIntensiveTask

Фоновая передача данных

Фоновое отслеживание местоположения

VOIP

Аудио агенты

Фоновые задачи в WP8

Фоновые задачи в Windows Phone 8.1

Фоновые задачи

Приложение может регистрировать фоновые задачиЗадачи запускаются ОС, это фоновая работа вашего приложения

Те же настройки и разрешения из манифеста.Использование ресурсов ограничивается ОСОсновное приложение (если запущено) ограниченно взаимодействует с задачами:

Задачи могут вызывать события в основное приложение: progress/completedЗадачи могут использовать то же хранилище, что и основное приложение

Задачи могут использовать: toast, tile, badge UI

Возможно получить список уже зарегистрированных задачПриложение может иметь 1 и более задач

Создание фоновой задачи

Используйте шаблон Windows Runtime Component

Поставьте ссылку из основного проекта на проект с фоновой задачей

Создание фоновой задачи

Задача может получить оповещение об отмене. Но в некоторых случаях (если превышен лимит памяти), она может быть завершена без оповещения.

Вы указываете условия (триггеры) при которых запускается фоновая задача

Типы триггеровТриггер Инфо

System Trigger Запускается при определенном событииСобытия: UserPresent/Away, NetworkStateChange, InternetAvailable, SessionConnected, ServicingComplete, TimeZoneChange Также: LockScreenApplicationAdded и LockScreenApplicationRemoved недоступны для Windows Phone

TimeTrigger Запускается периодически (минимальный интервал - 30 мин)

LocationTrigger Запускается при изменении местоположения

MaintenanceTrigger Запускается периодически (минимальный интервал - 30 мин), но только если устройство работает на зарядке

PushNotificationTrigger Запускается при получении raw push notification

Типы триггеровТриггер Инфо

RfcommConnectionTrigger Bluetooth: когда установлено RFCOMM соединение

DeviceChangeTrigger Bluetooth: когда установлено/закрыто ACL соединение

BluetoothSignalStrengthTrigger Bluetooth: когда изменяются параметры сигнала

GattCharacteristicNotificationTrigger

Bluetooth: когда получены изменения от Bluetooth LE устройства

Также: ControlChannelTrigger для работы с TCP/IP, не поддерживается на Windows Phone

Условия

УсловиеUser[Not]PresentInternet[Not]AvailableFreeNetworkAvailableBackgroundWorkCostNotHigh

“run this task every 30 minutes if the internet is available”

Регистрация задачи в манифесте

Не нужно указывать executable.

Запрос разрешениядля фоновой работы

Запрос разрешения для фоновой работы async void RegisterBackgroundTasks() { // On Windows, RequestAccessAsync presents the user with a confirmation // dialog that requests that an app be allowed on the lock screen. // On Windows Phone, RequestAccessAsync does not show any user confirmation UI // but *must* be called before registering any tasks var access = await BackgroundExecutionManager.RequestAccessAsync();

// A 'good' status return on Phone is BackgroundAccess.AllowedMayUseActiveRealTimeConnectivity if (access == BackgroundAccessStatus.Denied) { // Either the user has explicitly denied background execution for this app // or the maximum number of background apps across the system has been reached // Display some informative message to the user... } }

Появился в Windows Phone 8.1

Управляет списком приложений, которые работают в фоне: текущий статус, нагрузка на батарею

Battery Saver

Регистрация фоновой задачи

BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder(); taskBuilder.Name = "MyBackgroundTask";

// Many different trigger types could be used here SystemTrigger trigger = new SystemTrigger(SystemTriggerType.TimeZoneChange, false); taskBuilder.SetTrigger(trigger); taskBuilder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));

// Entry point is the full name of our IBackgroundTask implementation // Good practice to use reflection as here to ensure correct name taskBuilder.TaskEntryPoint = typeof(MyBackgroundTask.TheTask).FullName;

BackgroundTaskRegistration registration = taskBuilder.Register();

// Optionally, handle the progress/completed events of the task registration.Progress += registration_Progress; registration.Completed += registration_Completed;

Получение списка зарегистрированных задач // AllTasks is a dictionary <Guid, IBackgroundTaskRegistration> so you can get back // to your registration by id or by posiiton, or select First if you only have one registration. var taskRegistration = BackgroundTaskRegistration.AllTasks.Values.FirstOrDefault();

// We could then unregister the task, optionally cancelling any running instance if (taskRegistration != null) { taskRegistration.Unregister(true); }

// Release the progress/completed event subscriptions registration.Progress -= registration_Progress; registration.Completed -= registration_Completed;

Отладка фоновых задач

Вы можете запустить фоновую задачу вручную для отладки (после того, как она была зарегистрирована)

Демо: фоновые задачи

Пример: push notification как триггер

Push notification как триггер

Football ScoreCloud

Service

Windows Notification

Service

PushBackground

TaskStorage

0:32m Man City 1 Man Utd 0

0:47m Man City 1 Man Utd 1

0:85m Man City 2 Man Utd 1

End: Man City 2 Man Utd 1

<?xml version=“1.0”> Type = raw, Data = Man City....</xml>

123

Football News: Your Team Won!

4

<?xml version=“1.0”> Type = raw, Data = End Game</xml>

<?xml version=“1.0”> Type = raw, Data = Man City....</xml>

<?xml version=“1.0”> Type = raw, Data = Man City....</xml>

ForegroundApp

Демо: отслеживание изменения локации

Ограничения на ресурсы

Ограничения на ресурсы

Все фоновые задачи имеют ограничения на: ЦПУ, память и сетьОграничения основаны на текущем использовании ЦПУ. В Windows Phone: ограничение ЦПУ - 2 секунды на приложение, обновляется каждые 15 минутОграничения на память зависят от параметров устройства

Вызовите RequestAccessAsync() для увеличения квотыНа устройствах с 512МБ – количество фоновых задач ограниченоЕсли лимит превышен, функция RequestAccessAsync вернет Denied

Ограничения на оперативную память

Тип задачи 512 МБ 1 ГБ 2 ГБ и более

Местоположение 16 30 40

Bluetooth 16 16 16

Сервисные задачи 10 10 10

Другие 16 30 40

В режиме отладки 30 40 50

Не поддерживается в приложениях Windows Phone Store

Приложение работающее в режиме lock-screen

Отслеживание изменения местоположения в фоне

VoIP агенты

Wallet агенты

ТакжеФоновое аудиоСм сессию 17: Камера, медиа и аудио

Фоновая передача данныхСм сессию 13: Работа с сетью

Механизмы оповещенийСм сессию 10: Tiles, badges, toasts и центр оповещений

The information contained in this document represents the current view of Microsoft Corp. on the issues discussed as of the date of publication. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information presented after the date of publication. This guide is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS DOCUMENT. Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form, by any means (electronic, mechanical, photocopying, recording or otherwise), or for any purpose, without the express written permission of Microsoft. Microsoft may have patents, patent applications, trademarks, copyrights or other intellectual property rights covering subject matter in this document. Except as expressly provided in any written license agreement from Microsoft, the furnishing of this document does not give you any license to these patents, trademarks, copyrights or other intellectual property. The example companies, organizations, products, domain names, email addresses, logos, people, places, and events depicted herein are fictitious. No association with any real company, organization, product, domain name, email address, logo, person, place, or event is intended or should be inferred.