Приложение UWP с ExtendedExecutionForegroundSession взрывает использование памяти при сворачивании - PullRequest
0 голосов
/ 13 марта 2020

У меня есть приложение UWP, которое считывает живые данные Bluetooth с устройства Bluetooth с низким энергопотреблением (BLE), строит их, используя QuickCharts , и записывает их в файл CSV.

В настоящее время каждый 250 мс срабатывает таймер, который регистрирует данные и обновляет график (эта последняя операция запланирована в потоке пользовательского интерфейса).

У меня была проблема, из-за которой приложение переходило в приостановленное состояние всякий раз, когда оно было свернуто или закрыто другим приложением, поэтому я решил включить ограниченные возможности в приложении maifest и объявил ExtendedExecutionForegroundSession (как объяснено здесь ). Это решило проблему, и данные регистрировались по таймеру, даже когда приложение свернуто.

Однако это вызвало следующий эффект: всякий раз, когда приложение свернуто (не покрыто другим, но свернуто), использование памяти взрывается и растет со скоростью около 100 МБ / мин. Моя гипотеза состоит в том, что, хотя приложение находится в активном состоянии и задачи UI запланированы, они не могут работать, когда приложение свернуто. Когда я снова максимизирую приложение, использование памяти быстро падает, и график быстро обновляется, пока не догонит. У меня такой вопрос:

  1. Можно ли запускать запланированные задачи пользовательского интерфейса, когда приложение свернуто?
  2. Если нет, можно ли определить, когда приложение свернуто по порядку не запускать эти задачи в этом случае? (но ведение журнала, которое теперь работает через расширенный сеанс).

Я благодарен за любую информацию и прошу прощения за неопытность в UWP.

Ответы [ 2 ]

1 голос
/ 16 марта 2020

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

Когда приложение свернуто, оно переходит в состояние приостановки. Это не делается сразу, но приложение приостанавливается после минимизации на определенный период времени.

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

Если нет, можно определить, когда приложение свернуто, чтобы не запускать эти задачи в этом случае?

В настоящее время UWP не предоставляет API для проверки минимизации окна, но событие Suspend будет запущен после сворачивания, поэтому мы можем обработать App.OnSuspending, вы можете отключить функции при запуске события.

Спецификация c содержимое может просматривать этот документ

0 голосов
/ 19 марта 2020

В конце оказалось, что действительно задачи UI не могут быть запущены, если приложение было свернуто. Чтобы обнаружить это, я подписался на событие Window.Current.VisibilityChanged, которое срабатывает только тогда, когда приложение свернуто, а не когда оно теряет фокус, поэтому я могу определять, когда это происходит, и только условно запускать задачи обновления пользовательского интерфейса, в то время как другие задачи продолжают выполняться. , поскольку приложение находится в продолжительном сеансе выполнения Foreground.

...