私の Monodroid アプリケーションでは、未処理の例外の後に次のことを行いたいと考えています。
- エラーをサーバーに送信します。
- アプリケーションがクラッシュしたことを (おそらくトースト メッセージで) ユーザーに通知します。
- アプリケーションを正常に終了します。
#1 は実装しましたが、#2 と #3 を実装するのに苦労しています。
未処理の例外が発生した後、Toast を使用できないようです。また、ユーザーに代わってアプリを終了するのはよくないと警告されました。
誰かが私を正しい方向に向けることができますか?
これが私のコードです:
using System;
using Android.App;
using Android.Runtime;
using Android.Widget;
namespace MyAppsNamespace
{
[Application]
public class MyApplication : Application
{
public static MyApplication Current { get; private set; }
public MyApplication (IntPtr handle, global::Android.Runtime.JniHandleOwnership transfer) : base(handle, transfer)
{
Current = this;
}
public override void OnCreate()
{
base.OnCreate();
AndroidEnvironment.UnhandledExceptionRaiser += (sender, args) => LogException(args.Exception);
}
public static void LogException(Exception exception)
{
var phoneId = Guid.NewGuid(); // just for testing purposes
var client = AppConfig.ErrorLoggingServiceClient;
var response = client.Send<ErrorLoggingResponse>(new ErrorLoggingEntry
{
PhoneId = phoneId,
ErrorTime = DateTime.UtcNow,
Message = exception.Message,
StackTrace = exception.StackTrace
}); // This works fine (i.e. I've implemented #1)
Toast.MakeText(Context, String.Format("An error occurred. Please call Prod Support at 1-800-555-1212. [Phone Id: '{0}']", phoneId), ToastLength.Short).Show(); // This has no impact.
}
}
}