1

まれに、AsyncTasksの1つでこの不思議なRuntimeExceptionが発生します。アプリにAsyncTasksを実装する場所は複数ありますが、これらのエラーをどれだけ掘り下げても、このRuntimeExceptionがスローされる理由や発生しているスレッドに関する情報を取得できないようです。 completeAbruptly = true "非同期タスクにはキャッチされない例外があると思いますが、どこから始めればよいのかさえわかりません...アイデア?ありがとう!

ここに画像の説明を入力してください

4

2 に答える 2

4

completedAbruptly=true実行されたタスクが例外をスローしたときに発生します。そして、のタスクはメソッドAsyncTaskを実行するdoInBackgroundことです。

doInBackgroundコードをtry/catchブロックにラップし、発生した例外を出力させることをお勧めします。

protected Void doInBackground(Void... params) {
    try {
        // ----------
        // do stuff
        return null;
        // ----------
    } catch (Throwable t) {
        Log.e("AsyncTask", "OMGCrash", t);
        // maybe throw it again
        throw new RuntimeException(t);
    }
}

これは、このすべてが発生する理由を示しているはずです。

于 2012-09-14T18:20:28.070 に答える
2

ソースコードによると、completedAbruptlyはユーザーの操作によりスレッドが終了したことを示しています。非同期タスクが完了する前にアクティビティが終了すると、例外が発生すると思います。この可能性を捨てるのは簡単なはずです。AsyncTasksの1つを無限ループに置き換えて、エミュレーターで「戻る」を押すだけです。

于 2012-09-14T17:58:16.897 に答える