使用此代码的下载速度非常慢,有任何改进吗?

时间:2012-03-04 15:51:11

标签: java android download

在我的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速度慢的原因吗?关于如何提高下载速度的任何想法?

4 个答案:

答案 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路由器通话。