我正在尝试向我的应用程序添加一个默认处理程序,以便我可以从其他未处理的异常中恢复.
我发现Android / MonoDroid提供了三种机制,据我所知,应该可以实现这一点,但我无法让它们中的任何一种工作.这是我的代码:
using System; using Android.App; using Android.Content; using Android.Runtime; using Android.Views; using Android.Widget; using Android.OS; namespace TestApp { [Android.App.Activity(Label = "TestApp",MainLauncher = true,Icon = "@drawable/icon")] public class MainActivity : Activity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(new LinearLayout(this)); //set up handlers for uncaught exceptions: //Java solution Java.Lang.Thread.DefaultUncaughtExceptionHandler = new ExceptionHandler(this); //MonoDroid solution #1 AndroidEnvironment.UnhandledExceptionRaiser += AndroidEnvironment_UnhandledExceptionRaiser; //MonoDroid solution #2 AppDomain.CurrentDomain.UnhandledException += delegate { new Alert(this,"AppDomain.CurrentDomain.UnhandledException","error"); }; //throw an exception to test throw new Exception("uncaught exception"); } void AndroidEnvironment_UnhandledExceptionRaiser(object sender,RaiseThrowableEventArgs e) { //found a suggestion to set the Handled flag=true,but it has no effect new Android.Runtime.RaiseThrowableEventArgs(e.Exception).Handled = true; new Alert(this,"AndroidEnvironment.UnhandledExceptionRaiser","error"); } } public class ExceptionHandler : Java.Lang.Object,Java.Lang.Thread.IUncaughtExceptionHandler { private Context _context; public ExceptionHandler(Context c) { _context = c; } public void UncaughtException(Java.Lang.Thread thread,Java.Lang.Throwable ex) { new Alert(_context,"java exception handler"); } } public class Alert { public Alert(Context c,string src,string title = "alert") { Android.App.AlertDialog.Builder builder = new Android.App.AlertDialog.Builder(c); builder.SetTitle(title); builder.SetMessage(src); builder.SetPositiveButton("Ok",delegate { }); Android.App.AlertDialog alert = builder.Create(); alert.Show(); } } }
任何帮助将不胜感激,谢谢!