OnResume () и OnSleep () вызваны, но не работают должным образом - PullRequest
0 голосов
/ 12 марта 2020

Я новый разработчик Xamarin и пытаюсь создать приложение с помощью Xamarin.Forms. В приложении все работает нормально, но я заметил странное поведение: будь то на устройстве или с эмулятором, когда я выключаю питание один раз, а затем снова включаю, методы OnSleep () и OnResume () работают просто отлично.

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

В моих файлах App.xaml.cs:

    protected override void OnStart()
    {
        if (isLoggedIn())
        {
            MainPage = new NavigationPage(new MDPage());
            GeneralViewModel general = new GeneralViewModel();
            general.checkUser();
        }
        else
        {
            MainPage = new NavigationPage(new LoginPage());
        }
    }

    protected override void OnSleep()
    {
        // Handle when your app sleeps

    }

    protected override void OnResume()
    {
        if (isLoggedIn()) //With a breakpoint, this is executed
        {

            MainPage.Navigation.PushAsync(new MDPage()); 
            /*this is also executed but the second time, 
             *even if it is executed the application freezes*/

            GeneralViewModel general = new GeneralViewModel();
            general.checkUser();

        }
        else
        {
            MainPage = new NavigationPage(new LoginPage());
        }
    }

    public bool isLoggedIn()
    {
        if (Settings.GeneralSettings != null && Settings.GeneralSettings != "")
        {
            return true;
        }
        else
        {
            return false;
        }
    }

Метод GeneralViewModel, который я вызываю (кстати, даже без него проблема сохраняется)

    public void DoSomething()
    {
        ThreadPool.QueueUserWorkItem(o => checkUser());
    }
    public Task checkUser()
    {
        if (Settings.GeneralSettings != null && Settings.GeneralSettings != "")
        {

            DoSomething();

        }
        else
        {

                try
                {
                    var data = Application.Current.MainPage;

                    Device.BeginInvokeOnMainThread(async () =>
                    {
                        await data.DisplayAlert("Information(s)", "Vous avez été déconnecté", "OK");
                    });

                }
                catch (Exception e)
                {
                    Console.WriteLine("exception");

                }

        }
        return default;


    }

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

...