Pregunta

Tengo una clase que obtiene datos en respuesta a las pulsaciones de botón en la actividad principal. Por desgracia, sigo corriendo en problemas porque esta clase no es una actividad o servicio. Por ejemplo, sin un contexto que no puedo traducir un identificador de recursos en una cadena:

getString(R.string.example_string); // Doesn't work

¿Debo hacer esta clase en un servicio y tener la parada principal de actividad de la clase cuando está cerrado? ¿Debo pasar el Contexto de la actividad en esta clase como esta?

MyClass c = new MyClass(this);

O hay alguna manera mejor de manejar este problema?

Este problema también aparece cuando intento enviar un pan tostado de esta clase.

Actualización: Erich y Janusz me señaló en la dirección de la clase AsyncTask que funciona perfectamente, excepto que se crea un nuevo hilo y nunca mata a ese hilo. Esto significa que vez que el usuario pulsa un botón, se añade otro hilo y los viejos apenas se sientan allí.

¿Fue útil?

Solución

Si usted tiene una acción de fondo cuyo ciclo de vida se desacopla de su actividad, me gustaría utilizar un Service. En ese caso, el Service tendrá su propio Context, por lo que no tendrá que pasar. Si, sin embargo, es necesario realizar una acción de fondo en respuesta a un evento de interfaz de usuario (y opcionalmente publican los resultados de nuevo en la interfaz de usuario hilo), recomendaría utiliza un AsyncTask.

Otros consejos

Estoy de acuerdo con Erich, si sólo tiene un algo pequeño, como la publicación de un cambio en una secundaria de web o cargar algo de la memoria del teléfono para mostrar en pantalla el uso de un asíncrono de tareas noreferrer nofollow referencia. Si la tarea saldrá muy "rápido" (algunos segundos) que pueda tomar una clase anónima dentro de su actividad. Esto le permitirá utilizar una referencia implícita a la actividad externa dentro de la tarea y se puede obtener de su contexto a partir de ahí.

Si la tarea está en ejecución durante más tiempo se puede pasar por el contexto. Si estás pasando por el contexto tratar de no pasar esta actividad de la utilización this.getApplicationContext () esto reducirá al mínimo el número de referencias a su actividad y permitir que el recolector de basura para limpiar correctamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top