我正在使用ReactiveUI开发Xamarin Forms应用,我注意到Android上有一些奇怪的行为。
第一页具有View和ViewModel,并且都实现了app.post("/reply", (req, res) =>{
console.log(userInput)}
。
如果我启动了应用程序,并且在显示(XamarinForms)第一页之前按了主页按钮将应用程序发送到后台,那么我将按以下顺序调用函数。 (如果您在锁定手机屏幕的情况下从VS以调试模式启动应用程序,则更易于重现)。
WhenActivated
-确定App.OnStart
-确定App.OnSleep
-很奇怪。为什么在FirstPageViewModel.WhenActivated
之后?OnSleep
-很奇怪。为什么在FirstPageView.WhenActivated
之后?如果我恢复该应用程序(第一页可见)
OnSleep
-确定App.Resume
的电话-很奇怪,但是由于第3点和第4点的原因,可以预料到了如果我将应用程序发送到后台,然后再次恢复运行,一切都按预期进行。
WhenActivated
-确定App.OnSleep
-确定App.Resume
-确定FirstPageViewModel.WhenActivated
-确定这是设计使然吗?
答案 0 :(得分:0)
并不是说View Activation中没有继承问题,但我认为这可能是正确的。
如果您正在启动应用程序,则将启动应用程序启动序列。然后,应用程序将意识到在启动序列之后就立即进入睡眠状态。应用程序从睡眠状态返回后,由于必须立即进入睡眠状态,因此激活了视图(我不确定这是现实情况,当屏幕锁定时如何启动应用程序?)
只要操作系统尚未进行垃圾回收,就在XF中恢复应用程序时,该视图已被激活。因此,我希望视图能够重新激活。视图激活与屏幕可见性有关,而不仅仅是实例化ViewModel或View之后的步骤。因此,它通常会响应“ ViewAppearing”和“ View Disappearing”事件。
此外,iOS和Android对“视图激活”的处理不同。可能值得阅读Android Activity Lifecycle。您会注意到,活动被呈现后一直保持活动状态,直到被用户拒绝或被操作系统收集为止。
我认为这与ReactiveUI如何处理视图激活无关,而与XF如何在其支持的各种平台上抽象视图激活有关。
所有这些,是的,这是设计使然。