Где хранить глобальные константы в приложении для Android?

Я бы знал, что является лучшей практикой для хранения глобальных констант, которые могут изменяться с environnement (debug, preprod, prod, release и т. д.) Во время компиляции.

в iOS я использовал, чтобы сохранить все глобальные константы в заголовочном файле и изменить его с помощью макроса pre-processor см. Этот ответ:

где хранить глобальные константы в приложении iOS?

какое решение я должен использовать для Android ?

4 ответов


создать константы-класс в папке базового пакета.

(или создать интерфейс вместо класса, поэтому нет необходимости ссылаться на класс каждый раз, однако это плохая практика из-за читабельности кода, но он будет работать)

Заполните его public static final значения.

Более того, оба class а также interface также может быть объявлено как abstract.


Если значения констант зависят от среды (плотность, локали и т. д.) тогда вы должны использовать ресурсы для их хранения (integer, string,dimen и т. д.).

в другом случае вы можете поместить свои глобальные константы в один файл (рекомендации - использовать префиксы для каждого набора констант) или поместить локальные константы в связанные классы (например, Intent содержит флаги. экстры, категории и так далее).


использовать public static final values. и держите их в отдельном файле java следующим образом:

    static String QC    = "http:/************";
    static String DEV   = "http:/************";
    static String CLOUD = "http:/************";


    static String SERVICEURL = CLOUD ; //Use this SERVICEURL in your code at run time

другим решением может быть использование файла ресурсов (если вы довольствуетесь хранением только строковых значений).

Это может использоваться для хранения констант, таких как учетная запись, которой управляет это приложение:

Ex. WelcomeActivity.java

AccountManager am = AccountManager.get(WelcomeActivity.this);
Account account = am.getAccountsByType(getResources().getString(R.string.ACCOUNT_TYPE))[0];

Ex. в res/значений/строк.в XML

<resources>
    <string name="ACCOUNT_NAME">com.acme.MyAccountSignature</string>
</resources>

Это также позволит вам изменить это без необходимости перекомпиляции (аналогично тому, как вы обычно отделяете переводы, которые строки.XML файла лучше всего использовать для).