Pregunta

Por alguna razón mi onPostExecute() no se llama después de mis acabados AsyncTask.

Mi clase decleration:

public class setWallpaperForeground extends AsyncTask<String, Integer, Boolean>

Mi onPostExecute ():

protected void onPostExecute(Boolean result)

Todo funciona bien, mis finaliza las doInBackground() con éxito y devuelve un booleano, pero entonces, sólo se termina.

Gracias

¿Fue útil?

Solución

¿Ha creado su AsyncTask en el hilo de interfaz de usuario? También añadir una anotación @ Override de su método onPostExecute () para asegurarse de que usted declaró correctamente.

Otros consejos

¿Empezaste la tarea con método execute()? El onPostExecute no se presentaría si sólo invocar el doInBackground.

Encontrados / Made otro error desagradable:

Si los parametros de onPostExecute(Param param) no coinciden con el que definen con extends AsyncTask<...,...,Param> y que no ha utilizado la anotación @Override, nunca será ejecutado y que no te dan una advertencia de Eclipse.

Nota para mí misma: Sólo utilice siempre la anotación @Override y Eclipse le ayudará.

Otra manera fácil de evitar todos los errores con nombre:

en Eclipse: Right-click in code > Source > Override/Implement Methods

Después de tener el mismo problema y ninguna de estas respuestas me ayudaron, me enteré de que mi hilo de interfaz de usuario fue bloqueado (he usado un CountDownLatch.await() ) y por lo tanto el método onPostExecute() que se supone que debe ser llamado por el hilo de interfaz de usuario nunca fue llamado.

cometió otro error desagradable que puede resultar en este mismo error. Al definir el AsyncTask y decir que es, no lo estaba llamando execute pero estaba llamando doInBackground

new AsyncTask<String,Void,Void>() {
    ....
}.doInBackground("parameter");

en lugar de

new AsyncTask<String,Void,Void>() {
    ....
}.execute("parameter");

Me he enfrentado el mismo problema. Ninguna de las soluciones anteriores funcionó para mí. Entonces me di cuenta de que tal vez el problema ayuda a otra persona.

En la interfaz de usuario del hilo i llamar a los siguientes códigos:

public class XActivity ...{
    onCreate(){
        ....

        new SaveDrawingAsync(this).execute();

        while(true)
        {
            if(MandalaActivity.saveOperationInProgress){
                continue;
            }
            super.onBackPressed();
            break;
        }

        ...
    }
}

Mi AsyncTask definición de clase:

public class SaveAsync extends AsyncTask<Object, Void, Void> {

    @Override
    public Void doInBackground(Object... params) {
        saveThem(); // long running operation
        return null;
    }

    @Override
    public void onPostExecute(Void param) {
        XActivity.saveOperationInProgress = false;
    }

    @Override
    public void onPreExecute() {
       XActivity.saveOperationInProgress = true;
    }

}

en el código anterior onPostExecute no se llama. Es a causa de un bucle infinito después de la ejecución AsyncTask. AsyncTask y el bucle de espera inifinite ambos entre si a fin. Así, los stucks código!

La solución es cambiar el diseño!

he tenido el mismo comportamiento, y la causa fue que yo he estado publicando una gran cantidad de mensajes como un progreso en el interior con doInBackground siguiente código:

new Handler(Looper.getMainLooper()).post(new Runnable() {
   @Override
   public void run() {
     // .. some UI updates
   }
});

esto debe haber sobrecargado cola principal mensaje thrad, y ha causado larga demora antes de onPostExecute conseguiría llamada. La solución fue publicar sólo una vez cada segundo.

Para mí fue un error del usuario. Yo estaba terminando la AsyncTask invocando cancelar (verdadero) en él y no leer la documentación suficiente cerca para saber que onPostExecute no se llama en este caso, es onCancelled.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top