我在我的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();
}
}
答案 0 :(得分:1)
onCreate
的{{1}}在创建任何Application
之前被调用,并且没有用户界面,因此ACRA无法显示对话框。来自Activity
的{{3}}
在应用程序启动时,在任何活动,服务之前调用 或创建了接收者对象(不包括内容提供者)。 实现应该尽可能快(例如使用懒惰 初始化状态)因为在这个函数中花费的时间 直接影响开始第一项活动的表现, 服务或流程中的接收者。如果重写此方法,请执行 一定要打电话给super.onCreate()。
所以,请务必致电onCreate
,上面的示例缺失了,你不应该在那里做很多会导致例外的事情。
答案 1 :(得分:0)
我发现你的代码存在两个问题。
super.onCreate()
@Reportscrashes
。否则你会在logcat中收到错误,说 ACRA #init被调用但在Application 上没有ReportsCrashes注释另外,我不确定应用程序是否可以显示对话框,因为它没有与之关联的UI布局。如果您更改上述两点,Toast报告工作正常。