web-dev-qa-db-ja.com

静的クラス、インターフェース、またはxmlリソースのいずれかをAndroidで定数を定義する最良の方法はどれですか?

Webサービスを使用してサーバーからデータを取得するAndroidアプリケーションを開発しています。そのため、開発システム、テストサーバー、およびライブサーバーを指す3つの異なる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"};
}
85
Jayabal

XMLレイアウトでプロジェクトリソースを参照できるという点で、2つの間に大きな違いがあります。これらはアプリケーションコンテキストで使用できるため、グローバルアプリケーション全体でアクセスできます。プロジェクトリソースを使用する最大の利点は、アクセスが簡単であり、プロジェクトを大幅に整理できることです。

static final定数はJavaバイトコードにコンパイルされます。プロジェクトリソースは、apk内でバイナリ形式にコンパイルされます。どちらかにアクセスすることは非常に効率的です... 2つの間に違いがある場合、それはせいぜい些細なことです。

プロジェクトでリソース/定数をどのように使用すべきかについての決まったルールはありません。とは言っても、私は個人的にXMLで使用する必要がある値にリソースを使用していますまたは Javaコード。一方、通常は、Javaコードで使用されるonlyの値にstatic final定数を使用し、実装に固有です。

また、デバイスの現在の構成(画面サイズ、ロケールなど)に応じて、実行時にXMLリソースをロードできることに注意してください。そのため、定数をXMLで宣言するか、.Javaファイルで直接宣言するかを決定する際に、これを考慮する必要があります。

83
Alex Lockwood

クラスを使用して定数を定義し、必要な場所を呼び出す方法を確認したい人のために。

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
15
Mahen

一般的な場合:

  • XML値には、Javaファイルの定数よりも、レイアウトファイルとマニフェストファイルのアクセス可能性という利点があります。
  • XML値には、Javaファイルの定数よりも多言語サポートの利点があります
10
Dheeresh Singh

アプリコードからUI文字列を抽出し、外部ファイルに保存することは常に良い習慣です。 Androidは、各Androidプロジェクトのリソースディレクトリでこれを簡単にします。

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

1

どちらの方法も良いように思えますが、実はそれはあなたの要件に依存するということです。

XMLに値(Webサービスリンク)があり、値(Webサービスリンク)に変更があると仮定すると、XMLファイルでのみ簡単に変更できます。

ただし、内部クラスを静的変数として使用する場合は、すべてのクラスファイルを変更する必要があります。

つまり、ソースファイルから定数を分離し、リソースに入れてアクセスすることをお勧めします。

1
Venky

誰かがこれを聞いてくれてうれしい...プラス1!

プロジェクトリソースは、コンテキストにアクセスする必要があります。これは、静的メソッドでは利用できません(ただし、他に渡さない限り)が、アクティビティでは常に利用可能です-リソースとレイアウトの間には優先的な接続があるようです。静的メソッドで処理されるアプリ変数と定数については、抽象クラスを作成し、他のすべてのプロジェクトクラスファイルで(この定数クラスの)静的インポートを実行します。

PVS

0
PVS

正直に言うと、パフォーマンスにとってそれほど重要ではないと思います。それは主に設定に依存します(コードで静的変数を使用することを好みます)。

XMLから読み取る必要がないため、おそらくこれを実行する方がパフォーマンスに優れていますが、顕著な違いとなる方法はありません。繰り返しますが、違いに気付かないでしょう。

0
Geobits