4

CustomExceptionHandler

public class CustomExceptionHandler implements UncaughtExceptionHandler {

private Context ctx;
private ContentResolver cr;

public CustomExceptionHandler(Context ctx, ContentResolver cr) {
    this.ctx = ctx;
    this.cr = cr;
}

public void uncaughtException(Thread t, Throwable e) {

    final Writer result = new StringWriter();
    final PrintWriter printWriter = new PrintWriter(result);
    e.printStackTrace(printWriter);
    String stacktrace = result.toString();
    printWriter.close();


    String deviceUuid = Utilities.DeviceUuid(ctx, cr);
    String bluetoothName = Utilities.LocalBluetoothName();

    AsyncTasks.ErrorLogTask logTask = new AsyncTasks.ErrorLogTask(e, bluetoothName, deviceUuid, stacktrace);
    logTask.execute();
}




}

私の主な活動から呼び出されました:

Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(getBaseContext(), getContentResolver()));

今例外が発生すると、通常の「残念ながら停止しました」というポップアップが表示されません。そのちょうど黒い画面。メインアクティビティから通話を削除した場合、つまり、CustomExceptionHandlerもう使用しない場合は、デフォルトの動作が得られます。

クラスにデフォルトのエラー動作を実装する方法はありますか?

前もって感謝します!

4

1 に答える 1

3

例外ハンドラの最後に次を追加して、「残念ながら停止しました」ダイアログを表示できます。

System.exit(1);

ただし、これによりプロセスが終了します。つまり、AsyncTaskは最後まで実行されません。

いずれにせよ、アプリケーションの状態がわからないため、uncaughtExceptionHandlerを使用している場合は、コードが確実に実行されるとは思えません。うまくいくかもしれませんし、うまくいかないかもしれません。また、uncaughtExceptionHandlerに新しいスレッドを作成し、そのスレッドをしばらくスリープさせてから、System.exit()を使用してアプリケーションを終了することもできます。これにより、AsyncTaskを実行して完了するのに十分な時間が与えられる場合があります。

于 2012-07-01T11:00:23.733 に答える