Me han molestado por esto por un tiempo. ¿Cómo manejo adecuadamente los cambios de orientación de la pantalla mientras tengo un Thread
/AsyncTask
separado ejecutándose? Actualmente, tengoLa orientación de la pantalla del controlador cambia cuando hay AsyncTasks en ejecución
android:configChanges="orientation|keyboard|keyboardHidden"
en mi AndroidManifest.xml
, pero eso es not really encouraged:
Nota: El uso de este atributo debe ser evitado y utilizarse únicamente como último recurso. Lea la sección Manejo de los cambios de tiempo de ejecución para obtener más información sobre cómo manejar adecuadamente un reinicio debido a un cambio en la configuración.
Además, en el 2.3 emulador, funciona al cambiar a landscape
, pero cambiar de nuevo a portrait
falla.
Ahora, la razón por la que uso configChanges
es porque cuando el usuario cambia de orientación, es posible que tenga un AsyncTask
ejecutándose, haciendo algo de tráfico de red, y no quiero que se detenga.
¿Hay alguna otra forma de hacerlo, o hay una forma de arreglar 2.3 para volver al retrato?
que sé sobre onRetainNonConfigurationInstance
, pero no estoy seguro de que sería una buena idea para "salvar" a la instancia AsyncTask
, sobre todo porque la clase que se extiende AsyncTask
no es estática (por lo que está ligado a la Activity
) - y debe serlo, porque en onPostExecute()
llama a los métodos de la instancia Activity
.
Muy agradable, mucho más simple que implementar un 'Servicio'. Gracias. – Felix
@Flo Sé que esto ha pasado un tiempo desde la publicación, pero estoy tratando de hacer lo mismo, pero no entiendo muy bien a qué te refieres con "Para recibir una notificación cuando la tarea haya terminado, la Actividad tiene que implementar una interfaz que usa para registrarse en la clase de Aplicación ". ¿Alguna posibilidad de un ejemplo? (Soy nuevo en java y android1) – Bex
Lo siento, no tengo un ejemplo de código. Pero eche un vistazo a [el patrón de observador] (http://stackoverflow.com/questions/2483644/rosetta-stone-observer-pattern) Espero que entiendan a qué me refiero con "register" (update()) y "notificar" (addObserver()). – Flo