2016-05-31 120 views
1

Java.Lang.Thread.DefaultUncaughtExceptionHandler仅捕获Android运行时的异常。我试图把本地异常与引发Java.Lang.Thread.DefaultUncaughtExceptionHandler异常

Java.Lang.Integer.ParseInt("xxx"); 

但异常不会被逮住DefaultUncaughtExceptionHandler。这是我的实现:

Application子类

// 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逮住一个例外?在托管代码中捕获非托管异常是个好主意吗?

回答

0

你只需要一个抛出新的异常的UncaughtExceptionHandler被初始化

throw new DivideByZeroException(); 

是否赶上托管代码非托管例外一个好主意?

Yeap。 Crashlytics(崩溃报告库) - 以同样的方式工作。

+0

我已经试过了,但是'DefaultUncaughtExceptionHandler'没有抓住异常。如果我使用'AndroidEnvironment.UnhandledExceptionRaiser',那么只会在设备上捕获异常。 – testing

+0

不是'DivideByZeroException'是一个托管异常吗?因为'DefaultUncaughtExceptionHandler'似乎只能捕获非托管异常。在引发'DivideByZeroException'的地方(* MainActivity *,...)是否重要? – testing