2012-06-22 2 views
68

Sto sviluppando un'applicazione Android che utilizza il servizio Web per ottenere dati dal server, per questo ho tre diversi set di URL per indicare il sistema di sviluppo, il server di test e il server live. È difficile modificare l'URL ogni volta che voglio dare l'applicazione per il test/live. così ho programmato di renderlo configurabile, in modo che l'applicazione possa ottenere l'URL appropriato basandomi sulla costante di configurazione del tipo di build. Così,Quale è il modo migliore per definire le costanti in Android, sia di classe statica, che di interfaccia o risorsa xml?

  • che è il modo migliore per mantenere questo costanti, classe statica Java o interfaccia pubblica Java o file di risorse XML.? Quando? Perché?
  • che offre prestazioni migliori ?, Quando? Perché?

Es: risorsa xml

<integer name="config_build_type">0</integer> 
<string-array name="url_authentication"> 
    <item >http://development.com/xxxx</item> 
    <item >http://test.com/xxx</item> 
    <item >http://example.com/xxx</item> 
</string-array> 

Java statica costante

public class Config { 
    public static final int BUILD_TYPE = 0; // 0 - development, 1 - test, 2 - live 
    public static final String[] URL_AUTHENTICATION = {"http://development.com/", "http://test.com/", "http://example.com"}; 
} 
+1

dubito fortemente le prestazioni sarà un problema qui ... –

+0

chiama Sia Web Service è in classe singola o multipla di classe? – Venky

+0

@venky, che in più classi, ognuna per uno scopo diverso, ad esempio per l'autenticazione dell'utente, un'altra per scaricare dati e quindi .. – Jayabal

risposta

71

C'è una grande differenza tra i due in quanto è possibile fare riferimento alle risorse del progetto nei propri layout XML. Sono disponibili nel contesto dell'applicazione e sono quindi accessibili attraverso l'applicazione globale. I maggiori vantaggi dell'utilizzo delle risorse del progetto sono la facilità di accesso e consentono di organizzare in modo significativo il progetto.

static final le costanti sono compilate nel codice byte java; le risorse del progetto sono compilate in un formato binario all'interno dell'apk. L'accesso a entrambi è estremamente efficiente ... se c'è una differenza tra i due, è al massimo banale.

Non esiste una regola impostata su come utilizzare le risorse/costanti nel progetto. Detto questo, io personalmente uso risorse per valori che potrei aver bisogno di usare nel mio codice XML o java. D'altra parte, in genere utilizzo le costanti static final per i valori che saranno solo utilizzate dal mio codice java e sono specifiche per la mia implementazione.

Si noti inoltre che è possibile caricare risorse XML in fase di esecuzione in base alla configurazione corrente del dispositivo (ad esempio dimensioni dello schermo, impostazioni internazionali, ecc.). Pertanto dovresti tenerne conto al momento di decidere se dichiarare o meno la costante in XML o direttamente nei tuoi file .java.

+0

grazie Alex. per la risposta dettagliata. Le risorse – Jayabal

+0

sono molto più facili da configurare in diversi tipi di sapori/tipi di costruzione – HopefullyHelpful

+0

@Alex Ho un dubbio per favore, puoi cancellarlo: Si consiglia di usare le variabili statiche meno quindi se creiamo file costante con variabile statica non influirà sulle prestazioni della nostra applicazione? – Pallavi

8

In caso generale:

  • valori XML hanno il vantaggio di accessbilty nel file di layout e manifesta file su costanti nel file java
  • valori XML hanno il vantaggio per il supporto multi lingua sopra costanti nel file di java
+1

http://stackoverflow.com/questions/8380751/string-xml-or-constants-class –

+1

grazie u Dheeresh, ho capito, è molto utile mantenere la configurazione in xml a cui si accede da entrambi i layout, manifest e java – Jayabal

+0

sempre benvenuti ... :) –

0

Non penso che sta alla materia tanto per le prestazioni, ad essere onesti. Dipende principalmente dalle preferenze (preferisco usare una variabile statica nel codice).

Probabilmente è il modo migliore per farlo, dal momento che non devono essere letti da XML, ma in nessun modo sarebbe una differenza notevole. Ripeto, non noterai la differenza.

+0

grazie Geobits, per la sua risposta immediata. – Jayabal

1

Penso sia modo sembra essere buona, ma cosa è che dipende dalle vostre esigenze.

Se si dispone dei valori (collegamento del servizio Web) nel proprio XML e si suppone che vi siano cambiamenti nei valori (collegamento al servizio Web), è possibile modificare facilmente solo nel file XML.

Ma se si utilizzano le classi interne come variabili statiche, è necessario modificare tutti i file di classe.

Quindi il mio suggerimento è che le costanti separati da file di origine e messi in risorse e accedervi ..

0

Sono contento che qualcuno ha chiesto questo ... più uno!

Le risorse di progetto devono accedere al contesto, che non è disponibile in metodi statici (a meno che non lo si passi in ecc.), Ma sempre disponibile in Attività: sembra esserci una connessione preferenziale tra risorse e layout. Per le variabili e le costanti dell'app che possono essere elaborate in metodi statici, creo una classe astratta e faccio un'importazione statica (di questa classe di costanti) in tutti gli altri file di classe del progetto.

PVS

6

Per le persone che vogliono vedere come possiamo utilizzare una classe per definire i nostri costanti e chiamare qualsiasi in cui abbiamo bisogno.

Constant.java

package org.nrum.nrum; 

/** 
* Created by rajdhami on 5/23/2017. 
*/ 
public class Constant { 
    public static final String SERVER = "http://192.168.0.100/bs.dev/nrum"; 
// public static final String SERVER = "http://192.168.100.2/bs.dev/nrum"; 
    public static final String API_END = SERVER + "/dataProvider"; 
    public static final String NEWS_API = API_END + "/newsApi"; 
    public static final String BANNER_API = API_END + "/bannerApi/lists"; 
    public static final String NOTICE_API = API_END + "/noticeApi/lists"; 
    public static final String UPLOAD_PATH = SERVER + "/uploads"; 
    public static final String UPLOAD_PATH_BANNER = UPLOAD_PATH + "/company_1/banner"; 
    public static final String UPLOAD_PATH_NEWS = UPLOAD_PATH + "/company_1/news"; 
    public static final int BANNER_TRANSITION_DURATION = 5000; 
    public static final int NOTICE_BUTTON_BLINK_DURATION = 5000; 
    public static final int BANNER_FETCH_LIMIT = 3; 
} 

Ora possiamo usare soprattutto costanti nel modo seguente.

Constant.NOTICE_BUTTON_BLINK_DURATION 
+0

Le prestazioni sono buone? – Umar

Problemi correlati