Mango быстрое переключение приложений и тяжелая обработка - PullRequest
1 голос
/ 15 августа 2011

У меня есть приложение WP7, которое иногда должно выполнять длительную (5-25 секунд) обработку.

С Mango, когда приложение установлено в неактивное состояние во время обработки (например: пользователь нажимает кнопку Windows или блокирует экран), когда пользователь возвращается, приложение вылетает.

Я пробовал на эмуляторе и на моем устройстве то же поведение.

Если я воспроизводлю его в режиме отладки в Visual Studio, он не падает, поэтому трудно найти то, что действительно происходит.

Чтобы воспроизвести его, запустите новый проект Windows Phone, добавьте кнопку на MainPage.xaml& добавить обработчик события в событие click, которое выполняет бесконечный цикл:

while (true)
{
    System.Threading.Thread.Sleep(100);
}

Мой вопрос: что на самом деле происходит?Почему это терпит крах?Разве быстрое переключение приложений не должно просто приостанавливать процесс приложения и возобновлять его?

РЕДАКТИРОВАТЬ: Еще одна вещь, которую я заметил, заключается в том, что при запуске тяжелого процесса, деактивированные и активированные события, кажется, не возникают, когда явыйти / в приложении.

Ответы [ 2 ]

4 голосов
/ 18 августа 2011

Нашел ответ на официальном форуме Windows Phone ( ссылка ). Вот оно:

Почему происходит сбой:

С момента деактивации приложения у него есть ровно десять секунд, чтобы закончить то, что он делает. Если код занимает более десяти секунд, ОС завершит работу приложения.

Почему деактивированные и активированные события не возникают, когда я выхожу / в приложении:

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

1 голос
/ 15 августа 2011

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

Это работает в отладчике, потому что отладчик делает все медленнее, а затем у WP7 больше времени.

Из документации:

Когда пользователь перемещается вперед, вне приложения, после возникновения события «Деактивировано», операционная система пытается перевести приложение в неактивное состояние. В этом состоянии все потоки приложения останавливаются и никакая обработка не выполняется, но приложение остается неповрежденным в памяти. Если приложение повторно активировано из этого состояния, приложению не нужно повторно создавать какое-либо состояние, поскольку оно было сохранено.

Источник: http://msdn.microsoft.com/en-us/library/ff817008(v=vs.92).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...