Android 为什么我的AsyncTask文件下载在尝试下载大文件时失败?
我正在尝试使用异步任务下载一个600 MB的文件。如果我在真实世界的设备上执行代码,它会工作,但前提是我“密切关注”屏幕,不允许屏幕关闭任何时间,但是,如果我不这样做,只让设备自己运行,几分钟后我去检查它,“进度”对话框消失,它下载的文件仅为其应有大小的一小部分。我猜这与手机在屏幕关闭一段时间后让WiFi进入睡眠状态有关 我该如何解决这个问题 以下是相关代码:Android 为什么我的AsyncTask文件下载在尝试下载大文件时失败?,android,Android,我正在尝试使用异步任务下载一个600 MB的文件。如果我在真实世界的设备上执行代码,它会工作,但前提是我“密切关注”屏幕,不允许屏幕关闭任何时间,但是,如果我不这样做,只让设备自己运行,几分钟后我去检查它,“进度”对话框消失,它下载的文件仅为其应有大小的一小部分。我猜这与手机在屏幕关闭一段时间后让WiFi进入睡眠状态有关 我该如何解决这个问题 以下是相关代码: class DownloadFileAsync extends AsyncTask<String, String, String&
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);
}
}
}
class DownloadFileAsync扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
showDialog(对话框下载进度);
}
@凌驾
受保护的字符串背景(字符串…aurl){
整数计数;
试一试{
URL=新URL(aurl[0]);
URLConnection conexion=url.openConnection();
conexion.connect();
int lenghtOfFile=conexion.getContentLength();
InputStream输入=新的BufferedInputStream(url.openStream());
OutputStream output=新文件OutputStream(“/sdcard/file.zip”);
字节数据[]=新字节[1024];
长总计=0;
而((计数=输入。读取(数据))!=-1){
总数+=计数;
出版进度(“+(int)((总计*100)/长度文档));
输出.写入(数据,0,计数);
}
output.flush();
output.close();
input.close();
}捕获(例外e){}
返回null;
}
受保护的void onProgressUpdate(字符串…进度){
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}
@凌驾
受保护的void onPostExecute(字符串未使用){
dismissDialog(对话框下载进度);
}
}
}
问题描述了如何保持屏幕打开,使手机不会进入睡眠状态。如果你试图下载文件600 Mb+,你可能会考虑把你的应用程序变成某种类型的,因为这可能需要几个小时。p> 问题描述了如何打开屏幕,使手机不会进入睡眠状态。如果你试图下载文件600 Mb+,你可能会考虑把你的应用程序变成某种类型的,因为这可能需要几个小时。p> 如果您的目标SDK足够高,您也可以使用。如果您的目标SDK足够高,您也可以使用。最有可能的情况是您使用的是Wi-Fi连接,一旦屏幕关闭,就可以断开连接。您可以签入:
Advanced
<>但是你应该考虑使用新的设备(Android 2.3 +)。
最有可能的是你使用的是Wi-Fi连接,一旦屏幕关闭,就可以断开连接。您可以签入:
Advanced
<>但是你应该考虑使用新设备(Android 2.3 +)。尝试坚持现有的实现。downloadManager的存在就是为您轻松地完成这样的工作:API级别太高,需要更多的向后兼容性。。。不过还是要谢谢你!尝试使用现有的实现。downloadManager的存在就是为您轻松地完成这样的工作:API级别太高,需要更多的向后兼容性。。。不过还是要谢谢你!API级别太高,需要更多向后兼容性。。。不过还是要谢谢你!API级别太高,需要更多向后兼容性。。。不过还是要谢谢你!