2011-05-03 39 views
0

我有一個應用程序,允許用戶緩存數據供離線使用。 我需要下載的數據主要是圖片,但包含其他內容,如視頻,文本文件& mp3。可能只有20個文件可供下載或300或更多。在視頻的情況下,文件的範圍從幾千字節到幾個兆字節。在Android上下載大量文件背景

我已經嘗試使用一個服務與一個活套和一個普通的舊線程的服務,但即使我使用服務上的startForeground它不可避免地會被一個「超時執行服務」和一個ANR約10我的Droid和我的難以置信的文件等等。

當我得到ANR時,似乎用戶系統的CPU使用率約爲45-50%。該服務在一段時間後重新啓動並繼續,但在大多數情況下我需要下載優先。

下面的代碼實際下載一個文件,該文件是在一個線程中運行:

try { 
    URL request = new URL(entry.remotePath); 
    InputStream is = (InputStream) request.getContent(); 
    FileOutputStream fos = new FileOutputStream(entry.localPath); 
    try { 
     byte[] buffer = new byte[4096]; 
     int l; 
     while ((l = is.read(buffer)) != -1) { 
      fos.write(buffer, 0, l); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     is.close(); 
     fos.flush(); 
     fos.close(); 
    } 
} catch (MalformedURLException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

我的問題是,有沒有辦法做到這一點(播客應用程序,如ACast似乎下載了很多的標準方法數據通過一個沒有問題的服務),還是我有正確的方法,但我做了一些不正確的事情導致系統過載。我的服務線程是否應該在下載之間進行休眠,或者我可以採取什麼特殊措施來保持低CPU或讓系統知道它仍在工作?

我針對的是System 8及更高版本,如果有問題的話。

回答

1

查看AsyncTask。這將讓您在展示用戶界面的同時背景您長時間運行的流程。

此外,你可以找到在Android好/官方教程線程here.

+0

其實我想通了這一點我張貼的問題之後。通過分割一些單獨的任務,比如將文件下載到自己的嵌套線程中,我似乎已經阻止了系統殺死我的服務。 – 2011-05-04 13:44:22