0

我有一个使用 JSoup 连接到 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 回答