1

我在我的 android 应用程序中使用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();
        }
}
4

2 回答 2

1

onCreate是在创建Application之前调用Activity的并且没有 UI,因此 ACRA 无法显示对话框。来自android文档onCreate

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

所以,一定要调用super.onCreate(),你上面的例子是缺失的,你不应该在那里做很多会导致异常的事情。

于 2013-01-15T09:32:05.543 回答
0

我看到您的代码存在两个问题。

  1. super.onCreate()初始化 ACRA 后不调用
  2. @Reportscrashes即使在运行时设置了参数,您的类也应该有注释。否则,您将在 logcat 中收到错误,说ACRA#init 已调用但 Application 上没有 ReportsCrashes 注释

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

于 2013-01-15T09:35:18.500 回答