我的Xamarin Forms应用程序出了问题。每次我启动Android解决方案时,App()构造函数都会被调用两次。我通过使应用程序入口点成为单例来解决这个问题。
但是每个视图构造函数也被调用两次,我无法弄清楚为什么?
这是一个错误吗?
我应该提一下,我已经在代码背后写了所有的观点 - 如果它的相关性 - 我使用genymotion模拟器。
应用程序中的代码没什么特别的:
bool isInitialized = false;
public App()
{
if (!isInitialized)
{
isInitialized = true;
navigationPage = new NavigationPage(new LoginView());
MainPage = NavigationPage;
Observer = new NetworkObserver();
Debug.WriteLine("Observer initialized");
}
}
Android解决方案中的代码 - 我在这里没有改变任何内容:
[Activity(Label = "XamarinClients", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity :
global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
}
}
在测试IOS应用程序之后,我可以看到我有同样的问题,它也会调用App()两次 - 以及页面构造函数。
答案 0 :(得分:0)
我有完全相同的问题。 App()从Xamarin Forms启动两次。我希望在较新的Xamarin Forms版本中修复此问题。对我来说这个问题始于2017年3月1日至6月3日期间发布的Xamarin Forms版本。旧版本没有这样做2016年5月发布的Xamarin Forms版本 - 7/2016工作得很好。没有发生代码更改。
答案 1 :(得分:0)
我遇到了同样的问题,这导致了很多问题,因为这最终将使我的API服务器遭受两次攻击。最终,我找到了这个来源:https://www.xamarinhelp.com/xamarin-forms-async-task-startup/,该来源指出将异步Task放在OnStart方法中(显然使OnStart异步)。将函数移至OnStart方法后,双重调用问题就消失了。
答案 2 :(得分:0)
如果其他人犯了我刚刚犯的同样愚蠢的错误,请检查以确保您没有同时在两个不同的平台上进行调试。
我将我的解决方案设置为具有多个启动项目,因此我同时部署到 iOS 和 Android。我只关注我的 Android 设备,所以我什至没有注意到我旁边的 iPhone 上启动的应用程序。
这解释了为什么我的 App 构造函数被调用了两次。