Приложение Xamarin Forms генерирует одновременно запущенные приложения при возобновлении

Я занимаюсь разработкой кроссплатформенного мобильного приложения с использованием форм Xamarin. Из-за характера приложения некоторые данные должны сохраняться при выходе пользователя из приложения. Я достигаю этого с помощью встроенного Properties толковый словарь. Посмотреть документацию здесь.

Это связано с моим вопросом. Когда я выхожу из приложения (не прекращая его, а просто пересыпая), я вижу, что OnSleep() метод в App класс вызывается. Тем не менее, после возобновления приложения, приложение не вызывает OnResume() метод, но приложение генерирует совершенно новый экземпляр. Т.е. это вызывает OnStart() метод, который будет (я предполагаю) создать и создать новый экземпляр приложения и запустить этот новый экземпляр одновременно с другим экземпляром.

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

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

Детали реализации и жизненного цикла

Я запускаю приложение из App класс, который (частично) выглядит следующим образом:

public partial class App : Application
{
    public App()
    {
        InitializeComponent();

        Manager.GeneratePages();

        switch (Device.RuntimePlatform)
        {
            case Device.Android:
                {
                    InitializeAndroidApp();
                    break;
                }
         ...
    }

Метод тела InitializeAndroidApp():

private void InitializeAndroidApp()
{
    bottomBarPage = BottomNavigationBar.generateBottomBarPage();
    AddPagesToBottomBar(DEVICE_ANDROID);
    var NavBar = new NavigationPage(bottomBarPage)
    {
        BarBackgroundColor = Color.White
    };
    NavigationPage.SetHasNavigationBar(bottomBarPage, false);
    MainPage = NavBar;
}

Мои текущие (и ограниченные) обработчики жизненного цикла (члены App учебный класс):

protected override void OnStart()
{
    Debug.WriteLine("[METHOD INVOCATION]: OnStart()");
}

protected override void OnSleep()
{
    Debug.WriteLine("[METHOD INVOCATION]: OnSleep()");
    HomePageViewModel.firstSession = false;
    DeviceDetailsViewModel.newSession = false;
    Current.SavePropertiesAsync();
}

protected override void OnResume()
{
    Debug.WriteLine("[METHOD INVOCATION]: OnResume()");
}

OnResume() метод в настоящее время пуст, это я знаю. Но, как я уже упоминал выше, я ожидал, что приложение автоматически "просто" возобновит текущий экземпляр, а не создаст новый.

Что мне не хватает? Ваша помощь очень ценится.

Спасибо.

0 ответов

Другие вопросы по тегам