2011-11-08 21 views
6

Todavía estoy tratando de encontrar el patrón de diseño "correcto" cuando se trata de AsyncTask sy rotación de pantalla. Leí this commonsware blog post que enlaza con this code, pero el método onRetainNonConfigurationInstance ahora está en desuso. La frase mágica en la documentación establece "La garantía de no manejar mensajes durante el cambio a la siguiente actividad simplifica el uso con objetos activos ...", que es una parte verdaderamente crítica sobre lo que hizo este método. No veo su sugerencia de usar setRetainInstance() logrando el mismo objetivo.AsyncTask con rotación de pantalla - onRetainNonConfigurationInstance obsoleto

También vi mensajes such as this one cuya respuesta número uno es realmente un hack mal que solo cubre el 90% de los casos de uso (es decir, qué pasa si su tarea se está ejecutando y luego entra una llamada telefónica, esa solución no trabajo).

Se sugirió revisar el código here para ejemplos AsyncTask pero a menos que estoy siendo denso, no veo que éstos sean utilizados en cualquier lugar de la aplicación (cuando se utiliza el search feature en Google Code)

Esta pregunta tiene Obviamente me lo han preguntado muchas veces, pero no he visto una respuesta actualizada, como es debido. Si existe, responda y cierre como duplicado si es necesario, ¡pero al menos responda! :)

This is another link que revisa el mismo método obsoleto.

+0

Ver [mi respuesta aquí] (http://stackoverflow.com/a/12303649/265521). ['AsyncTaskLoader'] (http://developer.android.com/reference/android/content/AsyncTaskLoader.html) también se sugirió. – Timmmm

Respuesta

1

Solo está en desuso en Honeycomb y más, y funcionará muy bien en aquellos también. La 'nueva' forma es usar cargadores (puede usar la biblioteca de compatibilidad para obtenerlos en versiones anteriores a HC) o fragmentos retenidos. Si llama al setRetainInstance(), la instancia pasó como está a la actividad recién creada (en realidad usan onRetainNonConfigurationInstance en el FragmentActivity de la biblioteca de compatibilidad), por lo que es efectivamente la misma que la que tiene ahora.

+0

pero incluso yo uso Object x = setRetainInstance (true), hay un problema que no puedo usar. Tengo que crear mi propio setRetainInstance(), ¿por qué? –

+0

@RajuGujarati ¿Qué? ¿Has visto la firma de este método? –

1

No hay nada inherentemente incorrecto con el uso de un método en desuso. Si su AsyncTask ES TAN CRÍTICO que no puede cancelarlo y volver a iniciarlo si cambia su orientación, debe considerar usar un servicio.

Cuestiones relacionadas