- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试向我的应用程序添加一个默认处理程序,以便我可以从其他未处理的异常中恢复。
我发现了 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();
}
}
}
任何帮助将不胜感激,谢谢!
最佳答案
您可以在 AppDomain.CurrentDomain.UnhandledException 事件中捕获大部分异常。但是你不能在这个委托(delegate)中调用 AlertDialog,因为:1. 应用程序崩溃。2. 至少调用UnhandledException 事件。3. alert.Show() 异步执行(在 UI 线程中)
因此,您应该使用同步操作(例如 System.IO)。您不应使用 native UI 操作,因为它们是异步的。
关于c# - 单体机器人 : Unhandled Exception Recovery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15978070/
现在我需要确切地知道如何在需要时立即部署基于微服务的后端?我可以自己管理所有技术的集成,但是在 AWS 上托管时,我不可能获得这么多实例,而且现在也买不起。 我正在考虑从单一后端开始的想法,同时有可能
我有一个使用 spring 3.1 和 spring-security 3.1 以及 Java 7 开发的整体式 Spring Web 应用程序,并将其部署在 tomcat 7 上。 现在我有一个新要
在他的Monad Reader article on Hoogle第 33 页,Neil Mitchell 提倡将 Haskell 项目捆绑到一个具有多种模式的可执行文件中。 (仅供引用,Neil M
我有一个单进程有 5 个线程的单体应用程序。每个线程完成某些特定任务。考虑使用 docker 将此应用程序移动到微服务。如果我看一下架构,每个工作线程都会变成一个 docker 进程。因此,在某种程度
我知道有人问过很多类似的问题,但我还没有看到对链接和管理样式的所有三种可能方法的比较。哪个是浏览性能最好和最差的?我知道 推荐超过@import因为它允许并行下载,但我也听说单个大型 CSS 优于 正
多年来,我的目标是从 ASP/VBScript 转向“更好”的语言——我的偏好是 C#,因为我有 C 技能——但我也会考虑其他语言(包括 PHP 等,所以不仅仅是 DotNet ) 目标是使用一种对我
我是一名优秀的程序员,十分优秀!