AsyncTask、网络操作和超时
AsyncTask, network operations and timeouts
我正在 AsyncTask 上执行网络操作;
try {
int timeOut = 5000;
httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, timeOut);
client = new DefaultHttpClient(httpParameters);
request = new HttpGet(URL);
response = client.execute(request);
in = null;
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
line = in.readLine();
} catch (Exception e) {
return "ERROR CONNECTING TO SERVER";
}
我正在为超时和缓慢的连接而苦苦挣扎。
如果检索数据的时间超过 5 秒,那么我将遇到超时异常。
我知道如果任务没有在 5 秒内完成那么它会超时,但是如果它已经联系了服务器并且当前正在下载需要超过 5 秒才能下载的数据怎么办。
我不想将超时设置为 20 秒,因为如果联系服务器出现问题,等待时间太长。
我应该用另一种方法来代替超时吗?
可能是我的理解有问题,一旦到达服务器就忽略超时。
连接到服务器后,您几乎可以立即读取第一部分数据。传输时间超过 1 秒的线路可能是故障。无论如何,超时不会在与 activity 的连接上触发,它意味着在停滞的连接上开始计时。
请注意,5 秒超时是您的用户相对经常遇到的情况,因此您必须正确处理这种情况。要调试超时执行的分支,我建议暂时选择一个非常小的超时值,以便您可以轻松地重现异常。
我正在 AsyncTask 上执行网络操作;
try {
int timeOut = 5000;
httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, timeOut);
client = new DefaultHttpClient(httpParameters);
request = new HttpGet(URL);
response = client.execute(request);
in = null;
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
line = in.readLine();
} catch (Exception e) {
return "ERROR CONNECTING TO SERVER";
}
我正在为超时和缓慢的连接而苦苦挣扎。
如果检索数据的时间超过 5 秒,那么我将遇到超时异常。 我知道如果任务没有在 5 秒内完成那么它会超时,但是如果它已经联系了服务器并且当前正在下载需要超过 5 秒才能下载的数据怎么办。
我不想将超时设置为 20 秒,因为如果联系服务器出现问题,等待时间太长。
我应该用另一种方法来代替超时吗?
可能是我的理解有问题,一旦到达服务器就忽略超时。
连接到服务器后,您几乎可以立即读取第一部分数据。传输时间超过 1 秒的线路可能是故障。无论如何,超时不会在与 activity 的连接上触发,它意味着在停滞的连接上开始计时。
请注意,5 秒超时是您的用户相对经常遇到的情况,因此您必须正确处理这种情况。要调试超时执行的分支,我建议暂时选择一个非常小的超时值,以便您可以轻松地重现异常。