WhenActivated在App.OnSleep之后调用,在App.Resume之后不调用

时间:2018-12-19 19:09:08

标签: xamarin.forms reactiveui

我正在使用ReactiveUI开发Xamarin Forms应用,我注意到Android上有一些奇怪的行为。

第一页具有View和ViewModel,并且都实现了app.post("/reply", (req, res) =>{ console.log(userInput)}

如果我启动了应用程序,并且在显示(XamarinForms)第一页之前按了主页按钮将应用程序发送到后台,那么我将按以下顺序调用函数。 (如果您在锁定手机屏幕的情况下从VS以调试模式启动应用程序,则更易于重现)。

  1. WhenActivated-确定
  2. App.OnStart-确定
  3. App.OnSleep-很奇怪。为什么在FirstPageViewModel.WhenActivated之后?
  4. OnSleep-很奇怪。为什么在FirstPageView.WhenActivated之后?

如果我恢复该应用程序(第一页可见)

  1. OnSleep-确定
  2. 没有打给App.Resume的电话-很奇怪,但是由于第3点和第4点的原因,可以预料到了

如果我将应用程序发送到后台,然后再次恢复运行,一切都按预期进行。

  1. WhenActivated-确定
  2. App.OnSleep-确定
  3. App.Resume-确定
  4. FirstPageViewModel.WhenActivated-确定

这是设计使然吗?

1 个答案:

答案 0 :(得分:0)

并不是说View Activation中没有继承问题,但我认为这可能是正确的。

如果您正在启动应用程序,则将启动应用程序启动序列。然后,应用程序将意识到在启动序列之后就立即进入睡眠状态。应用程序从睡眠状态返回后,由于必须立即进入睡眠状态,因此激活了视图(我不确定这是现实情况,当屏幕锁定时如何启动应用程序?)

只要操作系统尚未进行垃圾回收,就在XF中恢复应用程序时,该视图已被激活。因此,我希望视图能够重新激活。视图激活与屏幕可见性有关,而不仅仅是实例化ViewModel或View之后的步骤。因此,它通常会响应“ ViewAppearing”和“ View Disappearing”事件。

此外,iOS和Android对“视图激活”的处理不同。可能值得阅读Android Activity Lifecycle。您会注意到,活动被呈现后一直保持活动状态,直到被用户拒绝或被操作系统收集为止。

我认为这与ReactiveUI如何处理视图激活无关,而与XF如何在其支持的各种平台上抽象视图激活有关。

所有这些,是的,这是设计使然。