public AutoSuspendHelper(UIApplicationDelegate appDelegate) { Reflection.ThrowIfMethodsNotOverloaded("AutoSuspendHelper", appDelegate, "FinishedLaunching", "OnActivated", "DidEnterBackground"); RxApp.SuspensionHost.IsLaunchingNew = Observable.Never <Unit>(); RxApp.SuspensionHost.IsResuming = _finishedLaunching.Select(_ => Unit.Default); RxApp.SuspensionHost.IsUnpausing = _activated.Select(_ => Unit.Default); var untimelyDeath = new Subject <Unit>(); AppDomain.CurrentDomain.UnhandledException += (o, e) => untimelyDeath.OnNext(Unit.Default); RxApp.SuspensionHost.ShouldInvalidateState = untimelyDeath; RxApp.SuspensionHost.ShouldPersistState = _backgrounded.SelectMany(app => { var taskId = app.BeginBackgroundTask(new NSAction(() => untimelyDeath.OnNext(Unit.Default))); // NB: We're being force-killed, signal invalidate instead if (taskId == UIApplication.BackgroundTaskInvalid) { untimelyDeath.OnNext(Unit.Default); return(Observable.Empty <IDisposable>()); } return(Observable.Return(Disposable.Create(() => app.EndBackgroundTask(taskId)))); }); }
public AutoSuspendHelper(Application app) { Reflection.ThrowIfMethodsNotOverloaded("AutoSuspendHelper", app, "OnLaunched"); var launchNew = new[] { ApplicationExecutionState.ClosedByUser, ApplicationExecutionState.NotRunning, }; RxApp.SuspensionHost.IsLaunchingNew = _activated .Where(x => launchNew.Contains(x.PreviousExecutionState)) .Select(_ => Unit.Default); RxApp.SuspensionHost.IsResuming = _activated .Where(x => x.PreviousExecutionState == ApplicationExecutionState.Terminated) .Select(_ => Unit.Default); var unpausing = new[] { ApplicationExecutionState.Suspended, ApplicationExecutionState.Running, }; RxApp.SuspensionHost.IsUnpausing = _activated .Where(x => unpausing.Contains(x.PreviousExecutionState)) .Select(_ => Unit.Default); var shouldPersistState = new Subject <SuspendingEventArgs>(); app.Suspending += (o, e) => shouldPersistState.OnNext(e); RxApp.SuspensionHost.ShouldPersistState = shouldPersistState.Select(x => { var deferral = x.SuspendingOperation.GetDeferral(); return(Disposable.Create(deferral.Complete)); }); var shouldInvalidateState = new Subject <Unit>(); app.UnhandledException += (o, e) => shouldInvalidateState.OnNext(Unit.Default); RxApp.SuspensionHost.ShouldInvalidateState = shouldInvalidateState; }
public AutoSuspendHelper(NSApplicationDelegate appDelegate) { Reflection.ThrowIfMethodsNotOverloaded("AutoSuspendHelper", appDelegate, "ApplicationShouldTerminate", "DidFinishLaunching", "DidResignActive", "DidBecomeActive", "DidHide"); RxApp.SuspensionHost.IsLaunchingNew = Observable <Unit> .Never; RxApp.SuspensionHost.IsResuming = isResuming; RxApp.SuspensionHost.IsUnpausing = isUnpausing; RxApp.SuspensionHost.ShouldPersistState = shouldPersistState; var untimelyDemise = new Subject <Unit>(); AppDomain.CurrentDomain.UnhandledException += (o, e) => untimelyDemise.OnNext(Unit.Default); RxApp.SuspensionHost.ShouldInvalidateState = untimelyDemise; }