尝试下载大文件时,为什么我的AsyncTask文件下载失败?

时间:2011-08-09 14:45:06

标签: android

我正在尝试使用AsyncTask下载600 MB文件。如果我在真实世界的设备上执行我的代码,它可以正常工作,但只有当我“不停地关注它”时,不要让屏幕保持关闭一段时间,但是,如果我不这样做而且只是让我自己离开设备,几分钟后我去检查它时,进度对话框消失了,它下载的文件只是它应该的大小的一小部分。我的猜测是,它与手机在屏幕关闭一段时间后让WiFi进入睡眠状态有关。

我该如何解决这个问题?

以下是相关代码:

class DownloadFileAsync extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        showDialog(DIALOG_DOWNLOAD_PROGRESS);
    }

    @Override
    protected String doInBackground(String... aurl) {
        int count;

        try {
            URL url = new URL(aurl[0]);
            URLConnection conexion = url.openConnection();
            conexion.connect();

            int lenghtOfFile = conexion.getContentLength();


            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream("/sdcard/file.zip");

            byte data[] = new byte[1024];

            long total = 0;

            while ((count = input.read(data)) != -1) {
                total += count;
                publishProgress(""+(int)((total*100)/lenghtOfFile));
                output.write(data, 0, count);
            }

            output.flush();
            output.close();
            input.close();
        } catch (Exception e) {}
        return null;

    }
    protected void onProgressUpdate(String... progress) {

         mProgressDialog.setProgress(Integer.parseInt(progress[0]));
    }

    @Override
    protected void onPostExecute(String unused) {
        dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
    }
}
} 

3 个答案:

答案 0 :(得分:2)

This问题描述了如何保持屏幕开启,以便手机不会进入睡眠状态。如果您尝试下载文件600mb +,您可能会考虑将您的应用程序放入某种类型的Service,因为这可能需要几个小时。

答案 1 :(得分:1)

如果您的目标SDK足够高,也可以使用Download Manager

答案 2 :(得分:0)

您很可能正在使用Wi-Fi连接,只要屏幕关闭,就可以断开连接。您可以在以下位置查看:

  1. 设置&GT;无线和网络 - &gt; Wi-Fi设置
  2. 点击,选择Advanced
  3. 点击“Wi-Fi睡眠政策”,然后选择“从不”。
  4. 但您应该考虑将Download Manager用于较新的设备(使用Android 2.3 +)。