2012-03-21 21 views
23

En Apress Pro Android 4 el autor ha dicho que:Android Asyntask: Uso referencia débil de contexto para evitar la rotación de la pantalla del dispositivo

[...] contexto de la actividad ejecutando actualmente ya no será válida cuando el dispositivo es rotado [...] Un enfoque es usar una referencia débil a la actividad en lugar de una referencia [...] difícil

Pero el autor solo sugiere esto, y no dice cómo se hace. Quién ha hecho esto antes, por favor dame un ejemplo.

Respuesta

56

En algún lugar de su AsyncTask querrá pasar su actividad. Luego guardará esa referencia en una referencia débil. Luego puede quitar la referencia y usarla nuevamente en onPostExecute.

miembro de la Clase:

WeakReference<Activity> weakActivity; 

En algún lugar de AsyncTask, probablemente, ya sea constructor o onPreExecute:

weakActivity = new WeakReference<Activity>(activity); 

En onPostExecute:

Activity activity = weakActivity.get(); 
if (activity != null) { 
    // do your stuff with activity here 
} 
+0

agradable, es realmente ayudado gracias –

+1

'activity' seguirá siendo referencia inválida i f GC no patinó a tiempo. Por favor, corríjame si estoy equivocado. – q126y

0

Si desea restaurar la actividad anterior, por qué no ir a onSaveInstanceState y restaurarlo más adelante.

Comprobar este enlace para más detalles

Saving application state

1

Aquí está un ejemplo de WeakReference para almacenar un contexto;

WeakReference<Context> cReference = new WeakReference<Context>(getApplicationContext()); 

Ahora podemos utilizar esta weakReference para realizar actividades/trabajos relacionados con el contexto.

Cuestiones relacionadas