我正在使用ACRA woth我的android應用程序。我的問題是,當發生崩潰時,如何確保在報告崩潰之前執行一些代碼。我的意思是我想在崩潰發生時添加一些自定義變量,以便知道應用程序處於什麼狀態?ACRA與android:如何執行崩潰前的代碼報告
請幫
謝謝
我正在使用ACRA woth我的android應用程序。我的問題是,當發生崩潰時,如何確保在報告崩潰之前執行一些代碼。我的意思是我想在崩潰發生時添加一些自定義變量,以便知道應用程序處於什麼狀態?ACRA與android:如何執行崩潰前的代碼報告
請幫
謝謝
描述here實現自己的發件人。它可以簡單地包圍一些現有的發件人,並在那裏轉發發送功能。
在發件人代碼中,您可以在實際發送報告之前執行任何特殊操作。
這就是使用ACRA 4.5.0和HttpSender後端的工作。我在Cloudant上使用Acralyzer。
原始代碼:
@ReportsCrashes(
mode = ReportingInteractionMode.DIALOG,
resDialogText = R.string.crash_dialog_text,
resDialogCommentPrompt = R.string.crash_dialog_comment_prompt,
formUri = "https://kpc.cloudant.com/acra-openconnect/_design/acra-storage/_update/report",
formUriBasicAuthLogin="[restricted reporter login]",
formUriBasicAuthPassword="[restricted reporter password]",
reportType = org.acra.sender.HttpSender.Type.JSON,
httpMethod = org.acra.sender.HttpSender.Method.PUT,
formKey = ""
)
public class Application extends android.app.Application {
public void onCreate() {
super.onCreate();
ACRA.init(this);
我的應用程序保持與日誌消息內存中的循環緩衝器。這不會寫入磁盤,並且我不特別想將其呈現爲字符串,並且每次添加條目時都會調用putCustomData()。相反,我調用我的靜態「自卸車」方法VPNLog.dumpLast(),在HttpSender.send()運行之前修改報告。新代碼如下所示:
@ReportsCrashes(
mode = ReportingInteractionMode.DIALOG,
resDialogText = R.string.crash_dialog_text,
resDialogCommentPrompt = R.string.crash_dialog_comment_prompt,
formUri = "https://kpc.cloudant.com/acra-openconnect/_design/acra-storage/_update/report",
formUriBasicAuthLogin="[restricted reporter login]",
formUriBasicAuthPassword="[restricted reporter password]",
// reportType and httpMethod are now defined below
formKey = ""
)
public class Application extends android.app.Application {
public void onCreate() {
super.onCreate();
ACRA.init(this);
ACRA.getErrorReporter().setReportSender(
new HttpSender(org.acra.sender.HttpSender.Method.PUT,
org.acra.sender.HttpSender.Type.JSON,
null) {
@Override
public void send(CrashReportData report) throws ReportSenderException {
report.put(ReportField.APPLICATION_LOG, VPNLog.dumpLast());
super.send(report);
}
});
我要添加的值是一長(100+行)字符串; Acralyzer正確地將其分成獨立的編號行。
另一種選擇是填充ReportField.CUSTOM_DATA具有多個鍵/值對:
report.put(ReportField.CUSTOM_DATA, "key0=value0\nkey1=value1\n");
Acralyzer將在一個HTML表顯示這些。
謝謝。這太棒了! –
PErfect!謝謝 – Snake