Xamarin表单App()在启动时被调用两次

时间:2015-12-03 10:56:00

标签: c# android xamarin

我的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()两次 - 以及页面构造函数。

First step in

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

3 个答案:

答案 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 构造函数被调用了两次。