gpt4 book ai didi

c# - 使用 UnobservedTaskException 停止 HockeyApp 使我的 Xamarin iOS 应用程序崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 21:07:47 25 4
gpt4 key购买 nike

我们有一个位于高度异步 PCL 库之上的 Xamarin iOS 应用程序。有可能偶尔某个任务会在库中出现故障而未被观察到。因此,我们在 TaskScheduler 上连接了 UnobservedTaskException 处理程序,以确保这不一定会导致我们的应用程序宕机。

在我们启用 HockeyApp 以集中崩溃报告之前,这一切都很好。 Hockey 为未观察到的任务异常添加了自己的处理程序,它总是在向其服务器发送崩溃报告后终止应用程序。我对他们为 AppDomain UnhandledException 处理程序执行此操作没有问题,但我需要阻止他们在未观察到的任务异常时杀死应用程序。

似乎有一种机制可以为这些异常安装自定义处理程序,但我看不到如何在 Xamarin iOS Hockey SDK 中安装它

这是我们用来启用 Hockey 的代码

var manager = BITHockeyManager.SharedHockeyManager;

manager.Configure(APPID);
#if DEBUG
manager.DebugLogEnabled = true;
#endif

manager.StartManager();

有谁知道如何针对 UnobservedTaskExceptions 覆盖 HockeyApp 的默认行为?

最佳答案

UnobservedTaskException EventHandler 被硬编码在 StartManager 方法中,无法直接移除。

TaskScheduler.UnobservedTaskException += (sender, e) => ThrowExceptionAsNative(e.Exception);

引用:https://github.com/bitstadium/HockeySDK-Xamarin/blob/28e67ecba14d00c8bea8043e08678af6044d33cf/source/HockeySDK.iOSBindings/Additions.cs#L43

就我个人而言,我从源代码构建,公开公开 ThrowExceptionAsNative 并添加配置方法以在调用 StartManager 时包含/排除默认处理程序。这就像 HockeyApp 对 HockeySDK-Windows api 所做的一样。

因此,当捕获到 UnobservedTaskException 时,您可以选择自行处理或将其作为 native 异常抛出。

这很像原始的 Xamarin native 绑定(bind),我不明白为什么他们在 HockeySDK-Windows 代码中这样做,他们删除了默认处理UnobservedTaskException:

Since .NET 4.5, by default, UnobservedTaskExceptions do no longer cause the app to crash. The SDK has not been adapted for this and still logs these errors and causes the program to exit, though this might not be needed or intended.

Users who wish to continue using the handler, should add calls to RegisterUnobservedTaskExceptionHandler() or RegisterDefaultUnobservedTaskExceptionHandler() after calling Configure().

对于一些不想自定义构建 HockeySDK.Xamarin 的客户,我通过反射 删除了 EventHandler StartManager 调用并添加我们的自定义处理程序。使用这种方法,您将没有公共(public) ThrowExceptionAsNative 可用于在需要时将异常作为 native 异常抛出,但更多的反射可以做到这一点:-/

关于c# - 使用 UnobservedTaskException 停止 HockeyApp 使我的 Xamarin iOS 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40055838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com