如何在Android中停止网络操作?

时间:2013-12-01 23:07:59

标签: java android multithreading networking stream

在我的应用中,我使用Drawable.createFromStream(inputStream, null);从网上下载图片,其中inputStream使用此代码:

connection = new URL(url).openConnection();
connection.setConnectTimeout(1000);
connection.setReadTimeout(1000);
imagesRenderer.downloadStream = connection.getInputStream();

图像可能很大,当我想停止图像下载时会出现问题。 由于inputStream.close()或后台线程,调用NetworkOnMainThreadException既不能直接从UI线程工作,如下面的代码所示:

new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}).start();

这个似乎不起作用:操作完成就好像没有试图阻止它一样。

所以我想知道,有没有办法立即关闭网络流或者我必须以另一种方式实现图像下载?如果是这样,那么正确的方法是什么?

1 个答案:

答案 0 :(得分:0)

好吧,在图像下载和创建drawable之间使用缓冲区来解决问题:

downloadStream = connection.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
while (!needsCancel) {
    int r = downloadStream.read(buffer);
    if (r == -1) break;
    out.write(buffer, 0, r);
}
d = Drawable.createFromStream(new ByteArrayInputStream(out.toByteArray()), null);