Стек навигации разрушен после onResume ()? - PullRequest
2 голосов
/ 27 января 2020

У меня странный опыт с onResume () в моем приложении

Вот небольшая запись экрана (не знаю, как ее разместить здесь) https://vimeo.com/387615558?ref=em-share

Вот пример проекта для воссоздания проблемы. https://github.com/Lirian21/SampleApp

Я получаю остановочные точки останова и запускаю метод, но по какой-то причине он не срабатывает на root,

И если я действительно получу навигацию, она просто перейдет на мертвую страницу, и приложение просто зависнет. На самом деле я не уверен, как обращаться с банкоматом onResume (). Единственное, что мне нужно сделать, это то, что он должен проверить, есть ли соединение, и если это так, то оно должно просто go к домашней странице, я ' Я бы предпочел, чтобы он продолжался там, где остановился, но не уверен, как это работает.

protected override void OnResume()
{
    try
    {
        MakeWebRequest();
        if (IsConnected != true)
        {
             MainPage = new NoInternet();
        }
        else
        {
               //base.OnResume();
            var nav = MainPage.Navigation;

            nav.PopToRootAsync(true);

            nav.PushAsync(new Home("XXXX"));
        }

    }
    catch (IOException ex)
    {

        Crashes.TrackError(ex);
    }

}

public partial class Home : MasterDetailPage, INotifyPropertyChanged
public App()
{
    InitializeComponent();
    MakeWebRequest();

    try
    {

        MainPage = new NavigationPage(new Home("XXXX"));
    }
 }

Кроме того, на моем телефоне не настроен параметр «Уничтожать действия»

Я нашел константу в журнале погоды onResume (), OnStart () и т. Д. Но я не могу найти, что означает ошибка

[HwSecImmHelper] mSecurityInputMethodService is null

Обновление:

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

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

1 Ответ

0 голосов
/ 29 января 2020

Вам просто не хватает ключевых слов async + await.

Если вам интересно узнать, зачем нам нужны ключевые слова async и await, я рекомендую посмотреть эту презентацию. I недавно давал на async / await, объясняя как это работает. NET: https://www.youtube.com/watch?v=J0mcYVxJEl0

protected override async void OnResume()
{
    base.OnResume();

    try
    {
        MakeWebRequest();

        if (IsConnected != true)
        {
             MainPage = new NoInternet();
        }
        else
        {
            await MainPage.Navigation.PopToRootAsync(true);

            await MainPage.Navigation.PushAsync(new Home("XXXX"));
        }

    }
    catch (IOException ex)
    {
        Crashes.TrackError(ex);
    }
}
...