Приложение UWP режима выхода падает, когда в режиме планшета и с кодом в OnSuspended - PullRequest
0 голосов
/ 03 марта 2020

У нас есть приложение Xamarin UWP, которое необходимо выходить из системы всякий раз, когда пользователь сворачивает окно или щелкает его из окна.

В моем файле App.xaml.cs я зарегистрировал обработчик события для события Suspending. Затем я помещаю наш код выхода в этот обработчик событий следующим образом:

private void OnSuspending(object sender, SuspendingEventArgs e)
{
    var deferral = e.GetDeferral();
    AppBackgrounded();
    deferral.Complete();
}

Этот метод AppBackgounded () выглядит следующим образом:

void AppBackgrounded()
{
    if (!_isInBackgroundMode)
    {
        _isInBackgroundMode = true;
        if (UserSetPin)
        {
            PinPage passcodePin = new PinPage();
            Navigation.PushModalAsync(New NavigationPage(passcodePin), false);
        }
        else
        {
            App.Logout(null, true, true);
        }
        // clears the pasteboard so data can't be copied from this app into other apps 
        Clipboard.Clear();
    }
}

У нас также есть метод AppLeavingBackground, который мы используем для восстановить приложение, когда пользователь вернется, но приложение не вернёт sh при возврате. Вылетает только при запуске метода OnSuspended.

Этот cra sh происходит только тогда, когда

  1. Приложение создано для выпуска и
  2. Устройство находится в планшете mode

Если в режиме планшета нажать кнопку «Просмотр задач» и перейти к другому приложению, приложение UWP останавливается, пытаясь выполнить этот код. Если вы попытаетесь вернуться к приложению, оно сразу же закроется.

Я попытался сделать переход на другие страницы asyn c, и приложение затем вызовет sh, даже если его нет в планшете. Режим. Я также попытался поместить эту логику c в AppEnteredBackground, и это все еще происходит.

Это сложно отладить, поскольку это происходит только в режиме выпуска. Есть идеи?

Ответы [ 2 ]

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

В моем случае это была функция Clipboard.Clear (), которая вызывала сбой приложения. Для тех, кто сталкивается с подобными проблемами, ознакомьтесь с другими ответами, поскольку все они дают отличные результаты.

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

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

Я не могу сказать, что прочитал в точности ту документацию, в которой говорится, что при переходе по страницам в режиме приостановки будет получено cra sh, но ясно, что это неправильное место для этого.

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

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