Использование информации о состоянии батареи и фоновой активности

Платформа Windows является целевой для целого спектра устройств: настольные компьютеры, ноутбуки, планшеты, телефоны, HoloLens, IoT и Xbox. Как разработчик вы хотите, чтобы ваши пользователи имели отличный пользовательский опыт работы с вашим приложением на всём спектре устройств, на котором оно доступно. Каждое из этих устройств имеет уникальные возможности, о которых ваше приложение должно быть в курсе. Некоторые из них имеют большие экраны, некоторые имеют маленькие экраны. Некоторые из них имеют клавиатуры для ввода, некоторые имеют сенсорные экраны. Некоторые из них являются стационарными и подключены к стенной розетки для питания от сети, а некоторые являются портативными и используют батарею.
Для портативных устройств, в течение всего дня состояние заряда аккумулятора имеет решающее значение для вашего приложения, для раскрытия его полного потенциала, и теперь это обычное ожидание современных мобильных пользователей. Возможности экономии заряда батареи обеспечат вашему приложению предоставление наилучшего пользовательского опыта.

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

Наряду с видимостью потребления энергии батареи вашим приложением в фоновом режиме, пользователи получают новую возможность в обновлении Windows 10 Anniversary Update для управления фоновой активностью приложения.

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

Состояние доступа в фоновом режиме
Как разработчик вы имеете возможность увидеть, какие настройки в настоящее время применяются к вашему приложению с помощью перечисления BackgroundAccessStatus. Первый шаг при запуске кода в фоновом режиме — это запрос доступа к фона с помощью BackgroundExecutionManager.RequestAccessAsync(). Он возвращает значение перечисления BackgroundAccessStatus, который подробно описывает текущие возможности вашего приложения для работы в фоновом режиме. С новыми обновлениями в настройках доступных для пользователей это перечисление также изменилось. В настоящее время есть четыре новых варианта:
AlwaysAllowed: Пользователь разрешил фоновые активности вашего приложения, чтобы оно всегда было в состоянии работать.
AllowedSubjectToSystemPolicy: Фоновая активность вашего приложения находится под управлением Windows, и в настоящее время находится в состоянии доступном для выполнения.
DeniedSubjectToSystemPolicy: Фоновая активность вашего приложения находится под управлением Windows, и в настоящее время находится в состоянии недоступном для выполнения.
DeniedByUser: Пользователь запретил возможность вашего приложения работать в фоновом режиме.

Эти новые опции предоставлены на устройствах с обновлением Windows 10 Anniversary Update. На устройствах с предыдущими сборками Windows 10 вы можете получить предыдущие значения, документированные на MSDN. Ниже приведен пример того, как можно проверить оба набора значений:

  1. private async Task<String> CheckBackgroundActivitySetting()
  2. {
  3. var accessStatus = await BackgroundExecutionManager.RequestAccessAsync();
  4. string accessStatusString = «Unspecified»;
  5. // Use API Information check to determine if Battery Use Settings values are available on this device
  6. bool isBatteryUseSettingAvailable = Windows.Foundation.Metadata.ApiInformation.IsEnumNamedValuePresent(«Windows.ApplicationModel.Background.BackgroundAccessStatus», «AlwaysAllowed»);
  7. if(!isBatteryUseSettingAvailable)
  8. {
  9. // Subset of values available on Windows 10 devices
  10. switch (accessStatus)
  11. {
  12. case BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity:
  13. accessStatusString = «Allowed»;
  14. break;
  15. case BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity:
  16. accessStatusString = «Allowed»;
  17. break;
  18. case BackgroundAccessStatus.Denied:
  19. accessStatusString = «Denied»;
  20. break;
  21. case BackgroundAccessStatus.Unspecified:
  22. accessStatusString = «Unspecified»;
  23. break;
  24. }
  25. }
  26. else
  27. {
  28. // Subset of values available on Windows 10 Anniversary Update devices
  29. switch (accessStatus)
  30. {
  31. case BackgroundAccessStatus.AlwaysAllowed:
  32. accessStatusString = «Allowed»;
  33. break;
  34. case BackgroundAccessStatus.AllowedSubjectToSystemPolicy:
  35. accessStatusString = «Allowed subject to system policy»;
  36. break;
  37. case BackgroundAccessStatus.DeniedBySystemPolicy:
  38. accessStatusString = «Denied due to system policy»;
  39. break;
  40. case BackgroundAccessStatus.DeniedByUser:
  41. accessStatusString = «Denied»;
  42. break;
  43. }
  44. }
  45. return accessStatusString;
  46. }

Экономия заряда
Экономия заряда — это ещё один инструмент, с помощью которого пользователи должны получить максимальную отдачу от их батареи. Пользователь может включить в настройках автоматическое включение этой функции, когда батарея достигает определенного уровня заряда. Как настройки в разделе Использование батареи, Экономия заряда управляет всеми типами фоновой активности, с тем чтобы обеспечить лучший опыт взаимодействия на переднем плане для данного пользователя. Когда экономия заряда включена, все формы фоновых триггеров и расширенное выполнение прекращаются и отзываются. Это приводит к снижению фоновой активности, что позволяет пользователю растягивать последние проценты зарядки его батареи, пока он не сможет достичь другого источника питания для зарядки батареи. Как разработчик, вы можете определить это состояние, используя свойство PowerManager.PowerSavingMode.
Если ваше приложение является приложением для коммуникации и требует фоновой активности для таких целей, как функциональность пуш-уведомлений, то вы должны предупредить пользователя, что во время режима экономии заряда батареи он не будет получать уведомления. Точно так же, фоновые загрузки будут временно приостановлены когда режим экономии заряда включен, так что если пользователь инициирует загрузку в то время как режим экономии заряда активен, вы должны уведомить своего пользователя, что покидая приложение он остановит загрузку.

Рекомендации
Вот некоторые рекомендации для эффективного выполнения фоновой активности, чтобы обеспечить хорошее время автономной работы для пользователей:
— Проверьте свое приложение в нескольких сценариях питания, так же, как вы тестировали бы для нескольких размеров экрана. Если ваше приложение будет работать на устройствах, которые работают от сетевой розетки, а также на устройствах, которые имеют батарею, тестируйте с использованием обеих этих конфигураций. Убедитесь в том, что проверили ваше приложение и в режиме экономии заряда батареи.
— Переместите любую фоновую подготовительную работу, пользующуюся удобной возможностью, в MaintenanceTrigger. Maintenance Trigger обеспечивает намного больше времени для завершения фоновой активности, около десяти минут, и работает только тогда, когда устройство подключено к сети питания.
— Используйте состояние BackgroundWorkCostNotHigh для регистрации фоновых задач, пользующихся удобной возможностью. Background work cost — это стоимость выполнения фоновой задачи на устройстве. Работа с низкой (Low) стоимостью будет выполняться, когда устройство подключено к электросети, работа со средней (Medium) стоимостью будет выполняться при питании от батареи и включённом экране для активного использования, работа с высокой (High) стоимостью будет выполняться, когда устройство работает от батареи и экран выключен в попытке уменьшить энергопотребление. Это состояние системы гарантирует, что ваша фоновая работа будет запускаться при использовании ресурсов низкой (Low) или средней (Medium) категории. Ниже приведен пример того, как условия добавляются к регистрации фоновой задачи.

  1. private void RegisterBackgroundTask()
  2. {
  3.     var builder = new BackgroundTaskBuilder();
  4.     builder.Name = «My Background Trigger»;
  5.     builder.SetTrigger(new TimeTrigger(15, true));
  6.     builder.AddCondition(new SystemCondition(SystemConditionType.BackgroundWorkCostNotHigh));
  7.     BackgroundTaskRegistration task = builder.Register();
  8. }

— Все приложения начинают свою работу с фоновой активности, установленной в состояние находится под управлением Windows. Это позволяет системе определить наиболее эффективный баланс фоновой активности для экономии батареи в зависимости от того, как пользователь взаимодействует со своими приложениями.

Подводя итоги
Зная состояние батареи можно изменять пользовательский опыт. Зная, как масштабировать опыт для вашего приложения в зависимости от наличия батареи, вы позволите пользователям наслаждаться вашим приложением больше времени, в большем количестве условий и на большем количестве устройств. Пользователи имеют новое поле выбора для включения/отключения фоновых активностей, расходующих батарею, по каждому приложению. Помните о вашем использовании батареи в фоновом режиме, так как пользователи могут отключить фоновые активности для вашего приложения или удалить его полностью. Используя рекомендации, описанные выше, вы сможете создать хороший опыт для пользователя на всех его портативных устройствах.

Перевод оригинальной публикации Battery awareness and background activity
Автор: Chris Cortes
Перевод: Сергей Урусов

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *