¿Cuáles son las buenas estrategias para manejar devoluciones de llamada asíncronas en Android?

Una aplicación puede tener partes que se ejecutan en subprocesos separados y volver a llamar a algún objeto al finalizar. Un patrón típico puede tener el siguiente aspecto:

1) una Vista o Fragmento hace una llamada a algún modelo. La llamada se origina en algún punto de vista o fragmento

model.doSomething(context, new Runnable() { public void run() { /* run on the main thread when model finishes */ } }); 

2) un modelo utiliza un Thread o AsyncTask que hace algo y, a continuación, llama a la devolución de llamada en el hilo llamante – mediante un Handler

 void doSomething(Context context, Runnable callback) { Handler handler = new Handler(); // ... // When finished (this is really done on some separate thread), handler.post(callback); } 

3) la devolución de llamada interactúa con la llamada Ver o Fragmento para avanzar a través de alguna lógica de control

La devolución de llamada puede estar tocando el estado de una Vista que no está adjunta a una ventana, lo que puede provocar inestabilidad en la aplicación.

¿Cuáles son algunas buenas estrategias para manejar esta situación?

Parece que quieres manejar la comunicación entre tu Modelo y tu Vista de una manera más consistente. Una buena manera de separar éstos es usar un Servicio:

http://developer.android.com/reference/android/app/Service.html

Si su aplicación sólo se está ejecutando en un solo proceso, sugeriría buscar en el IntentService ya que es mucho más simple de usar.

Un gran ejemplo de esto es la aplicación Google IO 2011 IOSched:

http://code.google.com/p/iosched/

Parece bastante grande, pero la arquitectura está bien pensado con respecto a la separación de las preocupaciones de los datos (ya sea de los recursos locales o remotos).

El segundo beneficio de tener esta ejecución en su propio servicio en lugar de vincular una devolución de llamada en su vista es que el servicio vive fuera del ciclo de vida de la actividad para que no tenga que preocuparse por lo que sucede a su devolución de llamada cada vez que su actividad se destruye / pausado. Muchas veces cuando se utilizan devoluciones de llamada como éstas, la devolución de llamada se invocará y la actividad puede no estar todavía viva.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.