在我的Android应用程序中,我需要下载一个~40 MB的文件,我正在测试手机中的代码,但下载速度非常慢,我尝试从使用我的PC时速度快的不同来源下载。
以下是我在下载服务中使用的代码:
URLConnection conexion;
URL url;
int lenghtOfFile = 0;
try {
url = new URL("<URL>");
conexion = url.openConnection();
conexion.connect();
lenghtOfFile = conexion.getContentLength();
try {
File f = new File(Environment.getExternalStorageDirectory() + "/testing");
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(f.getAbsolutePath());
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
notification.contentView.setProgressBar(R.id.status_progress, 100, (int) (total * 100 / lenghtOfFile), false);
notification.contentView.setTextViewText(R.id.status_text, Long.toString(total * 100 / lenghtOfFile));
notificationManager.notify(42, notification);
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
e.getCause();
e.getMessage();
}
} catch (Exception e) {
}
}
这段代码可能是dl速度慢的原因吗?关于如何提高下载速度的任何想法?
答案 0 :(得分:4)
使用DownloadManager也许会更好 Android将为您下载该文件。 如果DownloadProvider不适合您,您可以至少对您的代码进行基准测试。
答案 1 :(得分:3)
更改此
byte data[] = new byte[1024];
到
byte data[] = new byte[4096];
正如commonsware所说, 以较低的频率更新下载进度通知。
例如: 在循环中使用一个简单的计数器变量,并在达到10时更新进度,然后重置它......
答案 2 :(得分:2)
当您更新Notification
时,您每下载1 KB就会执行一次IPC。对于40MB的文件,这意味着您正在执行大约40,000个IPC调用。请更频繁地更新Notification
。
答案 3 :(得分:0)
我怀疑核心问题是您的(Android手机)ISP提供的网络带宽/数据速率远低于您的PC通过其LAN /宽带连接获得的速度。可能是您的手机从本地小区发出微弱信号,或者小区过载,或者主干网过载,或者您的ISP的对等安排很差。
如果这是问题所在,除了(可能)更换电话运营商或重新配置您的(家庭?)网络以外,您可以做的事情不多,这样您的手机就可以使用WiFi与本地WiFi路由器通话。