ACRA无法处理Application#onCreate()中发生的异常

时间:2013-01-15 09:00:40

标签: android acra

我在我的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();
        }
}

2 个答案:

答案 0 :(得分:1)

onCreate的{​​{1}}在创建任何Application之前被调用,并且没有用户界面,因此ACRA无法显示对话框。来自Activity的{​​{3}}

  

在应用程序启动时,在任何活动,服务之前调用   或创建了接收者对象(不包括内容提供者)。   实现应该尽可能快(例如使用懒惰   初始化状态)因为在这个函数中花费的时间   直接影响开始第一项活动的表现,   服务或流程中的接收者。如果重写此方法,请执行   一定要打电话给super.onCreate()。

所以,请务必致电onCreate,上面的示例缺失了,你不应该在那里做很多会导致例外的事情。

答案 1 :(得分:0)

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

  1. 初始化ACRA后,您不会致电super.onCreate()
  2. 即使参数是在运行时设置的,您的类也应该有注释@Reportscrashes。否则你会在logcat中收到错误,说 ACRA #init被调用但在Application 上没有ReportsCrashes注释
  3. 另外,我不确定应用程序是否可以显示对话框,因为它没有与之关联的UI布局。如果您更改上述两点,Toast报告工作正常。