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

あなたのコードには 2 つの問題があります。

  1. super.onCreate()ACRA の初期化後に呼び出しを行わない
  2. @Reportscrashesパラメータが実行時に設定されている場合でも、クラスにはアノテーションが必要です。そうしないと、logcat で ACRA #init が呼び出されたというエラーが表示されますが、アプリケーションに ReportsCrashes 注釈はありません。

また、UI レイアウトが関連付けられていないため、アプリケーションがダイアログを表示できるかどうかもわかりません。上記の両方のポイントを変更すると、トースト レポートは正常に機能します。

于 2013-01-15T09:35:18.500 に答える