【问题标题】:Monodroid: What should I do after I catch an unhandled exception?Monodroid:捕获到未处理的异常后该怎么办?
【发布时间】:2013-07-11 16:49:45
【问题描述】:

对于我的 Monodroid 应用程序,我想在出现未处理的异常后执行以下操作:

  1. 将错误发送到服务器。
  2. 通知用户应用程序已崩溃(可能带有 toast 消息)。
  3. 优雅地退出应用程序。

我已经实现了#1,但我正在努力实现#2 和#3。

在出现未处理的异常后,Toast 似乎不可用,并且有人警告我 it's a bad idea to exit an app on a user's behalf.

谁能指出我正确的方向?

这是我的代码:

using System;
using Android.App;
using Android.Runtime;
using Android.Widget;

namespace MyAppsNamespace
{
    [Application]
    public class MyApplication : Application
    {
        public static MyApplication Current { get; private set; }

        public MyApplication (IntPtr handle, global::Android.Runtime.JniHandleOwnership transfer) : base(handle, transfer)
        {
            Current = this;
        }

        public override void OnCreate()
        {
            base.OnCreate();
            AndroidEnvironment.UnhandledExceptionRaiser += (sender, args) => LogException(args.Exception);
        }

        public static void LogException(Exception exception)
        {
            var phoneId = Guid.NewGuid(); // just for testing purposes
            var client = AppConfig.ErrorLoggingServiceClient;
            var response = client.Send<ErrorLoggingResponse>(new ErrorLoggingEntry
                {
                    PhoneId = phoneId,
                    ErrorTime = DateTime.UtcNow,
                    Message = exception.Message,
                    StackTrace = exception.StackTrace
                }); // This works fine (i.e. I've implemented #1)
            Toast.MakeText(Context, String.Format("An error occurred. Please call Prod Support at 1-800-555-1212. [Phone Id: '{0}']", phoneId), ToastLength.Short).Show(); // This has no impact.
        }
    }
}

【问题讨论】:

  • 至于 #2,据可以告诉您拦截异常为时已晚 - 您的活动已经停止或以其他方式进入无法使用 UI 执行某些操作的状态。您可能想尝试启动另一个活动,而不是直接显示 Toast - 这个另一个活动可能只会显示您想要的 Toast。
  • 至于#3,我什至不确定“优雅地退出”是什么意思。应用程序已经崩溃,并且您在最后,就在退出之前获得了控制权 - 如果有事情要做,比如保存未保存的数据等,那就太迟了。而且我相信您可以信任 android 本身以最安全的方式终止崩溃的应用程序 - 所以我会说“不要做任何事情”。

标签: android error-handling xamarin.android exit toast


【解决方案1】:

不确定Context 指的是什么上下文:

Toast.MakeText(Context, "ERROR", ToastLength.Short).Show();

你可以试试

Toast.MakeText(YourMainApplication.this, "ERROR", ToastLength.Short).Show();

改为。

【讨论】:

    猜你喜欢
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多