Некоторые приложения Metro (Universal) зависают при потере фокуса?

339
Peachy

Я не знаю, возможно ли это исправить, но я хотел бы знать; Я обнаружил, что некоторые из универсальных приложений (например, Candy Crush) зависают, когда они теряют фокус. Мне было интересно, если это возможно, чтобы изменить это

Я помню, что приложение Instagram делало это когда-то в прошлом, и это было довольно неприятно, учитывая, что я пытался смотреть прямую трансляцию, оно просто перестало играть, когда оно стало не сфокусированным.

2
Обычно это реализация на уровне программного обеспечения. Даже традиционное настольное приложение может демонстрировать это поведение в зависимости от того, как оно было запрограммировано. Если приложения зависают, когда у них нет фокуса, вы ничего не можете сделать, именно так они были запрограммированы для работы. Ramhound 6 лет назад 0
ах, к сожалению, я никогда не видел ни одного нормального типа приложения, которое бы делало этот бар в некоторых играх, поэтому я подумал, что это проблема метро Peachy 6 лет назад 0
ты бегаешь в режиме планшета? здесь приложения приостанавливаются, когда вы отключаетесь, как в Windows 8 (.1). Приложения должны поддерживать фоновые задачи, чтобы все еще иметь возможность выполнять работу (например, скачивание, воспроизведение аудио) magicandre1981 6 лет назад 1
Да, я думаю, это просто предназначено для планшета, который не поддерживает многооконный режим, следовательно, зависание при потере фокуса Peachy 6 лет назад 0
жизненный цикл приложения объясняется здесь: https://docs.microsoft.com/en-us/windows/uwp/launch-resume/app-lifecycle. magicandre1981 6 лет назад 0

1 ответ на вопрос

1
magicandre1981

Приложения Магазина имеют более сложный жизненный цикл, чем приложения Win32:

До Windows 8 приложения имели простой жизненный цикл. Приложения Win32 и .NET либо работают, либо не работают. Когда пользователь сворачивает их или отключается от них, они продолжают работать. Это было хорошо, пока портативные устройства и управление питанием не становились все более важными.

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

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

Чтобы продолжить работу, приложения должны поддерживать фоновые задачи:

Существуют различные способы для приложений, которые должны продолжать работать, когда они находятся в фоновом режиме, такие как фоновые задачи, расширенное выполнение и выполнение, спонсируемое действием (например, возможность BackgroundMediaEnabled, которая позволяет приложению продолжать воспроизводить мультимедиа в фоновом режиме), Кроме того, операции фоновой передачи могут продолжаться, даже если ваше приложение приостановлено или даже прекращено.

Поэтому используемые вами приложения не поддерживают это и приостанавливаются, как и ожидалось.

В Windows SDK есть инструмент для отключения жизненного цикла приложения

"C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\plmdebug.exe" /enableDebug <PackageFullName> 

Сделайте это для приложений, которые вы хотите продолжить.

очень информативно, большое спасибо: D Peachy 6 лет назад 0

Похожие вопросы