我有一个使用JSoup连接到Web服务器的应用程序,它工作正常。不幸的是,所述Web服务器不是很可靠。我经常因为超时连接而得到SocketException。我在一个修改过的IntentService中建立了连接,我只是在catch(Exception e)块中重复 onHandleIntent(intent)。
catch(Exception e){
Log.d(Tag, "in catch Exception block...");
onHandleIntent(intent);
}
理论上,这应该有效。但有时,我得到堆栈溢出错误,并且应用程序结束得相当不合理。那么,我该怎样做才能让它变得更好?
我想继续调用onHandleIntent,所以,也许我必须在迭代中而不是递归地调用它。如果您可以就如何迭代实现这一点给我建议,那将非常有帮助。谢谢!
答案 0 :(得分: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;
}
(也许有人会想到一种不那么“笨拙”的方式来写这个...)