2011-04-15 17 views
5

Estoy intentando escribir una Actividad que genera una AsyncTask para una operación de larga ejecución y periódicamente publica actualizaciones de estado a la Actividad. Me gustaría asegurarme de que AsyncTask sobreviva la rotación de la pantalla u otras condiciones de destrucción como OOM correctamente.¿Cuánto tiempo puedo retener un ContentResolver en una AsyncTask?

I've read this thread on the android-developers list, que a su vez led me to this implementation, que es casi lo que necesito. Sin embargo, el último paso de mi AsyncTask es eliminar algunos datos de un solucionador de contenido. Es extremadamente importante que este paso no se omita, porque los datos son sensibles y no deben dejarse en el teléfono en condiciones normales. Sin embargo, los ContentResolvers provienen de Contextos, en este caso la Actividad, y con este esquema, la Actividad puede ser nula en el momento en que AsyncTask esté lista para hacer la eliminación.

¿Es seguro obtener un ContentResolver de la actividad en la construcción de AsyncTask y conservarlo después de la vida útil de la actividad? Si no, ¿qué puedo hacer para manejar este caso?

Respuesta

2

¿Por qué no obtiene el ContentResolver de la Aplicación? Debe comprender los diferentes conceptos que hay detrás de una Actividad y un Contexto: el hecho de que una Actividad sea un Contexto no significa que deba utilizar una Actividad para todas las tareas que realiza. Utilice una actividad sólo para IU cosas

+0

http://groups.google.com/group/android-developers/browse_thread/thread/dbe5f18d3dba9aa9/fa4b981f635f16db?lnk=gst&q=getbaseContext#fa4b981f635f16db es un correo del mismo desarrollador que dice "No use getBaseContext(), solo use el Contexto que tenga". Así que supongo que mi pregunta es, ¿qué contextos tengo? ¿El contexto de la aplicación es preferible al contexto base? –

+1

Sí, el contexto de la aplicación es la forma preferible, porque siempre existe (si el código se está ejecutando realmente en ese momento y necesita un contexto, hay un objeto de aplicación activo). Crea una instancia estática de tu aplicación. en es onCreate: instancia = esto; y cree una aplicación pública estática get() {returns instance;}. De esa manera, siempre tendrá un contexto cuando lo necesite – sddsadsf

+1

Esto no debería causar ninguna pérdida de memoria ¿no? –

Cuestiones relacionadas