Explorar el Código

Attenmpting to stabilise reconnections when app goes into background

frankvandenbos hace 3 meses
padre
commit
257776065b

+ 10 - 0
prs.mobile.new/PRS.Mobile.Droid/MainActivity.cs

@@ -6,6 +6,7 @@ using Android.App;
 using Android.Content.PM;
 using Android.Content.PM;
 using Android.OS;
 using Android.OS;
 using Android.Content;
 using Android.Content;
+using Android.Runtime;
 using Android.Views;
 using Android.Views;
 using InABox.Mobile;
 using InABox.Mobile;
 using InABox.Mobile.Android;
 using InABox.Mobile.Android;
@@ -61,6 +62,7 @@ namespace PRS.Mobile.Droid
             
             
             AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
             AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
             TaskScheduler.UnobservedTaskException += TaskSchedulerOnUnobservedTaskException;
             TaskScheduler.UnobservedTaskException += TaskSchedulerOnUnobservedTaskException;
+            AndroidEnvironment.UnhandledExceptionRaiser += AndroidEnvironmentUnhandledException;
             
             
             CheckPermissions();
             CheckPermissions();
 
 
@@ -167,12 +169,20 @@ namespace PRS.Mobile.Droid
         private static void TaskSchedulerOnUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs args)
         private static void TaskSchedulerOnUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs args)
         {
         {
             LogUnhandledException("TaskScheduler", args.Exception?.GetType(), args.Exception);
             LogUnhandledException("TaskScheduler", args.Exception?.GetType(), args.Exception);
+            args.SetObserved();
         }
         }
 
 
         private static void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs args)
         private static void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs args)
         {
         {
             LogUnhandledException("CurrentDomain", args.ExceptionObject?.GetType(), args.ExceptionObject);
             LogUnhandledException("CurrentDomain", args.ExceptionObject?.GetType(), args.ExceptionObject);
         }
         }
+        
+        private void AndroidEnvironmentUnhandledException(object sender, RaiseThrowableEventArgs args)
+        {
+            LogUnhandledException("CurrentDomain", args.Exception?.GetType(), args.Exception);
+            args.Handled = true;
+        }
+
 
 
         private static void LogUnhandledException(String source, Type type, object exceptionobject)
         private static void LogUnhandledException(String source, Type type, object exceptionobject)
         {
         {

+ 3 - 2
prs.mobile.new/PRS.Mobile/Main/DataModel.cs

@@ -438,7 +438,8 @@ namespace PRS.Mobile
             App.GPS.OnLocationFound += OnGPSLocationFound;
             App.GPS.OnLocationFound += OnGPSLocationFound;
             
             
             App.Transport.OnOpen += OnTransportConnected;
             App.Transport.OnOpen += OnTransportConnected;
-            App.Transport.OnClose += OnTransportDisconnected;
+            App.Transport.OnClose += (transport, args) => Reconnect();
+            App.Transport.OnException += (transport, args) => Reconnect();
             
             
             DigitalFormDocumentFactory.Init(
             DigitalFormDocumentFactory.Init(
                 new MobileDigitalFormDocumentHandler(
                 new MobileDigitalFormDocumentHandler(
@@ -464,7 +465,7 @@ namespace PRS.Mobile
         
         
         public event TransportConnectedEvent TransportConnected;
         public event TransportConnectedEvent TransportConnected;
         
         
-        private void OnTransportDisconnected(IRpcTransport transport, RpcTransportCloseArgs e)
+        private void Reconnect()
         {
         {
             DigitalFormDocumentFactory.Stop();
             DigitalFormDocumentFactory.Stop();
             TransportDisconnected?.Invoke(new TransportDisconnectedEventArgs());
             TransportDisconnected?.Invoke(new TransportDisconnectedEventArgs());