Tôi đang cố gắng thêm trình xử lý mặc định vào ứng dụng của mình để tôi có thể khôi phục từ các ngoại lệ không được giải quyết khác.MonoDroid: Khôi phục ngoại lệ không hợp lệ
Tôi đã tìm thấy ba cơ chế do Android/MonoDroid cung cấp, theo như tôi có thể nói, nên thực hiện điều này có thể, nhưng tôi không thể nhận được bất kỳ công việc nào trong số đó. Đây là mã của tôi:
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();
}
}
}
Mọi trợ giúp sẽ được đánh giá cao, cảm ơn!
Bạn đã bao giờ làm việc này chưa? Tôi thấy các sự cố tương tự khi không gỡ lỗi ứng dụng của mình. Tôi có thể nói với bạn rằng 'AndroidEnvironment' được gọi và xử lý các ngoại lệ chưa được thực hiện trước khi' AppDomain' thực hiện. –
Đó không phải là cách "để thiết lập cờ Handled = true", nó phải là 'e.Handled = true;' ...: -B –