Xamarin.Android
Xamarin
Exception
Handler
在 Xamairn.Aandroid 的 Exception 發生時造成 App 閃退時重啟 App 的處理…
2017/11/03 00:35:03
0
1205
1. 前言
透過一些技巧攔截 Xamarin.Android 發生Exception 時造成 App 閃退後再重啟 App。
2
. 環境準備
安裝好開發Xamarin的Visual 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. 參考來源
l How to auto restart an Android Application after a Crash or a Force Close Error?:
https://medium.com/@ssaurel/how-to-auto-restart-an-android-application-after-a-crash-or-a-force-close-error-1a361677c0ce
l Alarm Manager:
https://forums.xamarin.com/discussion/7490/alarm-manager
l How to set android app exit in mono for android?:
https://forums.xamarin.com/discussion/3680/how-to-set-android-app-exit-in-mono-for-android