The lifecycle events handled by the Application class are OnStart, OnSleep and OnResume.
Application.OnStart is called at start and only once and works the same on both platforms.
On iOS the call to Application.OnSleep is done in AppDelegate.OnResignActivation, e.g. when a phone call is incoming, and the app is not in the Active state anymore. Works as expected.
On iOS the call to Application.OnResume is done when the AppDelegate.OnActivated is called, i.e. when the Active state is entered. Works as expected.
On Android the call to Application.OnSleep is NOT done in Activity.OnPause but rather when Activity.OnStop is called. The result is that an incoming phone call does not call the Application.OnSleep method although the phone app is on top of the app. The app must be fully backgrounded for Application.OnSleep to be called on Android which is not as expected. The behaviour should be the same, when the app leaves the Active state the Application.OnSleep should be called.
On Android the call to Application.OnResume is done when Activity.OnRestart is called, i.e. when leaving the background state.
Then end result is that Activity.OnPause and Activity.OnResume methods of an Activity is not handled and the Pause state cannot be detected by the Application class. An incoming call is not detected and if the call is answered the phone app will cover the app without the app having any information about that it is not in the foreground anymore.
The behaviour should be the same on both platforms.
The expected behavior on Android should be that Application.OnSleep should be called when either Activity.OnPause or Activity.OnStop are called for the Activity. Application.OnResume should be called when the active state is entered again, i.e. when Activity.OnResume is called on the Activity.