【问题标题】:Displaying a dialog on unhandled exception显示未处理异常的对话框
【发布时间】:2013-04-20 08:59:31
【问题描述】:

我希望能够在我的 Xamarin Android 应用程序崩溃时显示一个对话框。诸如“抱歉应用程序已崩溃”之类的内容。您想向开发者发送错误报告吗?”。

我已经连接到 Thread.DefaultUncaughtExceptionHandler,它在捕获到异常时调用 UncaughtException。

当异常被捕获时,我尝试启动一个新活动来显示对话框 - 对话框已创建,但仅显示一个带有标题的空白对话框。 OnCreate 永远不会被调用,对话框似乎只是挂起。

如果我在应用程序运行时调用代码以正常显示对话框,它会显示并正确运行,因此对话框代码似乎没有任何问题。

有人知道如何解决这个问题吗?

【问题讨论】:

标签: c# android xamarin.android xamarin


【解决方案1】:

目前没有支持和推荐的方法来捕获和识别 Xamarin.Android 中未处理的异常。希望他们能尽快解决这个问题。

http://mono-for-android.1047100.n5.nabble.com/Catch-all-the-exceptions-td5165993.html

请参阅 Jonathan Pryor-2 帖子。

【讨论】:

    【解决方案2】:

    我找到了一种捕获未处理异常的方法。这取决于抛出异常的位置。如果异常发生在后台线程上,则可以通过在继承自 Mono Application 类的类中连接以下事件来发现它。

    AppDomain.CurrentDomain.UnhandledException
    

    我认为您的应用已崩溃,系统没有可用的上下文来创建您的新活动并显示您的对话框。

    我已经使用了下面链接中的示例,只要异常发生在主 ui 线程之外,我就能够恢复并显示 toast,所以我相信它可以用来做你需要的事情。

    更多信息: http://xandroid4net.blogspot.com/2013/11/how-to-capture-unhandled-exceptions.html

    【讨论】:

    • 这需要在每个项目中实现吗?例如Android、iOS 和 WP8.1 而不是在 PCL 中?
    • 我会将处理异常的逻辑放在 pcl 中,但您需要尽快注册事件处理程序,以便将异常路由到您的 pcl 逻辑。简而言之,答案是肯定的。在每个项目(Android、iOS 等)开始时注册处理程序,但将处理程序放在您的 pcl 中。
    【解决方案3】:

    当应用程序因您提供的示例而崩溃时,我能够显示 Toast 消息。但我无法显示警报窗口。 我正在编写以下代码以在 Android 设备的 UnHandled Exception 事件中显示和警告消息。

     'alert.SetTitle("Un Handled Exception Event");
     SetMessage("Un Handled Exception Event triggered");
     SetCancelable(true);
     Show();'
    

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      相关资源
      最近更新 更多