2013-01-15 50 views
1

我在我的Android應用程序中使用ACRA內。ACRA cound沒有處理異常情況的應用#的onCreate()

但我發現,當異常應用#onCreate()方法中發生,它只能保存報告文件,而不是提高該對話框發送。

這有什麼錯我的代碼?

@ReportsCrashes(formKey="") 
public class MyAndroidApplication extends Application 
{ 
     public void onCreate() 
     { 
      ACRAConfiguration config = ACRA.getConfig(); 
      config.setMailTo("[email protected]"); 
      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

代替logger.error,嘗試e.printStackTrace() – njzk2

回答

1

在創建任何Activity之前的ApplicationonCreate被調用並且不具有UI,因此ACRA無法顯示的對話框。從android docsonCreate

當應用程序開始時調用,任何活動,服務,或 接收器對象(不包括內容提供者)已被創建之前。 實現應該儘可能快(例如使用狀態初始化的延遲 ),因爲在此函數中花費的時間直接影響啓動第一個活動, 服務或進程中的接收方的性能。如果你重寫這個方法,一定要調用super.onCreate(),否則爲 。

所以,一定要打電話super.onCreate(),你上面的例子是缺少哪個,你不應該做一大堆那裏,會導致異常。

+0

所以,如果異常發生在應用#OnCreate中,我們不應該用對話模式? – nut

+0

您仍然可以使用它,它只是不會顯示對話框,因此可能不會將錯誤報告通過電子郵件發送給您(因爲對話框會向用戶確認報告)。我個人使用自動提交的「Toast」,然後在我的偏好設置中提供「自動發送崩潰報告」選項。 – iagreen

+0

看來我最好換成敬酒模式。謝謝! – nut

0

我看到你的代碼有兩個問題。

  1. 你不初始化ACRA
  2. 你的類應該有塔註釋@Reportscrashes即使參數設置在運行時調用後super.onCreate()。否則,你會得到logcat的一個錯誤說稱爲ACRA#的init,但是,應用沒有ReportsCrashes註釋

此外,我不知道,如果應用程序可以顯示一個對話框,因爲它有與之關聯的UI佈局。如果您更改以上兩點,敬酒報告可以正常工作。

+0

1.我檢查了超類android.app.Application#onCreate(),它什麼也沒做。
2. – nut

+0

2.我添加了@ReportCrashes註解但仍然沒有對話框。也許是因爲你說的應用程序沒有UI佈局.. – nut

相關問題