哪个是在android中定义常量的最佳方法,静态类,接口或xml资源?

Jay*_*bal 90 xml configuration android constants static-members

我正在开发一个使用Web服务从服务器获取数据的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>
Run Code Online (Sandbox Code Playgroud)

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"};
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*ood 87

两者之间存在很大差异,因为您可以在XML布局中引用项目资源.它们在应用程序上下文中可用,因此可以在全局应用程序中访问.使用项目资源的最大优点是易于访问,并且它们允许您显着组织项目.

static final常量被编译成java字节码; 项目资源在apk中被编译成二进制格式.访问其中任何一个都是非常有效的...如果两者之间存在差异,则最多是微不足道的.

关于如何在项目中使用资源/常量,没有一套规则.也就是说,我个人使用资源来获取我可能需要在XML Java代码中使用的值.另一方面,我通常将static final常量用于由我的java代码使用的值,并且特定于我的实现.

另请注意,可以在运行时加载XML资源,具体取决于设备的当前配置(即屏幕大小,区域设置等).因此,在决定是否应该在XML中或直接在.java文件中声明常量时,应考虑到这一点.

  • 需要考虑的另外一点是,如果在多个类中使用最终常量,那么如果常量发生更改,则所有这些对象都需要重新编译。但如果常量作为资源存储,则情况并非如此。对于需要很长时间编译的大型项目,这可能是一个重要的考虑因素。 (2认同)

Mah*_*hen 17

对于那些想要了解我们如何使用Class来定义常量并调用任何我们需要的人的人.

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;
}
Run Code Online (Sandbox Code Playgroud)

现在我们可以按照以下方式使用上面的常量.

Constant.NOTICE_BUTTON_BLINK_DURATION
Run Code Online (Sandbox Code Playgroud)

  • 有人问最好的方法! (2认同)

Dhe*_*ngh 11

一般情况下:

  • XML值的优点是布局文件中的accessbilty和清单文件优于java文件中的常量
  • XML值对于Java文件中的常量的多语言支持具有优势