Ich habe versucht, Videos von einer URL herunterladen, habe ich meine Download-Methode in der DoInBackground() von asynctask implementiert, aber die DoInBackground-Methode nimmt eine Menge Zeit in Anspruch Rufen Sie an (5-10 Minuten), ich benutze eine andere Asyntask, um ein Bild in der Aktivität herunterzuladen, von der ich angewiesen wurde, die Videoaktivität herunterzuladen und es funktioniert gut. Meine onPreExecute Methode wird pünktlich aufgerufen, aber danach braucht doInBackground fast 5-7 Minuten um zu starten. Ich werde wirklich für jede Hilfe dankbar sein. Hier ist mycodeAndroid: Asynctask DoInBackground Methode wird nach einer langen Verzögerung
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 e.g. '/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);
}
}
Konnten Sie Ihren Code veröffentlichen? doInBackground wird aufgerufen, sobald onPreExecute beendet ist (und es existiert), also muss etwas falsch sein, wie Sie es aufrufen oder in Ihrem onPreExecute. –
wahrscheinlich ist er post-verzögert, es ist unmöglich, nach 10 Minuten – deadfish
@ D_Steve595 My OnPreExecute Methode aufgerufen wird rechtzeitig, die ich während des Debuggens, aber danach DoInBackground dauert fast 5-7 Minuten zu starten. –