我有Service
使用HttpURLConnection
管理下载任务。
我在执行任何HTTP请求之前使用自定义isNetworkAvailable
方法,但我想知道如何管理请求期间丢失的连接。
我应该在isNetworkAvailable
循环中调用while
方法(这意味着有很多来电)吗?使用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);
}
答案 0 :(得分:1)
我建议捕获IOException
,如果发生,请为用户提供重试或取消的选项。您可能希望使用setConnectTimeou
t(请参阅HttpURLConnection timeout question以获取如何使用它的示例)以确保在合理的时间内出错。
作为随机评论 - 如果您正在将数据读入相当大的缓冲区,就像您在这里一样,使用BufferedInputStream
几乎没有意义;只需直接使用connection.getInputStream()
返回的输入流。使用BufferedInputStream
的唯一原因是,如果您正在阅读小块,例如一次一个字节。