2009-12-21 28 views
12

Tengo una aplicación impulsada por un XML de configuración: varias propiedades de la aplicación se cargan al inicio de la aplicación al analizar XML y inicializando variables estáticas de alguna clase. Los datos leídos de este XML manejan diferentes Actividades de la aplicación. Actualmente, tengo llamado el "análisis sintáctico y la inicialización de propiedades" del onCreate() de mi actividad principal.Inicialización de la aplicación Android

Tengo algunas preguntas con respecto a este caso/enfoque:

  1. ¿Debo llamar al método de inicialización de aplicación del objeto de aplicación o es el actual enfoque correcto? ¿Qué desventajas/ tenemos/tendremos/tendremos si elijo invocarlo desde el objeto de aplicación ?

  2. ¿Realmente necesitamos una clase estática para almacenar las propiedades de la aplicación? ¿O podemos tener todas las propiedades como una variable de colección estática en el objeto de la aplicación?

  3. Analizar un XML (~ 200 nodos) en el tiempo de carga de la aplicación puede llevar algo de tiempo (no seguro cuánto tiempo tho); ¿Cómo puedo evitar los ANRs temidos? Estoy usando un Pull Parser.

Por favor ayuda para encontrar las respuestas a estas preguntas.

Gracias.

Respuesta

4

El objeto Application se utiliza para el intercambio de no persistente estado a través de la aplicación. No creo que deba usar una clase Application en absoluto. Puede realizar su inicialización en el método onCreate() del Activity que se llama primero.Para quote the documentation:

La subclase es opcional; la mayoría de las aplicaciones no necesitarán una. En ausencia de una subclase, Android usa una instancia de la clase de aplicación base.

No es necesario crear su propia clase para almacenar las propiedades de la aplicación. Esto se hace por usted al SharedPreferences.

También debería echar un vistazo a la clase setDefaultValues() method in the PreferenceManager ya que esto establecerá las preferencias de los datos en un archivo XML. Lo bueno de este método es que utiliza el parámetro readAgain para que el XML solo se analice una vez, la primera vez que inicie la aplicación, en lugar de hacerlo todo el tiempo.

10
  1. Depende de lo que está inicializando. La aplicación onCreate() se debe usar cuando se están haciendo cosas que deben hacerse antes de que cualquier parte de la aplicación funcione correctamente y solo se debe hacer una vez, mientras que Activity/Service/etc onCreate() se debe usar para las cosas que se necesitan para ese componente solo y debe hacerse varias veces.

    La principal preocupación que tengo para poner toda su inicialización en un componente es que dificultará la extensión de su aplicación más adelante. Supongamos que desea hacer que alguna Actividad en su aplicación sea accesible por intenciones externas; ahora tiene que mover el código de inicialización a la Aplicación o duplicar el código de inicialización en la Actividad no iniciadora.

  2. Parece que debe consultar SharedPreferences, especialmente PreferenceManager.getDefaultSharedPreferences(). Las preferencias se almacenarán entre sesiones y le brinda acceso fácil a propiedades simples desde cualquier contexto.

  3. Enhebrado. Encuentro que AsyncTask es la manera más fácil de realizar esta tarea; hay a good write-up on it at Google. Alternativamente, puede iniciar un servicio para hacer esto en segundo plano mientras tiene una actividad en primer plano para informar al usuario que está iniciando la aplicación.

Cuestiones relacionadas