Жизненный цикл приложения для Xamarin.iOS - PullRequest
0 голосов
/ 01 апреля 2019

Я портирую игру XNA на iOS, используя MonoGame и VisualStudio для Mac.В исходном исходном коде я использовал PhoneApplicationService для управления жизненным циклом приложения:

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

Я использовал PhoneApplicationService в классе, производном от Microsoft.Xna.Framework.Game, чтобы я мог управлять жизненным циклом с событиями внутри игрыloop.

Чтобы портировать игру на 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() и возвращается только тогда, когда игра действительно заканчивается.При этом мне интересно, будут ли по-прежнему вызываться OnResignActivation() и OnActivated(), когда приложение переходит в фоновое состояние или когда возвращается в активное состояние соответственно.

1 Ответ

0 голосов
/ 03 апреля 2019

Я создал небольшое тестовое приложение и подтверждаю, что OnResignActivation() и OnActivated() вызываются, даже если game.Run() не возвращается до тех пор, пока игра не закончится.

...