Estoy trabajando con una situación bastante común en este momento: descargar algunos datos en la web y luego actualizar una vista para mostrarlos. Claramente, quiero hacer la descarga web en segundo plano, y luego actualizar la vista en el hilo principal de UI. Ahora, al mirar mi código, estoy un poco preocupado de que mi actividad y sus elementos de IU se eliminen antes de actualizarlos. Aquí está la esencia de lo que tengo en mente:¿Cómo puedo saber si mi contexto aún es válido?
Thread update = new Thread() {
public void run() {
final Data newData = requestData();
if (newData != null) {
post(new Runnable() {
public void run() {
Toast.makeText(MyClass.this, "I'll do things here that depend on my context and views being valid", Toast.LENGTH_SHORT).show();
}
});
}
}
};
update.start();
Parece posible que mientras estoy descargando los datos, la actividad puede ser destruido. ¿Qué pasa entonces? ¿Mi hilo continuará ejecutándose? ¿Terminaré tratando de acceder a los objetos muertos?
Normalmente hago esto por AsycTask, pero esta vez el trabajo me pareció lo suficientemente simple como para simplemente poner en línea el tema hilos-lanzar-hilos. ¿Haré las cosas mejor usando una AsyncTask?
Esto probablemente no compilará, ya sea que deba hacerlo estático, o debe anteponer MyActivity.this. – EboMike
Copié principalmente el código de la pregunta solo para dar una idea general, no pretendía que el código de la respuesta se usara para las aplicaciones reales. Actualicé el código, ahora compilará (aunque esto no es realmente importante). – Malcolm
Voy a probar este booleano por ahora, así que le doy a éste la marca de verificación. Aún así, gracias por sus respuestas, Kurtis y EboMike. Todo lo que no había oído hablar de Cargadores hasta que los mencionaste. – MaximumGoat