在android中定义常量的最佳方式是静态类,接口还是xml资源?
我正在开发一个使用Web服务从服务器获取数据的Android应用程序,因为我有三个不同的URL指向开发系统,testing服务器和活服务器。 每当我想为应用程序提供testing/生活时,都很难更改URL。 所以我打算将其设置为可configuration的,以便应用程序可以根据我的构buildtypesconfiguration常量获取适当的URL。 所以,
- 这是保持这个常量,java静态类或java公共接口或xml资源文件的最好方法。 什么时候? 为什么?
- 哪个更好的performance呢, 什么时候? 为什么?
例如: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"}; }
两者之间有很大的不同,因为您可以在XML布局中引用项目资源。 它们在应用程序上下文中可用,因此可以在全局应用程序中访问。 使用项目资源的最大优点是易于访问,并且可以让您显着地组织项目。
static final
常量被编译成java字节码; 项目资源在apk中被编译成二进制格式。 访问是非常有效的…如果两者之间存在差异,则最多是微不足道的。
关于如何在项目中使用资源/常量没有一套规则。 也就是说,我个人使用资源来获取可能需要在我的XML 或 Java代码中使用的值。 另一方面,我通常使用static final
常量的值只能由我的java代码使用,并具体到我的实现。
另请注意,根据设备的当前configuration(即屏幕大小,区域设置等),可以在运行时加载XML资源。 所以在决定是否应该用XML或直接在.java
文件中声明常量时,应该考虑这一点。
一般情况下:
- XML值在布局文件和清单文件中的可访问性优于Java文件中的Constants
- 在java文件中,XML值的优点是对常量的多语言支持
对于那些想要了解我们如何使用一个类来定义我们的常量并在任何需要的地方调用的人来说。
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
从应用程序代码中提取UIstring并将它们保存在外部文件中总是一个好习惯。 Android使得每个Android项目中的资源目录都很简单。
http://developer.android.com/training/basics/supporting-devices/languages.html
我认为这两种方式似乎都是好的,但事情是取决于你的要求。
如果您的XML中有您的值(Web服务链接),并且假设您的值有任何更改(Web服务链接),则只能在XML文件中轻松更改。
但是,如果您将内部类用作静态variables,则必须在所有类文件中进行更改。
所以我的build议是从源文件单独的常量,并投入资源和访问它..
说实话,我认为这对于业绩来说并不重要。 它主要归结为偏好(我更喜欢在代码中使用静态variables)。
这可能是更好的执行方式,因为它们不需要从XML中读取,但是这不会有明显的差别。 我再说一遍,你不会注意到这个区别。
我很高兴有人问这个…加一个!
项目资源需要访问上下文,这在静态方法中是不可用的(除非你把它传递给它),但总是在Activity中可用 – 似乎资源和布局之间的优先连接。 对于可能在静态方法中处理的应用程序variables和常量,我创build了一个抽象类,并在所有其他项目类文件中执行一个静态导入(此常量类)。
PVS