我正在尝试向我的应用程序添加一个默认处理程序,以便我可以从其他未处理的异常中恢复.
我发现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();
- }
- }
- }
任何帮助将不胜感激,谢谢!