¿Cuál es el propósito de la clase Applicaton en android

¿Cuál es exactamente el propósito de la clase de aplicación. ¿Cuáles son los beneficios de extenderla a una subclase personalizada ¿Por qué usarla? ¿Pueden las variables globales ser almacenadas en cualquier otra clase alcanzar el mismo objetivo que la Aplicación?

Gracias,

Buena pregunta !

Su aplicación es un contexto que se ejecuta siempre mientras se ejecutan sus actividades y servicios.

También es el primer contexto que se crea y el último que se destruye. Por lo tanto, rodea el ciclo de vida de su aplicación.

Puede utilizar la clase de aplicación como una forma de compartir datos o componentes (por ejemplo, para la inyección de dependencias). Por ejemplo, si desea compartir un singleton entre actividades, puede crear la instancia en la clase de aplicación y proporcionar un getter, luego todos los demás contextos pueden obtener el singleton vía

((cast to your class)getApplicationContext()).getFoo(); 

Es posible que haya algunos casos de uso en los que es necesario hacer cosas antes de que se lance su primera actividad, y luego hacerlo en el método onCreate de la clase de aplicación.

Por otro lado, nunca debe onDestroy en el método onDestroy de la clase Application , ya que no siempre se llama. No hay contrato para eso en Android.

Pero esto es raro y, por lo general, no es necesario anular la clase de aplicación sin embargo. La inyección de dependencia puede lograrse de otras maneras por RoboGuice o Dagger por ejemplo.

Dos cosas hacen que esta Clase sea muy útil:

  1. La clase de aplicación se instancia antes de cualquier otra actividad.
  2. Contiene el contexto de aplicación

El contexto nos trae una gran cantidad de recursos: podemos averiguar algunas propiedades del dispositivo, cargar algunos recursos, iniciar una base de datos SQLite, etc., etc.

Todo esto sucede antes de que se cargue cualquier actividad, y todo esto está disponible globalmente para las actividades.

Ejemplo sencillo de lo que quiero decir:

 public class App extends Application{ private static Resources sResources; //--I want to load strings resources from anywhere-- public static String loadStringResource(int resID) { return sResources.getString(resID); } @Override public void onCreate() { super.onCreate(); sResources = getResources(); //---I want to load all preferences when my app starts--- PreferenceManager.setDefaultValues(this,R.xml.prefs,false); } } 

La ampliación de la clase Application permite integrarse en el ciclo de vida de la aplicación.

Esto también es útil para almacenar información a nivel de aplicación global (aunque normalmente es bueno mantener sus actividades independientes)

La clase Application es consciente del Contexto de la Aplicación y se carga cuando se carga la aplicación, por lo que contiene las callbacks adecuadas para el ciclo de vida de la aplicación antes de que se inicie la actividad. Lo más probable es que no quiera extender esta clase.

Desde los documentos de la API:

Normalmente no es necesario subclasificar la aplicación. En la mayoría de las situaciones, los singletons estáticos pueden proporcionar la misma funcionalidad de una manera más modular. Si su singleton necesita un contexto global (por ejemplo, para registrar receptores de radiodifusión), la función para recuperarla se puede dar un Contexto que utiliza internamente Context.getApplicationContext () al construir primero el singleton.

http://developer.android.com/reference/android/app/Application.html

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.