【问题标题】:ACRA cound not handle exception happens within Application#onCreate()ACRA 无法处理 Application#onCreate() 中发生的异常
【发布时间】:2013-01-15 09:00:39
【问题描述】:

我在我的安卓应用程序中使用ACRA

但我发现当 Application#onCreate() 方法中发生异常时,它只保存报告文件,而不是打开对话框发送它。

我的代码有问题吗?

@ReportsCrashes(formKey="")
public class MyAndroidApplication extends Application
{
        public void onCreate()
        {
            ACRAConfiguration config = ACRA.getConfig();
            config.setMailTo("test@test.com");
            config.setResToastText(R.string.acra_toast);
            config.setResDialogText(R.string.acra_dlg_txt);
            config.setResDialogCommentPrompt(R.string.acra_dlg_comment_prpmpt);
            try
            {
                config.setMode(ReportingInteractionMode.DIALOG);
            }
            catch (ACRAConfigurationException e)
            {
                logger.error("fail to config ACRA", e);
                return;
            }
            ACRA.setConfig(config);
            ACRA.init(this);
            someMethodThrowsException();
        }
}

【问题讨论】:

  • 代替logger.error,试试e.printStackTrace()

标签: android acra


【解决方案1】:

ApplicationonCreate 在创建任何 Activity 之前被调用并且没有 UI,因此 ACRA 无法显示对话框。从android docsonCreate

在应用程序启动时调用,在任何活动、服务之前, 或接收者对象(不包括内容提供者)已被创建。 实现应该尽可能快(例如使用惰性 初始化状态)因为在这个函数中花费的时间 直接影响开始第一个活动的表现, 服务或过程中的接收者。如果您覆盖此方法,请 一定要调用 super.onCreate()。

因此,请务必致电super.onCreate(),您上面的示例中缺少此功能,并且您不应该在那里做很多会导致异常的事情。

【讨论】:

  • 那么如果Application#oncreate发生异常,我们不应该使用Dialog模式吗?
  • 您仍然可以使用它,它只是不会显示对话框,因此可能不会通过电子邮件将错误报告发送给您(因为对话框会与用户确认报告)。我个人使用带有自动提交功能的Toast,然后在我的偏好设置中提供“自动发送崩溃报告”选项。
  • 我还是换成toast模式吧。谢谢!
【解决方案2】:

我发现您的代码存在两个问题。

  1. 你在初始化 ACRA 后不要调用super.onCreate()
  2. 即使参数是在运行时设置的,你的类也应该有注解@Reportscrashes。否则你会在 logcat 中得到一个错误,说 ACRA#init called but no ReportsCrashes annotation on Application

另外,我不确定应用程序是否可以显示对话框,因为它没有与之关联的 UI 布局。如果您更改以上两点,Toast 报告就可以正常工作。

【讨论】:

  • 1.我检查了超类android.app.Application#onCreate(),它什么也没做。
    2.
  • 2.我已经添加了@ReportCrashes注解但仍然没有对话框。可能是因为你说的应用程序没有UI布局..
猜你喜欢
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多