2016-05-31 9 views
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される例外を投げることができますか?マネージコードでアンマネージ例外をキャッチすることをお勧めしますか?

答えて

0

たuncaughtExceptionHandlerが

throw new DivideByZeroException(); 

を初期化した後にあなただけのスロー新しい例外を必要とするが、マネージコードで管理されていない例外をキャッチすることをお勧めしますか?

Yeap。 Crashlytics(クラッシュレポートライブラリ) - 同じように動作します。

+0

私はすでにそれを試みましたが、例外は 'DefaultUncaughtExceptionHandler'によってキャッチされません。 'AndroidEnvironment.UnhandledExceptionRaiser'を使用すると、例外はデバイス上でのみキャッチされます。 – testing

+0

'DivideByZeroException'はマネージ例外ではありませんか? 'DefaultUncaughtExceptionHandler'はアンマネージ例外を捕捉しているように見えるからです。 'DivideByZeroException'がどこにスローされるかは重要ですか(* MainActivity *、...)? – testing

関連する問題