Xamarin時代は、AppクラスにOnResume関数やOnSleep関数をオーバーライドしてました。
MAUIだとちょっと変わるのでメモ書き。
Xamarin時代
public partial class App : Application
{
MainPage _mainPage = null;
public App()
{
InitializeComponent();
_mainPage = new MainPage(this);
MainPage = new NavigationPage(_mainPage);
}
protected override void OnSleep()
{
_mainPage.OnSleep();
}
protected override void OnResume()
{
_mainPage.OnResume();
}
}
public partial class MainPage : ContentPage
{
private static MainPage? _singleton;
public static MainPage GetInstance()
{
return _singleton;
}
#if ANDROID
public static void OnCreate(Activity activity, Bundle bundle)
{
}
#endif
public static void OnResume(object obj)
{
GetInstance().OnResume();
}
public void OnResume()
{
// Xamarin時代のOnResume
}
public static void OnSleep(object obj)
{
GetInstance().OnSleep();
}
public void OnSleep()
{
// Xamarin時代のOnSleep
}
}
.NET MAUIに移行
MauiProgramクラスのCreateMauiApp関数に呼び出す関数を登録します。
例えば、AndroidはOnCreateでactivityを取りたいし、アプリのStopとResumeはAndroidでもiOSでも使いたいならこんな感じ。
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
#if ANDROID
.ConfigureLifecycleEvents(events =>
{
events.AddAndroid(android => android
.OnCreate((activity, bundle) => HOGE.OnCreate(activity, bundle))
.OnStop((activity) => HOGE.OnSleep(activity))
.OnResume((activity) => HOGE.OnResume(activity))
);
#elif IOS
events.AddiOS(ios => ios
.DidEnterBackground((app) => HOGE.OnSleep(null))
.WillEnterForeground((app) => HOGE.OnResume(null))
);
#endif
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
});
return builder.Build();
}
}
で、static関数で実装します。
例えばHogeではなくMainPageを指定して、シングルトンでXamarin時代の関数を呼び出すとか。
public partial class MainPage : ContentPage
{
private static MainPage? _singleton;
public static MainPage GetInstance()
{
return _singleton;
}
#if ANDROID
public static void OnCreate(Activity activity, Bundle bundle)
{
}
#endif
public static void OnResume(object obj)
{
GetInstance().OnResume();
}
public void OnResume()
{
// Xamarin時代のOnResume
}
public static void OnSleep(object obj)
{
GetInstance().OnSleep();
}
public void OnSleep()
{
// Xamarin時代のOnSleep
}
}
他にもニッチなIT関連要素をまとめていますので、よければ一覧記事もご覧ください。