WhenActivation вызывается после App.OnSleep и не вызывается после App.Resume - PullRequest
0 голосов
/ 19 декабря 2018

Я разрабатываю приложение Xamarin Forms с ReactiveUI, и я заметил странное поведение на Android.

На первой странице есть View и ViewModel, и обе они реализуют WhenActivated.

Если я запускаю приложение и нажимаю кнопку «Домой», чтобы отправить приложение на задний план до того, как отобразится первая страница (XamarinForms), то у меня такой порядок вызовов функций.(это легче воспроизвести, если запустить приложение из VS в режиме отладки, когда экран телефона заблокирован).

  1. App.OnStart - OK
  2. App.OnSleep - OK
  3. FirstPageViewModel.WhenActivated - странно.Почему после OnSleep?
  4. FirstPageView.WhenActivated - странно.Почему после OnSleep?

Если я возобновляю приложение (отображается первая страница)

App.Resume - ОК Нет вызова на WhenActivated - странно, но как-то ожидается из-за пунктов 3 и 4

Если я отправлю приложение в фоновый режим ивозобновите это снова все как ожидалось.

App.OnSleep - ОК App.Resume - ОК FirstPageViewModel.WhenActivated - ОК FirstPageView.WhenActivated - ОК

Это дизайн?

1 Ответ

0 голосов
/ 20 декабря 2018

Не сказать, что в View Activation нет наследственных проблем, но я думаю, что это может быть правильно.

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

При возобновленииприложение в XF, пока ОС не собирает мусор, представление уже активировано.Так что я бы ожидал, что представление будет активировано.Активация View не о том, когда видимость экрана, больше, чем шаг после создания экземпляра ViewModel или View.Поэтому он обычно реагирует на события «ViewAppearing» и «View Disappearing».

Кроме того, iOS Android по-разному обрабатывает «View Activation».Возможно, стоит прочитать Android Activity Lifecycle .Вы заметите, что действие остается активным после того, как оно было представлено, пока не было отклонено пользователем или собрано ОС.

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

Все, что сказать, да, это по замыслу.

...