Pregunta

Tengo un proyecto que utiliza AsyncTask realizar su trabajo en segundo plano.
Este proyecto también utiliza una clase como un soporte genérico para valores estáticos como llaves de bases de datos, sino también para una o dos objetos útiles para todo el proyecto. Digamos que esta clase se llama public class Constants.

Quiero un acceso de estos objetos desde un AsyncTask, y no sé si necesito copiar o no.
No estoy realmente está recibiendo errores o accidentes, pero me da un poco de los comentarios del usuario informar accidentes que no puedo reproducir, así que estoy gessing estoy haciendo algo mal con esto.

Mi procesamiento actual es la siguiente:

onStart() {// somewhere in the UI thread  
new MyTask(Constants.theObject).execute(); // (1)  
}  
// ...  
class MyTask extends AsyncTask<...> {  
MyObjectType object;  
MyTask(MyObjectType theObjectInstance) {  
object = theObjectInstance; // (2)  
// ...  
doInBackground() { // (3)  
//  ...  
} 

En (1), Constants.theObject es un objeto estático creado en el inicio de la aplicación

En (2), me sale una referencia al objeto estático existente Constants.theObject

En (3), ya no están en el hilo de interfaz de usuario, y quiero acceso Constants.theObject (que también puede estar siendo utilizado en el hilo principal)

.

Creo que hay tres casos posibles.

  • este código es feo, yo debería hacer lo contrario
  • este código es correcto, el feedback de los usuarios no se trata de esto
  • este código está bastante bien, pero debe hacer una copia de Constants.theObject si quiero utilizarlo en doInBackground; de lo contrario puede fallar

espero que usted me puede ayudar! un montón de lectura gracias.

¿Fue útil?

Solución

A partir de lo que ha escrito, no creo que necesita para hacer una copia, a menos que MyObjectType NO es hilo de seguridad, en cuyo caso, es necesario asegurarse de que sólo 1 hilo a la vez que está modificando / es non-thread-safe-métodos. (Hacer una copia sería de hecho a resolver esto, pero si se puede hacer una copia, es un estático mundial realmente lo que usted debe utilizar de todos modos?)

¿Estás 100% seguro de que 1 y 3 sólo puede ocurrir después de que el objeto haya sido inicializado?

Otros consejos

Puede ser porque más de un hilo está intentando cambiar el mismo objeto. que puede causar resultados inesperados / fracaso completo. Es posible que quiero usar algo de bloqueo de manera que no hay 2 hilos se actualiza el objeto al mismo tiempo. Este caso se ralentizará sus operaciones Asynch ya que todos dependen de una intance exacta. Creo que se está utilizando objetos estáticos por una razón, es posible que desee considerar que hacer alguna otra manera, si es posible.

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