2015-09-15 10 views
5

Mi chiedo quali sono gli svantaggi per l'utilizzo di stringhe definite nei file java nel codice Android.In Android, esiste un motivo per utilizzare le risorse stringa per le stringhe che non verranno tradotte?

Mi piace usare semplici stringhe Java per cose che non sono stringhe visibili come ad es. nomi nei documenti XML che sto analizzando o chiavi per i bundle. Sembra essere una buona idea mantenere tutte quelle cose nel file java in cui vengono utilizzate invece di spostarle in un file XML e rendere il codice più complicato.

Tuttavia, vedo molti esempi di codice Android che sembrano mettere ogni stringa in un file di risorse.

Qual è il problema con le stringhe nei file java? Quali sono le ragioni per cui le persone non lo fanno? L'ho fatto nelle mie app e finora non ho riscontrato problemi.

Nota che sono a conoscenza del fatto che i file XML hanno un senso per le cose che devono essere tradotte. Questa domanda è per i casi in cui le stringhe rimangono le stesse.

Vorrei cercare di fare questa domanda più chiaro:

Esistono ragioni tranne:

  • perché è uno standard/migliori pratiche, ecc - la mia domanda è fondamentalmente: perché è un best practice, solo per i8n, o ci sono altri motivi?
  • Perché consente di utilizzare il framework delle risorse per la traduzione, stringhe dipendenti dal dispositivo ecc.
  • Perché consente di utilizzare caratteri non ASCII.
+0

Utilizzo: mTextView.setText ("ciao mondo"); è lo stesso di mTextView.setText (getResources(). getString (R.id.hello)); il fatto è che ... l'XML è davvero ben organizzato, può essere tradotto, può essere facilmente trovato e facilmente editabile ... solo quello. –

+0

Beh, no non è lo stesso ;-) Direi che mantenendo ad es. Le chiavi vicino a dove sono usate ha un senso. Prevenire la "soluzione diffusa". – treesAreEverywhere

+1

So che non è lo stesso ... ma se è qualcosa che userai solo una volta, potresti usarlo in quel modo. Dipende se lavori con una squadra o da solo, se solo ... ognuno conosce il suo casino: P –

risposta

1

In realtà, le buone pratiche sono una buona ragione per farlo, ma ce ne sono altre.

Ad esempio, una ragione che posso ricordare in questo momento è che strings.xml è codificato in UTF-8. Le stringhe con hardcoded non mostrano correttamente alcuni caratteri.

+0

Grazie, UTF-8 è una delle ragioni. Ma per cose come KEYS, che so essere ASCII, non sono sicuro che sia una ragione sufficiente. – treesAreEverywhere

3

La semplice risposta alla tua domanda è uno standard per mettere tutta la tua stringa in una risorsa. Inoltre ci sono molte ragioni per cui se si mantiene la stringa in file xml/java è necessario aggiornare ogni riferimento in questi file per una singola stringa.

per es. se vuoi cambiare "Ok" a "conferma" che sono usati in 5 file diversi devi cambiare in tutti quei 5 file ma per la risorsa String devi solo aggiornare un file che stringa.xml.

Modifica

Di seguito riportiamo alcuni dei motivi che dovremmo usare String.xml

1) Per aggiornare solo riferimento a più occorrenze. Come per @treesAreEverywhere Si può fare con public static String, ma richiederà la memoria all'avvio dell'applicazione e fino alla chiusura dell'applicazione. Ma String scritta in String.xml verrà caricata al momento dell'uso.

2) Supporto per più lingue. È possibile creare più cartelle di risorse linguistiche per supportare la propria applicazione in più lingue in modo che la lingua modificata utilizzando Locale verrà mantenuta dinamicamente dal sistema operativo in fase di esecuzione in base alla cartella delle risorse della lingua.

3) Si prega di verificare Localization documento che forniscono ulteriori informazioni sull'utilizzo String.xml

4) Corde non ingombrare il codice dell'applicazione, lasciando in chiaro e di facile manutenzione.

È una specie di standard di codifica come qualsiasi altra lingua. Ma puoi ignorarlo se vuoi e puoi creare il tuo codice con una variabile di stringa statica pubblica nel codice. Non è obbligatorio utilizzare String.xml ma è una buona pratica di codifica per usarlo. Buone pratiche come chiudere il blocco if con la paranesia contenente una singola affermazione piuttosto che lasciarla così com'è.

if(condition){ statement;) piuttosto che if(condition) statement;

+0

Siamo spiacenti, ma questo non risponde alla domanda. È possibile ottenere il raggruppamento anche nel codice Java con campi pubblici statici. Non sto dicendo che quello che scrivi sia sbagliato, ma volevo sapere perché è uno standard. – treesAreEverywhere

+0

Ogni lingua e ogni elemento ha il suo standard per scrivere, è lei che ha la scelta di non scrivere nel modo e creare il tuo codice disordinato. Puoi anche creare Screen design nel tuo file java ma android ha fornito i file xml per farlo. Riduce solo i costi generali e i problemi di memoria. Sono d'accordo che è possibile creare campi statici pubblici ma consumerà semplicemente la memoria dall'avvio dell'applicazione. Nel file String.xml, questo ID stringa verrà protetto nel file R.Java in modo che, quando necessario, venga caricato in xml o eseguendo il metodo getResource.getString (R.String.id).Sta a te scegliere quale opzione scegli –

+1

Ah, ok è interessante: "Riduce solo i costi generali e i problemi di memoria." .. Vorrebbe saperne di più su quella parte e se è un vero problema. – treesAreEverywhere

1

Lo scopo di strings.xml (e altri file * .xml di risorse) è quello di raggruppare valori simili in un unico luogo. Questo facilita la ricerca di valori che sarebbero altrimenti sepolti nel codice. Questi file di risorse rendono anche il maintainability migliore, poiché una modifica a un valore può avere effetti a livello di applicazione (come la modifica del titolo dell'app o del tema). Infine, come hai detto, fornisce una struttura per tradurre la tua app in altre lingue.

Se si sa che l'app non verrà tradotta e non verrà modificata, non è una cattiva idea eseguirne l'hard-code. Tuttavia, se pensi che la tua app avrà molti aggiornamenti, è meglio iniziare a utilizzare buone basi e utilizzare file di risorse XML.

Oltre a questi motivi ea quelli menzionati da @Zinc (che non sono a conoscenza e non posso confermare), non vi sono altri motivi per cui si desidera utilizzare i file di risorse XML.

Lo svantaggio dell'utilizzo di file di risorse è che in teoria è più lento e richiede un po 'più di memoria. Leggi android - strings.xml vs static constants e Does hard coding of string affect performance?

-1

Se si inseriscono tutte le stringhe correlate alla propria applicazione, è possibile implementare il tipo di applicazione I18N molto facilmente ed è molto utile durante l'esecuzione delle modifiche all'applicazione (acquisizione dell'azienda in un'altra azienda). È solo cambiare i nomi nei file xml. Non è necessario toccare alcun file java.

Problemi correlati