Programing

정적 클래스, 인터페이스 또는 xml 리소스 중 하나 인 Android에서 상수를 정의하는 가장 좋은 방법은 무엇입니까?

lottogame 2020. 9. 14. 21:37
반응형

정적 클래스, 인터페이스 또는 xml 리소스 중 하나 인 Android에서 상수를 정의하는 가장 좋은 방법은 무엇입니까?


웹 서비스를 사용하여 서버에서 데이터를 가져 오는 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>

자바 정적 상수

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상수는 자바 바이트 코드로 컴파일됩니다. 프로젝트 리소스는 apk 내에서 바이너리 형식으로 컴파일됩니다. 둘 중 하나에 액세스하는 것은 매우 효율적입니다 ... 둘 사이에 차이가 있으면 기껏해야 사소합니다.

프로젝트에서 리소스 / 상수를 사용하는 방법에 대한 정해진 규칙이 없습니다. 즉, 저는 개인적으로 XML 또는 Java 코드 에서 사용해야하는 값에 리소스를 사용 합니다. 반면에 저는 일반적으로 Java 코드 에서만 사용하고 구현에 특정한 static final값에 상수를 사용합니다.

또한 장치의 현재 구성 (예 : 화면 크기, 로케일 등)에 따라 런타임에 XML 리소스를로드 할 수 있습니다. 따라서 상수를 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;
}

Now we can use above constants in following way.

Constant.NOTICE_BUTTON_BLINK_DURATION

In general case:

  • XML values have the advantage of accessbilty in layout file and manifest file over Constants in java file
  • XML values have the advantage for multi language support over Constants in java file

It’s always a good practice to extract UI strings from your app code and keep them in an external file. Android makes this easy with a resources directory in each Android project.

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


I think both way seems to be good but thing is that it depends on your requirements.

If you have your values(web service link) in your XML and suppose there is any change in your values(web service link) , you can easily change only in XML file.

But if you use inside classes as static variables you have to change in all class files.

So my suggestion is that separate constants from source file and put into resource and access it..


I am glad someone asked this ... plus one!

Project resources need access to Context, which is not available in static methods (unless you pass it in etc), but always available in Activity -- there seems to be a preferential connection between resources and layouts. For app variables and constants that may be processed in static methods I create an abstract class and do a static import (of this constants class) in all the other project class files.

PVS

참고URL : https://stackoverflow.com/questions/11150701/which-is-best-way-to-define-constants-in-android-either-static-class-interface

반응형