Xamarin.iOS 的应用程序生命周期

Application Lifecycle for Xamarin.iOS

我正在使用 Mac 的 MonoGame 和 VisualStudio 将 XNA 游戏移植到 iOS。在原始源代码中,我使用 PhoneApplicationService 来管理应用程序生命周期:

PhoneApplicationService.Current.Launching += OnGameLaunching;
PhoneApplicationService.Current.Closing += OnGameClosing;
PhoneApplicationService.Current.Deactivated += OnGameDeactivated;
PhoneApplicationService.Current.Activated += OnGameActivated;

我在派生自 Microsoft.Xna.Framework.Game 的 class 中使用了 PhoneApplicationService,这样我就可以使用游戏循环内的事件来管理生命周期。

要将游戏移植到 iOS,我知道我需要使用 UIKit 并提供这样的 AppDelegate(下面的代码来自 Xamarin 示例):

[Register("AppDelegate")]
class Program : UIApplicationDelegate
{
    private static Game1 game;

    static void Main(string[] args)
    {
        UIApplication.Main(args, null, "AppDelegate");
    }

    public override void FinishedLaunching(UIApplication app)
    {
        game = new Game1();
        game.Run(); // does not return until the game doesn't end
    }

    public override void OnResignActivation(UIApplication application)
    { 
        // pause the stopwatch
        ...
    }

    public override void OnActivated(UIApplication application)
    { 
        // resume the stopwatch
        ...
    }
}

在上面的代码中,Microsoft.Xna.Framework.Game.Run()FinishedLaunching() 中被调用,它 returns 只有在游戏真正结束时才被调用。话虽如此,我想知道当应用程序进入后台状态或何时移回活动状态时,OnResignActivation()OnActivated() 是否仍会分别被调用。

我已经创建了一个小型测试应用程序,并且我确认 OnResignActivation()OnActivated() 会被调用,即使 game.Run() 不会 return 直到游戏结束' t结束。