فهرست منبع

Attenmpting to stabilise reconnections when app goes into background

frankvandenbos 3 ماه پیش
والد
کامیت
257776065b
2فایلهای تغییر یافته به همراه13 افزوده شده و 2 حذف شده
  1. 10 0
      prs.mobile.new/PRS.Mobile.Droid/MainActivity.cs
  2. 3 2
      prs.mobile.new/PRS.Mobile/Main/DataModel.cs

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

@@ -6,6 +6,7 @@ using Android.App;
 using Android.Content.PM;
 using Android.OS;
 using Android.Content;
+using Android.Runtime;
 using Android.Views;
 using InABox.Mobile;
 using InABox.Mobile.Android;
@@ -61,6 +62,7 @@ namespace PRS.Mobile.Droid
             
             AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
             TaskScheduler.UnobservedTaskException += TaskSchedulerOnUnobservedTaskException;
+            AndroidEnvironment.UnhandledExceptionRaiser += AndroidEnvironmentUnhandledException;
             
             CheckPermissions();
 
@@ -167,12 +169,20 @@ namespace PRS.Mobile.Droid
         private static void TaskSchedulerOnUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs args)
         {
             LogUnhandledException("TaskScheduler", args.Exception?.GetType(), args.Exception);
+            args.SetObserved();
         }
 
         private static void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs args)
         {
             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)
         {

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

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