0

JSoup を使用して Web サーバーに接続するアプリがあり、正常に動作します。残念ながら、前述の Web サーバーはあまり信頼できません。接続のタイムアウトが原因で SocketException が頻繁に発生します。変更した IntentService で接続を確立し、catch(Exception e) ブロックでonHandleIntent(intent)を繰り返すだけです。

catch(Exception e){
Log.d(Tag, "in catch Exception block...");   
onHandleIntent(intent);
}

理論的には、これでうまくいくはずです。しかし、ときどきスタック オーバー フロー エラーが発生し、アプリが非常に不自然に終了してしまいます。それで、それをより良くするために私は何ができますか?

onHandleIntent を引き続き呼び出したいので、再帰的にではなく、繰り返し呼び出す必要があるかもしれません。これを繰り返し実装する方法についてアドバイスをいただければ、非常に役に立ちます。ありがとう!

4

1 に答える 1

0

onHandleIntentを引き続き呼び出したいので、再帰的にではなく、反復的に呼び出す必要があるかもしれません。

それは正しいです。これを再帰的に処理すると、サーバーが継続的にタイムアウトすると、必然的にスタックオーバーフローが発生します。

これを繰り返し実装する方法についてアドバイスをいただければ、非常に役立ちます。ありがとう!

このようなもの:

for (int tries = 1; ; tries++) {
    Connection conn = null;
    try {
        // attempt to connect
        // do stuff
    } catch (SocketException ex) {
        if (/* timed out */ && tries < MAX_TRIES) {
            continue;
        }
        // report exception
    } finally {
        if (conn != null) {
            // close it
        }
    }
    break;
}

(たぶん誰かがこれを書くためのより「不格好な」方法を考えることができます...)

于 2012-07-22T03:13:46.303 に答える