2014-02-07 40 views
0

我知道如何使用.disconnect()方法斷開HTTPURLConnection。但是URLConnection對象呢? Myy應用程序通過URLConnection.getInputStream從服務器直接鏈接下載文件。下載進度有一個停止按鈕。當用戶觸摸停止時,我想停止下載。感謝您的回答。Android如何斷開URLConnection

+0

要停止下載,取決於您如何閱讀流。您應該粘貼代碼的相關部分。 – desseim

回答

1

如果您正在使用URLConnection.getInputStream(),那麼你下載的代碼可能類似於如下:

InputStream fileInputStream; // initialized 

// ... 

byte[] buffer = new byte[1024 * 32]; 
int len; 
int totalLen = 0; 
while ((len = fileInputStream.read(buffer)) != -1) { 
    fstream.write(buffer, 0, len); 
    totalLen += len; 
} 

因此,停止此下載,你應該打破這種循環一旦某個條件爲真,一種方式是使用的AtomicBoolean,因爲多數時候仍設置在UI線程同時下載是在工作線程:

// in your download class 
AtomicBoolean abort = new AtomicBoolean(false); 

// Updated loop 
while ((len = fileInputStream.read(buffer)) != -1) { 
    if (abort.get()) { 
     // do any necessary cleanup like closing streams 
     break; 
    } 
    fstream.write(buffer, 0, len); 
    totalLen += len; 
} 

然後在點擊按鈕添加處理程序:abort.set(true);

+0

除非你(需要)在布爾上做一個比較和交換操作,'volatile boolean'就足夠了。 – desseim

+0

謝謝,我之前沒有使用過atomicboolean。這非常有用。我之前用布爾值嘗試過相同的操作,但他們沒有工作。 – themaster33