2009-12-21 22 views
12

Possiedo un'applicazione guidata da un XML di configurazione: varie proprietà dell'app vengono caricate all'avvio dell'app analizzando XML e inizializzando le variabili statiche di alcune classi. I dati letti da questo XML attivano diverse attività dell'applicazione. Attualmente, ho chiamato "parsing e l'inizializzazione delle proprietà" da onCreate() della mia attività principale.Inizializzazione applicazione Android

Ho alcune domande per quanto riguarda questo caso/approccio:

  1. Devo richiamare il metodo di inizializzazione app dal Application Oggetto o è l'attuale approccio corretto? Quali vantaggi/ svantaggi fare/dovremmo ottenere/avere se scelgo di richiamarlo dall'oggetto applicazione ?

  2. Abbiamo davvero bisogno di una classe statica per memorizzare le proprietà delle app? Oppure possiamo avere tutte le proprietà come una variabile Collection statica nell'oggetto applicazione?

  3. l'analisi di un XML (~ 200 nodi) al momento del caricamento di app potrebbe richiedere un certo tempo (non sicuro quanto tempo tho); Come posso evitare i temuti ANR? Sto usando un parser .

Per favore aiutami a trovare le risposte a queste domande.

Grazie.

risposta

4

L'oggetto Application viene utilizzato per la condivisione di non persistente stato tra l'applicazione. Non penso che sarà necessario utilizzare una classe Application. È possibile eseguire l'inizializzazione nel metodo onCreate() dello Activity chiamato prima.A quote the documentation:

La sottoclasse è facoltativa; la maggior parte delle applicazioni non ne avrà bisogno. In assenza di una sottoclasse, Android utilizza un'istanza della classe Application di base.

Non è necessario creare una classe per memorizzare le proprietà dell'applicazione. Questo è fatto per te da SharedPreferences.

Si dovrebbe anche dare un'occhiata alla classe setDefaultValues() method in the PreferenceManager in quanto ciò imposterà le preferenze dai dati in un file XML. La cosa bella di questo metodo è che usa il parametro readAgain in modo che l'XML venga analizzato solo una volta - la prima volta che avvii l'applicazione - anziché ogni volta.

10
  1. Dipende da ciò che si sta inizializzando. L'applicazione onCreate() deve essere utilizzata quando si eseguono operazioni che devono essere eseguite prima che qualsiasi parte della propria app funzioni correttamente e deve essere eseguita una sola volta, mentre l'attività onCreate() di Activity/Service/etc deve essere utilizzata per le cose che sono necessarie per quel componente da solo e deve essere fatto più volte.

    La preoccupazione principale che ho per mettere tutta l'inizializzazione in un componente è che renderà più difficile estendere l'applicazione in seguito. Supponete di voler rendere accessibile alcune attività nella vostra applicazione da intenti esterni, ora dovete spostare il codice di inizializzazione su Applicazione o duplicare il codice di inizializzazione nell'attività non di avvio.

  2. Sembra che si dovrebbe verificare SharedPreferences, in particolare PreferenceManager.getDefaultSharedPreferences(). Le preferenze verranno memorizzate tra le sessioni e ti darà un facile accesso a proprietà semplici da qualsiasi contesto.

  3. Filettatura. Trovo che AsyncTask sia il modo più semplice per eseguire questa attività; c'è a good write-up on it at Google. In alternativa, puoi attivare un servizio per farlo in background mentre un'attività in primo piano informa l'utente che stai avviando l'app.

Problemi correlati