Приложение 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()
метод в настоящее время пуст, это я знаю. Но, как я уже упоминал выше, я ожидал, что приложение автоматически "просто" возобновит текущий экземпляр, а не создаст новый.
Что мне не хватает? Ваша помощь очень ценится.
Спасибо.