Mi actividad está intentando crear un AlertDialog que requiere un contexto como parámetro. Esto funciona como se esperaba si uso:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
Sin embargo, desconfío de usar "esto" como contexto debido a la posibilidad de pérdidas de memoria cuando la actividad se destruye y se recrea incluso durante algo simple como una rotación de pantalla. De una publicación relacionada en el blog del desarrollador de Android :
Hay dos maneras fáciles de evitar pérdidas de memoria relacionadas con el contexto. La más obvia es evitar escapar del contexto fuera de su propio alcance. El ejemplo anterior mostró el caso de una referencia estática, pero las clases internas y su referencia implícita a la clase externa pueden ser igualmente peligrosas. La segunda solución es utilizar el contexto de la aplicación. Este contexto vivirá mientras su aplicación esté activa y no dependa del ciclo de vida de las actividades. Si planea mantener objetos de larga duración que necesitan un contexto, recuerde el objeto de la aplicación. Puede obtenerlo fácilmente llamando a Context.getApplicationContext () o Activity.getApplication ().
Pero para el AlertDialog()
ningunogetApplicationContext()
o getApplication()
es aceptable como contexto, ya que arroja la excepción:
"No se puede agregar la ventana: el token nulo no es para una aplicación"
por referencias: 1 , 2 , 3 , etc.
Entonces, si esto realmente se considera un "error", ya que se nos recomienda oficialmente usar Activity.getApplication()
y, sin embargo, no funciona como se anuncia?
Jim