Android:Asynctask的doInBackground方法在很长的延迟之后被调用

我一直在尝试从url下载video,我在asynctask的doInBackground()中实现了我的下载方法,但doInBackground方法花了很多时间来调用(5-10分钟),我正在使用另一个asyntask下载图像的活动,从我指示下载video活动,其工作正常。 我的onPreExecute方法正在被调用,但之后,doInBackground需要将近5-7分钟才能启动。 我将非常感激所提供的任何帮助。 这是mycode

btnDownloadLQ.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { try { new DownloadVideoTask().execute(videoURL); } catch(Exception e) { Log.e("Vidit_TAG","I got an error",e); } } }); private class DownloadVideoTask extends AsyncTask<String, String, String> { @SuppressWarnings("deprecation") @Override protected void onPreExecute() { super.onPreExecute(); showDialog(DIALOG_DOWNLOAD_PROGRESS); } protected String doInBackground(String... urls) { int i=0; try { URL url = new URL (urls[0]); InputStream input = url.openStream(); try { //The sdcard directory eg '/sdcard' can be used directly, or //more safely abstracted with getExternalStorageDirectory() String root = Environment.getExternalStorageDirectory().toString(); File storagePath = new File(root + "/vidit"); storagePath.mkdirs(); OutputStream output = new FileOutputStream (new File(storagePath,title+".mp4")); try { byte[] buffer = new byte[1024]; int bytesRead = 0; while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) { output.write(buffer, 0, bytesRead); } } catch(Exception e) { Log.e("Vidit_TAG","I got an error",e); } finally { output.close(); } } catch(Exception e) { Log.e("Vidit_TAG","I got an error",e); } finally { input.close(); //tvTitle.setText("Completed"); } } catch(Exception e) { Log.e("Vidit_TAG","I got an error",e); } return null; } @SuppressWarnings("deprecation") @Override protected void onPostExecute(String unused) { dismissDialog(DIALOG_DOWNLOAD_PROGRESS); alertbox(title); } } 

Solutions Collecting From Web of "Android:Asynctask的doInBackground方法在很长的延迟之后被调用"

确保没有其他asyncTasks正在运行,如果需要取消它们。

在大多数android版本上,asyncTask在单个后台线程上运行,只能运行小任务。

如果任务可能需要很长时间(或者有多个任务),请考虑取消它们或使用替代方法(如使用API描述的executeOnExecutor)。

尽pipe每次都没有发生,我仍面临同样的问题。

你可以使用传统的线程替代和处理你自己的UI更改