Xamarin.Android Xamarin Exception Handler

在 Xamairn.Aandroid 的 Exception 發生時造成 App 閃退時重啟 App 的處理…

James Tsai 2017/11/03 00:35:03
802







主題

Xamairn.Aandroid Exception 發生時造成 App 閃退時重啟 App 的處理

文章簡介:

在使用 Xamarin.Android 開發 Android App 後,在 使用 App 時或多或少都會發生 Exception 的問題,而造成 App 直接閃退。我們在 Xamarin.Android 開發時可以利用一些技巧來攔截此問題後,當 App 的閃退時再次重啟 App

作者:

James Tsai

版本/產出日期:

V1.0/2017.10.31

 
 
 

1. 前言

透過一些技巧攔截 Xamarin.Android 發生Exception 時造成 App 閃退後再重啟 App

 
 
2 . 環境準備

安裝好開發XamarinVisual Studio 2015/2017

 
 
3. 本文
 
3.1     前置準備
 
  • 準備一個 Xamarin.Android 的空專案。
 
 
 
  • 確定可以正常的編譯並執行。
 
 
 
 
3.2     實作 Xamarin.Android 攔截 Exception 後並重啟 App
 
  • 首先,我們幫這個Android App 建立自己的 Application 類別。
 
 
 
 
  • 並且在這 MyApplication 類別中,依序加入下圖紅框中的程式碼。
 
 
 
  • 接著我們繼續在這個 MyApplication 類別當中建立一個公開的 static 屬性叫 current,並且透過複寫 Android Application 類別的 OnCreate 方法來設定此屬性 ,如下圖紅框所示:
 
 
 
  • 接著再新增一個類別叫做 “MyExceptionHandler” 。
 
 
 
 
  • 並且在這 “MyExceptionHandler” 類別中,依序加入下圖紅框中的程式碼。
 
 
     在這邊我們增加了這個類別的建構子,準備利用建構子注入Activity。而因為要實作 Java 的 “IUncaughtExceptionHandler” 這個介面,所以會有3號紅框的方法。
 
 
  • 接著再繼續添加下圖紅框中的程式碼:
 
 
     上圖當中的4號紅框,是建立一個 Intent 來紀錄資料,並且透過 ”PendingIntent” 跟 “AlarmManager” 來完成,若遇到 Exception 造成 App Crash的時候,我們指定在 “SystemClock.CurrentThreadTimeMillis() + 100” 毫秒後可以重啟 App,並且回到我 們在此所注入的 Activity 畫面。
 
 
  • 接著打開 App1 專案底下的 Resources 底下的 layout 資料夾當中的 Main.axml, 並且從工具箱當中拖拉一顆按鈕到設計畫面中。
 
 
 
 
 
  • 點選到設計畫面當中的這個按鈕,確認一下它的屬性id值是否為 “button1”。
 
 
     這個 Button 的設計是為了在 App 執行起來後,讓我們透過點選按鈕,去模擬執行 擲出例外的程式。
 
 
  • 打開 App1 專案下的MainActivity.cs。
 
 
 
  • 並且在此 MainActivity 類別當中的 OnCreate 方法當中撰寫下圖紅框中的程式碼:
 
 
 
 
3.3     測試執行
 
  • 將這個 App 編譯執行(建議使用”啟動但不偵錯”的方式)後,就會出現如下圖畫面:
 
 
 
  • 接著點擊畫面中的按鈕,按照我們的設計就會擲出 System.Exception 的例外,讓App 發生閃退。
 
 
 
  • 如果是閃退後重啟 App 進到 MainActivity 的畫面,按照我們在 MainActivity 當中 的 OnCreate 方法的設計,應該就會看到如下圖的 Toast 出現。
 
 
 

4. 參考來源

 
 
James Tsai