Где хранить глобальные константы в приложении для Android?
Я бы знал, какая наилучшая практика для хранения глобальных констант, которые могут измениться с помощью среды (debug, preprod, prod, release и т.д.) во время компиляции.
В iOS я использовал все глобальные константы в файле заголовка и менял его с помощью макропроцессора, чтобы увидеть этот ответ:
Где хранить глобальные константы в приложении iOS?
Какое решение я должен использовать для Android?
Ответы
Ответ 1
Создайте константы класса в папке базового пакета.
(или создайте интерфейс вместо класса, чтобы не было необходимости ссылаться на класс каждый раз, однако это плохая практика из-за читаемости кода, но он будет работать)
Заполните его значениями public static final
.
Более того, как class
, так и interface
также могут быть объявлены как abstract
.
Ответ 2
Если значения ваших констант зависят от среды (плотность, локаль и т.д.), вы должны использовать ресурсы для их хранения (целое число, строка, размер и т.д.).
В другом случае вы можете поместить свои глобальные константы в один файл (лучшие практики - использовать префиксы для каждого набора констант) или поместить локальные константы в связанные классы (например, Intent содержит флаги, дополнения, категории и т.д.).
Ответ 3
Используйте 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
Ответ 4
Другим решением может быть использование файла ресурсов (если вы довольствуетесь сохранением только строковых значений).
Это можно использовать для хранения констант, таких как учетная запись, которой управляет это приложение:
Ex. WelcomeActivity.java
AccountManager am = AccountManager.get(WelcomeActivity.this);
Account account = am.getAccountsByType(getResources().getString(R.string.ACCOUNT_TYPE))[0];
Ex. RES/значения/strings.xml
<resources>
<string name="ACCOUNT_NAME">com.acme.MyAccountSignature</string>
</resources>
Это также позволит вам изменить это без необходимости перекомпиляции (аналогично тому, как вы обычно отделяете переводы, для которых лучше всего использовать файл strings.xml).