2010-11-17 10 views
6

Sono abbastanza nuovo nella programmazione Android/Java, quindi alcune delle cose di base sono ancora abbastanza confuse. Quindi, diciamo che la mia applicazione ottiene tutti i dati (articoli) richiesti da file XML esterni, li analizza in modelli di dati (classe Article) e quegli articoli saranno utilizzati (visualizzati in elenchi o singoli articoli) in tutta l'applicazione per tutto ciò che è ciclo vitale.Dove dovrei conservare globalmente/memorizzare i dati necessari per tutto il ciclo di vita delle applicazioni?

Dove dovrei tenerli? Posso creare una classe singleton con una matrice contenente tutti gli articoli che ho analizzato? O dovrei salvarli nel database e quindi interrogarlo su richiesta? (sembra troppo lavoro, non ho bisogno di metterli nella cache per ora) Qual è la migliore pratica qui?

risposta

2

Conservarli in Application. Questa è una classe base di qualsiasi applicazione Android ed è viva durante l'intero ciclo di vita dell'applicazione, mentre le attività vengono uccise quando non vengono mostrate o l'orientamento è cambiato.

si deve dichiarare android:name nel AndroidManifest.xml:

<application android:name=".YourApplication"/> 

Modificato:

Questo è anche rilevante: How do I pass data between Activities/Services within a single application?

+0

Questo non renderebbe la classe principale troppo disordinata? Soprattutto se conserverò più dati (array) e metodi dedicati alla gestione (aggiunta, modifica, ricerca) di quei dati. – sniurkst

+0

Questa è la tua decisione di progettazione. Sto solo dicendo che l'applicazione è accessibile da tutte le attività ed è il posto giusto dove archiviare i dati condivisi che sono legati al ciclo di vita delle applicazioni, non a un ciclo di vita delle attività. –

+0

È possibile inserire i dati direttamente in Applicazione oppure inserirli in una classe specializzata e avere un riferimento ad essa all'interno dell'applicazione. –

1

che dipende da quello che è il tuo stile di programmazione lol.

puoi come hai detto creare un singleton che leggerà il tuo xml e memorizzerà tutto.

puoi creare un hash statico nella tua classe. in questo modo quando crei un nuovo oggetto avrai accesso alle informazioni statiche di quella classe.

è possibile passare le informazioni da una classe all'altra come parametri.

se vuoi che ti dica quale sarebbe il migliore sarà difficile senza conoscere l'architettura del tuo programma.

Ad esempio, è possibile disporre di un controller di visualizzazione che gestisca eventuali modifiche e quindi è semplice memorizzare i dati a quel livello per passarlo quando si cambiano le visualizzazioni.

potresti avere viste statiche in cui puoi direttamente impostare tutti i valori mentre li apri.

si potrebbe avere losely collegato vista che chiamano l'un l'altro senza alcun controllore per gestire la commutazione e in tal caso si avrebbe potrebbero preferire avere un modo per raccogliere le informazioni necessarie da un singolo o un metodo statico ...

+0

Beh, idealmente, mi piacerebbe avere una classe che: sarebbe accessibile a tutte le attività, memorizzerebbe una serie di oggetti e sarebbe in grado di gestire quella matrice (aggiungere più oggetti, ottenere oggetti dalla sua posizione in serie o qualche tipo di proprietà) se questo rende la mia domanda più chiara. – sniurkst

0

Fintanto che ci si assicura che non ci siano thread che agiscono sui dati condivisi, è sufficiente creare una classe statica con membri statici. ogni attività sarà in grado di accedervi. Se si utilizza il download asincrono per i propri dati, in onPostExecute del gestore è possibile toccare GlobeVars perché viene eseguito sul thread dell'interfaccia utente.

public class GlobalVars { 
    public static String userId = "?"; 
    //public static String serverUrl = "10.0.2.2"; //localhost when developing 
    public static String serverUrl = "192.168.1.4"; //on device to laptop 
    //public static String serverUrl = "102.192.293.10"; //production 
    public static Book currentBook = null; 
    public static Chapter currentChapter = null; 
    public static int lastclickedChapter = -1; 
    public static Voice currentVoice = null; 
    public static String catalogJson = ""; 
    public static ArrayList<Book> catalogItems = null; 
} 

onCreate di MainActivity posso impostare il catalogo alla mia lista scaricata di XML convertita ad oggetti

GlobeVars.catalogItems = downloaded xml to object list 

nel mio subattività che è un elenco di capitoli in onclicklistener posso impostare:

GlobeVars.currentChapter = items[clickeditem]; 

quando si ritorna all'attività principale i valori saranno ancora impostati.

Problemi correlati