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