1
Java.Lang.Thread.DefaultUncaughtExceptionHandler
は、Androidランタイムでのみ例外をキャッチします。私はJava.Lang.Thread.DefaultUncaughtExceptionHandlerの例外を発生させます。
Java.Lang.Integer.ParseInt("xxx");
でネイティブ例外をスローしようとしましたが、例外がDefaultUncaughtExceptionHandler
でcatchedされていません。これは私の実装です:
アプリケーションサブクラス:
// OnCreate
UncaughtExceptionHandler uncaughtHandler = new UncaughtExceptionHandler();
uncaughtHandler.UncaughtExceptionHandled += OnUncaughtExceptionHandled;
Java.Lang.Thread.DefaultUncaughtExceptionHandler = uncaughtHandler;
private void OnUncaughtExceptionHandled(object sender, Throwable ex)
{
Console.WriteLine("DefaultUncaughtExceptionHandler");
}
追加クラス:
private class UncaughtExceptionHandler : Java.Lang.Object, Java.Lang.Thread.IUncaughtExceptionHandler
{
public event EventHandler<Throwable> UncaughtExceptionHandled;
public void UncaughtException(Java.Lang.Thread thread, Throwable ex)
{
if (UncaughtExceptionHandled != null)
{
UncaughtExceptionHandled(null, ex);
}
}
}
がどのように私はDefaultUncaughtExceptionHandler
によってcatchedされる例外を投げることができますか?マネージコードでアンマネージ例外をキャッチすることをお勧めしますか?
私はすでにそれを試みましたが、例外は 'DefaultUncaughtExceptionHandler'によってキャッチされません。 'AndroidEnvironment.UnhandledExceptionRaiser'を使用すると、例外はデバイス上でのみキャッチされます。 – testing
'DivideByZeroException'はマネージ例外ではありませんか? 'DefaultUncaughtExceptionHandler'はアンマネージ例外を捕捉しているように見えるからです。 'DivideByZeroException'がどこにスローされるかは重要ですか(* MainActivity *、...)? – testing