Какой лучший способ определить константы в android, либо статический класс, интерфейс или xml-ресурс?
Я разрабатываю приложение для android, которое использует веб-сервис для получения данных с сервера, для этого у меня есть три разных набора URL-адресов, чтобы указать систему разработки, тестовый сервер и живой сервер. Трудно изменить URL, когда я хочу дать приложение для тестирования/live. поэтому я планировал сделать его настраиваемым,чтобы приложение могло получить соответствующий URL-адрес на основе константы конфигурации типа сборки.
Итак,
- что является лучшим способом, чтобы сохранить эти константы, статический класс java или
открытый интерфейс java или xml-файл ресурсов.? когда? Зачем?
- что дает лучшую производительность?,когда? Зачем?
пример: 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
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"};
}
7 ответов:
существует большая разница между ними в том, что вы можете ссылаться на ресурсы проекта в своих XML-макетах. Они доступны в контексте приложения и поэтому доступны во всем глобальном приложении. Самые большие преимущества использования ресурсов проекта-это простота доступа и то, что они позволяют значительно организовать ваш проект.
static finalконстанты компилируются в байт-код Java; ресурсы проекта компилируются в двоичный формат в АПК. Доступ к любому из них чрезвычайно эффективен... если есть разница между ними, то она тривиальна в лучшем случае.нет установленного правила о том, как вы должны использовать ресурсы/константы в своем проекте. Тем не менее, я лично использую ресурсы для значений, которые мне могут понадобиться в моем XML или java-код. С другой стороны, я обычно использую
static finalконстанты для значений, которые будут только используйте мой java-код и специфичны для моего реализация.также обратите внимание, что можно загружать XML-ресурсы во время выполнения в зависимости от текущей конфигурации устройства (т. е. размер экрана, языковой стандарт и т. д.). Поэтому вы должны учитывать это при принятии решения о том, следует ли объявлять константу в XML или непосредственно в вашем
.javaфайлы.
для людей, которые хотят видеть, как мы можем использовать класс для определения наших констант и вызова любого, где нам нужно.
константы.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; }теперь мы можем использовать вышеуказанные константы следующим образом.
Constant.NOTICE_BUTTON_BLINK_DURATION
В общем случае:
- значения XML имеют преимущество accessbilty в файле макета и файле манифеста над константами в файле java
- значения XML имеют преимущество для поддержки нескольких языков над константами в java file
всегда рекомендуется извлекать строки пользовательского интерфейса из кода приложения и хранить их во внешнем файле. Android делает это легко с каталогом ресурсов в каждом проекте Android.
http://developer.android.com/training/basics/supporting-devices/languages.html
Я думаю, что обе вроде бы хорошо, но дело в том, что это зависит от ваших требований.
Если у вас есть ваши значения(ссылка на веб-службу) в вашем XML и предположим , что есть какие-либо изменения в ваших значениях(ссылка на веб-службу), вы можете легко изменить только в XML-файле.
но если вы используете внутри классов в качестве статических переменных, вы должны изменить все файлы классов.
поэтому я предлагаю отделить константы от исходного файла и поместить в ресурс и доступ к нему..
Я не думаю, что это очень важно для производительности, если честно. Это в основном сводится к предпочтению(я предпочитаю использовать статическую переменную в коде).
Это, вероятно, лучший способ сделать это, так как они не должны быть прочитаны из XML, но нет никакого способа, чтобы это было заметной разницей. Повторяю, вы не заметите разницы.
Я рад, что кто-то спросил Это ... плюс один!
ресурсы проекта нуждаются в доступе к контексту, который недоступен в статических методах (Если вы не передаете его в etc), но всегда доступен в Activity-кажется, существует предпочтительная связь между ресурсами и макетами. Для переменных и констант приложения, которые могут быть обработаны в статических методах, я создаю абстрактный класс и выполняю статический импорт (этого класса констант) во всех других классах проекта файлы.
PVS
Comments