Tengo un problema con la clase AsyncTask. Parece que mi tarea deja de funcionar después de crear 4 o 5 tareas.AsyncTask doInBackground no se ejecuta
Tengo 2 actividades. MainActivity que solo contiene un botón que inicia una segunda actividad llamada ImageActivity.
ImageActivity es muy simple. tiene un onCreate que establece el diseño, y luego inicia una nueva AsyncTask que carga una imagen de internet. Esto funciona bien las primeras veces. Pero de repente deja de funcionar. El método onPreExecute se ejecuta cada vez, pero no el método doInBackground. Intenté simplificar el doInBackground con un bucle para dormir, y ocurre lo mismo. No puedo entender este comportamiento ya que asynctask se cancela y se establece en nulo en el método onDestroy. Así que cada vez que comienzo una nueva ImageActivity, también creo una nueva AsyncTask.
Recreo ImageActivity y la tarea presionando el botón Atrás, y luego haciendo clic en el botón en la actividad principal.
¿Alguna idea a alguien? Realmente estoy luchando con este.
UPDATE: Código que inicia el ImageActivity (dentro de un botón OnClickListener)
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
intent.setClassName(this, ImageActivity.class.getName());
startActivity(intent);
El código anterior comienza esta actividad
public class ImageActivity extends Activity {
private AsyncTask<Void, Void, Void> task;
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.main);
task = new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute()
{
Log.d(TAG, "onPreExecute()");
}
@Override
protected Void doInBackground(Void... params)
{
Log.d(TAG, "doInBackground() -- Here is the download");
// downloadBitmap("http://mydomain.com/image.jpg")
return null;
}
@Override
protected void onPostExecute(Void res)
{
Log.d(TAG, "onPostExecute()");
if(isCancelled()){
return;
}
}
}.execute();
}
@Override
protected void onDestroy()
{
super.onDestroy();
task.cancel(true);
}
}
UPDATE:
He probado utilizando una combinación de los hilos tradicionales y el método runOnUiThread, y parece funcionar mejor. Ahora el hilo se ejecuta todo el tiempo.
Publica tu código. ¿Cómo lo llamas? No tenemos idea de cómo ayudarte sin el código – Falmarri
Teniendo exactamente el mismo problema, después de iniciar varias AsyncTasks en mi aplicación, la aplicación solo se ejecuta hasta onPreExecute(), pero no ingresa doInBackground(). Probando el enfoque de Thread now ... –
Estoy teniendo el mismo problema. Lo extraño es que varía de un dispositivo a otro. Ocurre en una tableta (Android 4.0), pero un teléfono (Android 2.3.4) que ejecuta exactamente el mismo código no lo tiene. – Hong