2011-02-04 2 views
10

Trong ứng dụng của tôi tải xuống các tệp tải xuống từ web, chúng có dung lượng khoảng 200Mb (Đã nén). Vì vậy, bất kỳ ai có thể cho tôi biết cách tốt nhất để tải xuống tệp. Trên thực tế mối quan tâm của tôi là về hiệu suất của mã. Xin vui lòng gimme một ý tưởng hoặc một số mã nếu có thể để tải về. Cách xử lý lỗi và sự cố mạng ở giữa.Cách tốt nhất để tải xuống tệp từ net theo chương trình trong Android là gì?

Cám ơn bạn, Srinivas

Trả lời

15

Dưới đây là một số mã mà tôi gần đây đã viết chỉ cho rằng:

try { 
     URL u = new URL("http://your.url/file.zip"); 
     InputStream is = u.openStream(); 

     DataInputStream dis = new DataInputStream(is); 

     byte[] buffer = new byte[1024]; 
     int length; 

     FileOutputStream fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory() + "/" + "file.zip")); 
     while ((length = dis.read(buffer))>0) { 
     fos.write(buffer, 0, length); 
     } 

    } catch (MalformedURLException mue) { 
     Log.e("SYNC getUpdate", "malformed url error", mue); 
    } catch (IOException ioe) { 
     Log.e("SYNC getUpdate", "io error", ioe); 
    } catch (SecurityException se) { 
     Log.e("SYNC getUpdate", "security error", se); 
    } 

này tải các tập tin và đặt nó trên sdcard của bạn.

Bạn có thể sửa đổi điều này cho phù hợp với nhu cầu của mình. :)

+0

Tôi nghĩ bộ đệm byte 1024 (1K) không phải là "cách tốt nhất"? 1500 là tốt hơn, tôi cũng đã thử 5000 và nó nhanh hơn. – Derzu

+0

Tôi nghĩ rằng 4096 là tốt hơn –

+0

Hey, nó sẽ làm việc cho các tập tin video cũng? –

2

Tôi muốn chỉ ra rằng Android 2.3 (API cấp 9) giới thiệu một dịch vụ hệ thống mới có tên là DownloadManager. Nếu bạn đồng ý với chỉ hỗ trợ 2.3, thì bạn chắc chắn nên sử dụng nó. Nếu không, bạn có thể:

  1. Kiểm tra xem có DownloadManager và sử dụng nếu có. Nếu không (Android < 2.3), hãy tự tải xuống tệp, ví dụ như được mô tả bằng xil3.
  2. Không sử dụng DownloadManager chút nào, nếu bạn nghĩ quá nhiều việc. Tuy nhiên, tôi tin rằng bạn sẽ được hưởng lợi từ việc sử dụng nó.
+0

DownloadManager là hoàn toàn hoàn tác cho các nhà phát triển làm việc với nó. Bạn sẽ gặp rắc rối nhiều hơn lợi ích nếu bạn sử dụng nó cho một thứ gì đó nhiều hơn chỉ 1 hoạt động và 1 tập tin để tải xuống – Sever

+0

Xin chào, có thể DownloadManager xử lý những thứ như tải xuống gián đoạn, tiếp tục tải xuống, tải xuống theo lịch, nhiều tệp tải xuống không? Tôi đã thử DownloadManager trong một thời gian nhưng tôi chỉ có thể tải xuống 1 tệp tại một thời điểm và khi tải xuống bị gián đoạn, tôi phải tải xuống lại tất cả. Cảm ơn –