web-dev-qa-db-fra.com

Quel est le meilleur moyen de définir des constantes dans Android, soit une classe statique, une interface ou une ressource xml?

Je développe une application Android qui utilise un service Web pour extraire des données d'un serveur. C'est pourquoi trois ensembles différents d'URL permettent de pointer le système de développement, le serveur de test et le serveur réel. C'est difficile pour changer d'URL chaque fois que je veux donner une application à testing/live. J'ai donc prévu de le rendre configurable, de sorte que l'application puisse obtenir l'URL appropriée en fonction de la constante de configuration de type de construction que je me propose.

  • quel est le meilleur moyen de conserver ces constantes, Java classe statique ou Java ou fichier de ressources xml.? Quand? Pourquoi?
  • qui donne de meilleures performances ?, Quand? Pourquoi?

Ex: ressource 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>

Constante statique Java

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"};
}
85
Jayabal

Il existe une grande différence entre les deux en ce sens que vous pouvez référencer des ressources de projet dans vos présentations XML. Ils sont disponibles dans le contexte de l'application et sont donc accessibles dans l'ensemble de l'application. Le principal avantage de l’utilisation des ressources du projet est la facilité d’accès, qui vous permet d’organiser votre projet de manière significative.

static final Les constantes sont compilées dans le bytecode Java; les ressources du projet sont compilées dans un format binaire dans l'apk. L'accès à l'une ou à l'autre est extrêmement efficace ... s'il y a une différence entre les deux, c'est au plus trivial.

Il n'y a pas de règle définie sur la manière dont vous devriez utiliser des ressources/constantes dans votre projet. Cela dit, j’utilise personnellement des ressources pour les valeurs que je pourrais avoir besoin d’utiliser dans mon code XML ou Java. Sur D'autre part, j'utilise généralement static final constantes pour les valeurs qui seulement seront utilisées par mon code Java) et sont spécifiques à mon implémentation.

Notez également qu'il est possible de charger des ressources XML au moment de l'exécution en fonction de la configuration actuelle du périphérique (taille de l'écran, paramètres régionaux, etc.). Vous devez donc en tenir compte lorsque vous décidez si vous devez ou non déclarer la constante en XML ou directement dans votre .Java des dossiers.

83
Alex Lockwood

Pour les personnes qui veulent voir comment nous pouvons utiliser une classe pour définir nos constantes et appeler n'importe où nous avons besoin.

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;
}

Nous pouvons maintenant utiliser les constantes ci-dessus de la manière suivante.

Constant.NOTICE_BUTTON_BLINK_DURATION
15
Mahen

En général:

  • Les valeurs XML ont l’avantage d’être accessbilty dans le fichier de présentation et le fichier manifeste par rapport aux constantes dans Java
  • Les valeurs XML présentent l’avantage de prendre en charge plusieurs langues par rapport aux constantes du fichier Java
10
Dheeresh Singh

Il est toujours recommandé d'extraire les chaînes de l'interface utilisateur de votre code d'application et de les conserver dans un fichier externe. Android facilite cette tâche avec un répertoire de ressources dans chaque projet Android.

http://developer.Android.com/training/basics/supporting-devices/languages.html

1
Samir Mangroliya

Je pense que les deux solutions semblent être bonnes, mais le fait est que cela dépend de vos besoins.

Si vous avez vos valeurs (lien de service Web) dans votre XML et supposez que vos valeurs changent (lien de service Web), vous pouvez facilement changer uniquement dans un fichier XML.

Mais si vous utilisez les classes internes comme variables statiques, vous devez les modifier dans tous les fichiers de classe.

Donc, ma suggestion est que séparer les constantes du fichier source et les mettre dans la ressource et y accéder ..

1
Venky

Je suis content que quelqu'un ait demandé ça ... plus un!

Les ressources de projet ont besoin d'accéder à Context, qui n'est pas disponible dans les méthodes statiques (sauf si vous le transmettez, etc.), mais toujours disponible dans Activity - il semble exister un lien préférentiel entre les ressources et les présentations. Pour les variables d'application et les constantes pouvant être traitées dans des méthodes statiques, je crée une classe abstraite et effectue une importation statique (de cette classe de constantes) dans tous les autres fichiers de classe de projet.

PVS

0
PVS

Pour être honnête, je ne pense pas que les performances soient très importantes. Cela vient surtout de préférence (je préfère utiliser une variable statique dans le code).

C'est probablement la manière la plus performante de le faire, car ils ne doivent pas nécessairement être lus à partir de XML, mais il n'y a aucun moyen que ce soit une différence notable. Je répète, vous ne remarquerez pas la différence.

0
Geobits