Intereting Posts
Приложение Android для приостановки / возобновления музыки другого приложения музыкального плеера Как преодолеть Android Studio не может разрешить символ для классов Android EditText слишком медленно расширяется внутри AlertDialog на Android Студия Android getSlotFromBufferLocked: неизвестная ошибка буфера Android: Поверните анимацию, верните ее в реальное состояние после окончания анимации? Как сделать Android-приложение без использования Android Studio? Образ слайд-шоу в андроиде? «Bitmap.createScaledBitmap» преобразует 32-битное изображение в 24 бит? Как настроить размер кнопок в соответствии с размером экрана в Android Studio Запланированный будильник, чтобы повторять каждую минуту часов Как загрузить видео из папки с ресурсами? (Чтобы воспроизвести их с помощью VideoView) EditText: как включить / отключить ввод? Получение результатов от нескольких AsyncTasks Как использовать шрифт Roboto в android Project Проект не был создан из-за «Не удалось удалить» project / bin / classes / com ', "

Какой лучший способ определить константы в android, как статический класс, интерфейс, так и XML-ресурс?

Я разрабатываю приложение для Android, которое использует веб-службу для получения данных с сервера, потому что у меня есть три разных набора URL-адресов, чтобы указать систему разработки, тестовый сервер и живой сервер. Трудно изменить URL-адрес, когда я хочу подать заявку на тестирование / жить. Поэтому я планировал сделать его как настраиваемым, чтобы приложение могло получить соответствующий 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"}; } 

Solutions Collecting From Web of "Какой лучший способ определить константы в android, как статический класс, интерфейс, так и XML-ресурс?"

Существует большая разница между ними в том, что вы можете ссылаться на ресурсы проекта в своих XML-макетах. Они доступны в контексте приложения и поэтому доступны через глобальное приложение. Самыми большими преимуществами использования ресурсов проекта является простота доступа и что они позволяют значительно упорядочить проект.

static final константы скомпилированы в байт-код java; Ресурсы проекта скомпилированы в двоичный формат в apk. Доступ к одной из них чрезвычайно эффективен … если есть разница между ними, она не более чем тривиальна.

Существует не установленное правило о том, как вы должны использовать ресурсы / константы в своем проекте. Тем не менее, я лично использую ресурсы для значений, которые мне могут понадобиться использовать в моем XML или Java-коде. С другой стороны, я обычно использую static final константы для значений, которые будут использоваться только моим Java-кодом и специфичны для моей реализации.

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

В общем случае:

  • Значения XML имеют преимущество accessbilty в файле макета и файле манифеста над константами в java-файле
  • Значения XML имеют преимущество для поддержки нескольких языков над константами в java-файле

Для людей, которые хотят видеть, как мы можем использовать класс для определения наших констант и вызова любого, где нам нужно.

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 

Всегда полезно извлекать строки пользовательского интерфейса из вашего кода приложения и хранить их во внешнем файле. Android упрощает работу с каталогом ресурсов в каждом Android-проекте.

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

Я думаю, что оба способа кажутся хорошими, но дело в том, что это зависит от ваших требований.

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

Но если вы используете внутренние классы как статические переменные, вам нужно изменить во всех файлах классов.

Поэтому мое предложение состоит в том, что отдельные константы из исходного файла и помещаются в ресурс и доступ к нему.

Честно говоря, я не думаю, что это будет важно для производительности. В основном это зависит от предпочтения (я предпочитаю использовать статическую переменную в коде).

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

Я рад, что кто-то спросил об этом … плюс один!

Ресурсы проекта нуждаются в доступе к Контексту, который недоступен в статических методах (если вы не передаете его и т. Д.), Но всегда доступен в Activity – похоже, предпочтительное соединение между ресурсами и макетами. Для переменных приложения и констант, которые могут обрабатываться в статических методах, я создаю абстрактный класс и статический импорт (этого класса констант) во всех других файлах классов проекта.

PVS