0

現在、拡張するクラスを使用して、いくつかのデータを php Web サービスに投稿していますAsyncTask

データが送信されるとアプリがクラッシュしたというデフォルトの例外ポップアップを表示したいので、ここで同期呼び出しを行う必要があります ( previousHandler.uncaughtException(t, e))。

の非同期機能を無効にすることはできAsyncTaskますか、それとも他に何か提案はありますか

これが私の現在のコードです、事前に感謝します:

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();

    //task wont be complete before this code below runs since its async.

    previousHandler.uncaughtException(t, e);


}
4

2 に答える 2

0

デフォルトの例外ポップアップをonPostExecute()のメソッドに入れますErrorLogTask。タスクが終了すると、そのブロックがメイン スレッドで実行されます。

于 2012-07-01T12:15:20.920 に答える
0

まだ例外をキャッチする必要があると思います。AsyncTask で呼び出しを保持しますが、例外をキャッチします。戻り値としてフラグを使用するか、フラグとして使用するdoInBackgroundAsyncTask にローカルな変数を作成し、フラグのonPostExecuteチェックで必要に応じてダイアログを表示します。

一般に、ANR のリスクがあるため、メイン UI スレッドでサーバー呼び出しを行うことは望ましくありません。それらについては、この記事を参照してください: http://developer.android.com/guide/practices/responsiveness.html

于 2012-07-01T12:11:57.793 に答える