Оптимизация фоновой активности
Универсальные приложения Windows должны работать согласованно во всех семействах устройств. На устройствах, подключенных к батарее, потребление электроэнергии является критически важным фактором в общем опыте пользователя с приложением. Всю жизнь батареи является желательной функцией для каждого пользователя, но она требует эффективности от всего программного обеспечения, установленного на устройстве, включая собственный.
Поведение фоновых задач, несомненно, является важнейшим фактором, определяющим энергозатратность приложения. Фоновая задача — это любое действие программы, зарегистрированное в системе для запуска без открытия приложения. Дополнительные сведения см. в разделе Создание и регистрация фоновой задачи вне процесса.
Разрешения фоновой активности
На настольных компьютерах и мобильных устройствах под управлением Windows 10 версии 1607 или выше в разделе "Настройки > Аккумулятор" пользователи могут просматривать данные о потреблении ресурсов аккумулятора различными приложениями. Здесь отображается список приложений и процент заряда батареи (от величины заряда, использованного с момента последней зарядки), используемый каждым приложением. Для приложений UWP в этом списке пользователи могут выбрать элементы управления, связанные с фоновой активностью.
Разрешения фоновой активности на мобильных устройствах
На мобильных устройствах для пользователей доступен список переключателей, позволяющих настроить разрешения для фоновых задач приложения. Для фоновой активности можно задать параметры "Всегда разрешено", "Недопустимо" или "Управляется Windows". Последний вариант означает, что фоновая активность приложения регулируется системой в зависимости от различных факторов.
Разрешения фоновой активности на настольном компьютере
На настольных компьютерах параметр «Управляется Windows» представлен в виде переключателя, который по умолчанию установлен в значение Вкл. Если пользователь изменит значение на Выкл., появится флажок, с помощью которого можно вручную настроить разрешения фоновой активности. Если этот флажок установлен, приложению разрешено выполнять фоновые задачи в любое время. Если флажок снят, фоновая активность отключена.
В приложении можно использовать значение перечисления BackgroundAccessStatus, возвращаемое при вызове метода BackgroundExecutionManager.RequestAccessAsync(). С помощью этого значения можно определить текущее разрешение фоновой активности приложения.
Все это может сказать, что если ваше приложение не реализует ответственное фоновое управление действиями, пользователь может вообще запретить разрешения фона вашему приложению, что нежелательно для любой стороны. Если вашему приложению запрещено работать в фоновом режиме, но для выполнения задачи пользователя требуется фоновая активность, можно уведомить пользователя и направить его в раздел "Параметры". Для этого запустите приложение "Параметры" с открытым разделом "Фоновые приложения" или "Сведения об использовании аккумулятора".
Работа с функцией экономии батареи
Экономия батареи — это функция уровня системы, которую пользователи могут настроить в параметрах. Он отключает все фоновые действия всех приложений, когда уровень батареи снижается ниже определяемого пользователем порогового значения, за исключением фонового действия приложений, которые были заданы как "Всегда разрешено".
Проверьте состояние режима экономии заряда в приложении с помощью ссылки на свойство PowerManager.EnergySaverStatus. Это значение перечисления: EnergySaverStatus.Disabled, EnergySaverStatus.Off или EnergySaverStatus.On. Если вашему приложению требуется фоновая активность и для него не выбран параметр "Всегда разрешено", приложение должно обрабатывать значение EnergySaverStatus.On и уведомлять пользователя о том, что данные фоновые задачи не будут выполняться в режиме экономии заряда. Хотя фоновое управление действиями является основной целью функции экономии заряда батареи, ваше приложение может внести дополнительные корректировки для дальнейшей экономии энергии при включении экономии батареи. В случае, когда включено средство экономии батареи, ваше приложение может сократить использование анимации, остановить опрос расположения или отложить синхронизацию и резервные копии.
Дальнейшая оптимизация фоновых задач
Ниже приведены дополнительные действия, которые можно предпринять при регистрации фоновых задач, чтобы повысить их уровень заряда батареи.
Использование триггера обслуживания
Объект MaintenanceTrigger можно использовать вместо объекта SystemTrigger, чтобы определить, когда начинается фоновая задача. Задачи, использующие триггеры обслуживания, будут выполняться только в том случае, если устройство подключено к питанием AC, и они могут выполняться дольше. Инструкции см. в разделе "Использование триггера обслуживания".
Использование типа условия системы BackgroundWorkCostNotHigh
Системные условия должны выполняться, чтобы фоновые задачи выполнялись (дополнительные сведения см. в разделе "Задание условий" для выполнения фоновой задачи ). Фоновая стоимость работы — это измерение, обозначающее относительное влияние энергии на выполнение фоновой задачи. Задача, выполняемая при подключении устройства к питания AC, будет помечена как низкая (мало или нет влияния на батарею). Задача, выполняемая, когда устройство находится на заряде батареи с выключенным экраном, помечается как высокая , так как в то время на устройстве выполняется мало программных действий, поэтому фоновая задача будет иметь большую относительную стоимость. Задача, выполняемая, когда устройство находится на батареи с экраном на экране, помечается как средний, так как предположительно уже выполняется некоторые действия программы, и фоновая задача добавит немного больше к затратам на энергию. Условие системы BackgroundWorkWorkCostNotHigh просто задерживает возможность выполнения задачи до тех пор, пока экран не установлен или устройство подключено к питания AC.
Проверка эффективности батареи
Обязательно проверьте свое приложение на реальных устройствах в сценариях с высоким энергопотреблением. Рекомендуется протестировать приложение на разных устройствах с помощью экономии заряда батареи и в средах с различными силами сети.