簡體   English   中英

Xamarin.forms 如果出現任何異常,應用程序在發布模式下崩潰

[英]Xamarin forms application crashing in release mode if any exceptions occur

只要發生任何異常,我的 Xamarin Forms 應用程序就會凍結。 我也創建了一個異常處理程序來處理異常,但每當我遇到來自 API 端的異常時,它會自動使應用程序崩潰。 這只發生在 Android 而不是 iOS。

這是異常處理程序的代碼 -

 public async Task<bool> HandleExceptionAsync(Exception exception)
        {
            if (exception.GetType().Name == nameof(UnauthorizedException) ||
                exception.Message.ToLowerInvariant().Contains("refresh token has expired") ||
                exception.Message.ToLowerInvariant().Contains("invalid refresh token"))
            {
                //await loginFacade.LogoutAsync(System.Threading.CancellationToken.None);
            }
            else if (exception.GetType().Name == nameof(NoInternetConnectionException))
            {
                HandleNoInternetException();
            }
            else if (CheckIfLoggable(exception))
            {
                Log.Error(exception, string.Format(Common.Constants.LoggingFormats.ExceptionWithUserDetails, _userContext.Serialize(), exception));
            }
            else
            {
#if !DEBUG
                try
                {
                    //await emailManager.SendFeedbackEmail(exception);
                }
                catch (Exception ex)
                {
                }
#endif
            }

            return true;
        }

        private bool CheckIfLoggable(Exception exception)
        {
            return exception.Message.ToLowerInvariant().Contains("not found".ToLowerInvariant()) ||
                exception.Message.ToLowerInvariant().Contains("BadInternetConnectionException".ToLowerInvariant()) ||
                exception.GetType() == typeof(NullReferenceException) ||
                exception.GetType() == typeof(OperationCanceledException);
        }

        private void HandleNoInternetException()
        {
            if (Xamarin.Essentials.Connectivity.NetworkAccess != Xamarin.Essentials.NetworkAccess.Internet)
            {
            }
            Xamarin.Essentials.Connectivity.ConnectivityChanged += Connectivity_ConnectivityChanged;
        }

        private void Connectivity_ConnectivityChanged(object sender, Xamarin.Essentials.ConnectivityChangedEventArgs e)
        {
            if (Xamarin.Essentials.Connectivity.NetworkAccess != Xamarin.Essentials.NetworkAccess.Internet)
            {
            }
            else
            {
            }
        }

我嘗試記錄它,然后刪除導致異常的錯誤代碼。

使用全局異常處理程序無法從 UI 繪制或事件期間發生的異常中恢復。

  • 在構造函數和所有事件處理程序(例如按鈕處理程序)中,在每個 UI class 中使用 try-catch。

恕我直言,它是 Xamarin 的主要 PITA。但事實就是這樣。

即使這樣,Xamarin 代碼或圖形代碼中的低級異常也可能導致應用程序崩潰。

  • 手動隔離問題。 打印語句、斷點、注釋掉不同的代碼。 所有有時都需要調試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM