0

我有一个Service使用 using 管理下载任务的HttpURLConnection

我在执行任何 HTTP 请求之前使用自定义isNetworkAvailable方法,但我想知道如何管理请求期间丢失的连接。

我应该isNetworkAvailablewhile循环中调用我的方法吗(这意味着很多调用)?管理连接丢失的标准方法是什么HttpURLConnection

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

FileOutputStream outputStream = openFileOutput(filename, MODE_PRIVATE | MODE_APPEND);               

BufferedInputStream in = new BufferedInputStream(connection.getInputStream());

byte[] data = new byte[1024];
int x = 0;

while ((x = in.read(data, 0, 1024)) >= 0) {
    outputStream.write(data, 0, x);
}
4

1 回答 1

1

我建议抓住IOException,如果发生,让用户选择重试或取消。您可能希望使用setConnectTimeout(有关如何使用它的示例,请参阅HttpURLConnection 超时问题)来确保您在合理的时间内收到错误。

作为一个随机评论 - 如果您正在将数据读入一个相当大的缓冲区,就像您在这里一样,使用BufferedInputStream;几乎没有意义或没有意义。只需使用connection.getInputStream()直接返回的输入流。使用 a 的唯一原因BufferedInputStream是如果您正在阅读小块,例如一次一个字节。

于 2013-07-13T09:14:47.883 回答