Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这段代码下载速度很慢,有什么帮助吗?_Java_Android_Download - Fatal编程技术网

Java 这段代码下载速度很慢,有什么帮助吗?

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(

在我的Android应用程序中,我需要下载一个约40 MB的文件,我正在手机中测试代码,但下载速度非常慢,我尝试从不同的来源下载,在使用我的电脑时,下载速度非常快

以下是我在下载服务中使用的代码:

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+版本,对吗?我对旧设备的牙套感兴趣,我没想到。谢谢你的提示,我没想到。