【发布时间】:2013-06-03 14:46:42
【问题描述】:
我的 WP8 应用程序出现问题。它使用 MVVM 灯光库来创建 ViewModel,也用于带有 Messages 的页面导航。
现在我的 MainPage 的 OnNavigatedTo 方法出现了一些问题。如果我第一次启动应用程序,它会被调用一次。如果我用后退按钮关闭并重新打开它,它也只会被调用一次。我的 MainPage ViewModel 的构造函数也只会被调用一次。
如果我让应用程序在后台打开并使用“开始”或“搜索”按钮退出,OnNavigatedTo 将被调用两次!构造函数将不再被调用。
我现在的问题是,我正在 OnNavigatedTo 中初始化与服务器的同步。这应该只执行一次,但现在有时会因为 OnNavigatedTo 的双重调用而被调用两次。我对 WP8 应用模型的理解是 OnNavigatedTo 在我进入页面时只会被调用一次。我无法理解这种行为,这让我发疯了。
我没有使用 FastAppResume,只想恢复正常行为。任何建议将不胜感激!我检查了所有可能两次加载页面的调用,但这没有帮助。除了这个问题,我的应用程序的行为也应该如此。否则,我正在寻找一种解决方案来创建一个异步任务,该任务一次只能执行一个。
【问题讨论】:
-
您是否检查了每个回调的调用堆栈以查看触发双重回调的代码?作为一个 hacky 解决方法,您可以设置一个“初始化”成员变量以避免双重工作。
-
每次调用 NavigationMode 的值是多少?
-
是的,我检查了调用堆栈,但它只是在访问我的 onNavigatedTo 之前调用常规 Windows Phone 代码,我的代码中没有任何内容。如果我开始一个新的调试会话并使用主页按钮离开应用程序并从开始屏幕上的磁贴输入它,我会得到以下导航模式:新建、(第一次调用)重置、(第二次调用)刷新。我的理解是 onNavigatedTo 应该只被调用一次?!
-
Oren:我已经尝试过 hacky 解决方法。至少它只会调用一次代码,但后来我遇到了一些其他问题,有时不注册消息处理程序。
标签: windows-phone-8 windows-phone mvvm-light