眠いしお腹すいたし(´・ω・`)

C#関連を主に書きます。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Xamarin.FormsでOnSleepとOnResumeの呼ばれるタイミングをAndroidとiOSで似た感じにしたい

Xamarin.FromsのPCLプロジェクトのApplicationクラスにはOnSleep/OnResumeという仮想関数が用意されています。

Working with the App Lifecycle - Xamarin

  • OnSleep - Called each time the application goes to the background.

  • OnResume - Called when the application is resumed, after being sent to the background.

となっているわけですが、AndroidiOSで呼ばれるタイミングが全然違ったりします。

Androidでは画面上部から設定画面をプルダウンしたりしてもOnSleepは呼ばれませんが、iOSでは画面上部、画面下部から設定画面を引っ張ったりするだけでOnSleepが呼ばれたりします。

なのでタイミングが違いすぎてあまり役に立たなかったりします。

iOSAndroidに合わせたい場合には以下のようにすると一応合わせることができます。

gist.github.com

一応と書いてあるのはAppDelegate.csのOnResignActivationの基底をコールしないことによる副作用が見えないためです。

現時点で副作用らしい副作用は出ていませんが不安である場合には各プラットフォームのMainActivity/AppDelegateにて動作を実装してOnSleep/OnResumeを使用しないほうが良いかもしれません。