Java 这段代码下载速度很慢,有什么帮助吗?
在我的Android应用程序中,我需要下载一个约40 MB的文件,我正在手机中测试代码,但下载速度非常慢,我尝试从不同的来源下载,在使用我的电脑时,下载速度非常快 以下是我在下载服务中使用的代码:Java 这段代码下载速度很慢,有什么帮助吗?,java,android,download,Java,Android,Download,在我的Android应用程序中,我需要下载一个约40 MB的文件,我正在手机中测试代码,但下载速度非常慢,我尝试从不同的来源下载,在使用我的电脑时,下载速度非常快 以下是我在下载服务中使用的代码: URLConnection conexion; URL url; int lenghtOfFile = 0; try { url = new URL("<URL>"); conexion = url.openConnection(
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速度慢的原因吗?关于如何加快下载速度有什么想法吗?更改此选项
byte data[] = new byte[1024];
到
正如Commonware所说,
以较少的频率更新下载进度通知
例如:
在循环中使用一个简单的计数器变量,当它达到10时更新进度,然后重置它 改变这个
byte data[] = new byte[1024];
到
正如Commonware所说,
以较少的频率更新下载进度通知
例如:
在循环中使用一个简单的计数器变量,当它达到10时更新进度,然后重置它 我怀疑核心问题是,你的安卓手机的ISP提供的网络带宽/数据速率远低于你的电脑通过局域网/宽带连接获得的带宽/数据速率。可能是您的手机接收到来自本地手机的微弱信号,或者手机过载,或者主干线过载,或者您的ISP的对等安排不佳
如果这就是问题所在,除了更换电话运营商或重新配置你的家之外,你没什么办法了?联网,以便您的手机可以使用WiFi与本地WiFi路由器通话。我怀疑核心问题是,您的Android手机ISP提供的网络带宽/数据速率远低于您的PC通过LAN/宽带连接获得的带宽/数据速率。可能是您的手机接收到来自本地手机的微弱信号,或者手机过载,或者主干线过载,或者您的ISP的对等安排不佳
如果这就是问题所在,除了更换电话运营商或重新配置你的家之外,你没什么办法了?联网,以便您的手机可以使用WiFi与本地WiFi路由器进行通话。也许您最好使用。 Android将为您下载该文件。
如果DownloadProvider不适合您,您至少可以对您的代码进行基准测试。也许您最好使用。 Android将为您下载该文件。
如果DownloadProvider不适合您,您可以至少对代码进行基准测试。在更新通知时,您每下载1KB就执行一次IPC。对于40MB文件,这意味着您要执行大约40000个IPC调用。请尽量减少更新通知的频率。在更新通知时,您每下载1KB就执行一次IPC。对于40MB文件,这意味着您要执行大约40000个IPC调用。请尽量减少更新通知的频率。尝试增加缓冲区大小,这将减少I/O操作的数量,并使应用程序运行更快。减少更新ui的频率(例如,仅在每十次迭代中更新一次)也可能会提高性能。您还可以线程化ui更新,优先级较低。已经列出了一些好的答案,所以我会横向思考一下,问你有没有办法减小文件的大小?你能压缩它吗?你能只发送你需要的文件吗?等等等等,@PaulGrime这是我能得到的最小尺寸。它们已经被压缩了。感谢您的评论。尝试增加缓冲区大小,它将减少I/O操作量,并可以使应用程序更快地工作。减少更新ui的频率(例如仅在每十次迭代中更新一次)也可能会提高性能。您还可以线程化ui更新,优先级较低。已经列出了一些好的答案,所以我会横向思考一下,问你有没有办法减小文件的大小?你能压缩它吗?你能只发送你需要的文件吗?等等等等,@PaulGrime这是我能得到的最小尺寸。它们已经被压缩了。谢谢你的评论。也许这应该是一个评论?遗憾的是,我不能对问题发表评论。这对我来说似乎是一个合理的答案。但我认为这不会有什么帮助。啊,是的。愚蠢的销售代表规则:/@StephenC好吧,这基本上就是伊戈尔所说的。让我犹豫不决的是,这不是一个确定的答案,而是一个试一试的解决方案。当然,Dipz不能评论,所以这是可行的。@RyanAmos-这并不意味着它不是一个合法的答案。也许这应该是一个评论?很遗憾,我不能对问题发表评论..:这看起来是一个合法的答案。但我认为这不会有什么帮助。啊,是的。愚蠢的销售代表规则:/@StephenC好吧,这基本上就是伊戈尔所说的。让我犹豫不决的是,这不是一个确定的答案,而是一个试一试的解决方案。当然,Dipz不能发表评论,所以这是可行的。@RyanAmos-这并不意味着它不是一个合法的答案。我做的所有测试都是在WiFi中进行的,所以
这不是问题所在。无论如何,谢谢你的回答。我做的所有测试都是在WiFi中进行的,所以这不是问题所在。谢谢你的回答。DownloadManager只适用于2.3+版本,对吗?我对旧设备很感兴趣ToDownloadManager只适用于2.3+版本,对吗?我对旧设备的牙套感兴趣,我没想到。谢谢你的提示,我没想到。