Ich entwickle eine Android-Anwendung, die einen Webdienst verwendet, um Daten vom Server abzurufen. Dafür habe ich drei verschiedene URLs, die auf das Entwicklungssystem, den Testserver und den Live-Server verweisen. Es ist schwierig, die URL zu ändern, wenn ich eine Anwendung zum Testen / Live geben möchte. Daher wollte ich es konfigurierbar machen, damit die Anwendung eine geeignete URL basierend auf meiner Konfigurationskonstante für den Build-Typ erhalten kann. So,
- Was ist der beste Weg, um diese Konstanten, die statische Java-Klasse oder die öffentliche Java-Schnittstelle oder die XML-Ressourcendatei beizubehalten? Wann? Warum?
- Was ergibt eine bessere Leistung? Wann? Warum?
Beispiel: XML-Ressource
<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>
Statische Java-Konstante
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"};
}
android
xml
configuration
constants
static-members
Jayabal
quelle
quelle
Antworten:
Es gibt einen großen Unterschied zwischen den beiden, da Sie in Ihren XML-Layouts auf Projektressourcen verweisen können. Sie sind im Anwendungskontext verfügbar und daher für die gesamte globale Anwendung zugänglich. Die größten Vorteile der Verwendung von Projektressourcen sind der einfache Zugriff und die Möglichkeit, Ihr Projekt erheblich zu organisieren.
static final
Konstanten werden in den Java-Bytecode kompiliert; projektressourcen werden innerhalb der apk in ein binäres format kompiliert. Der Zugriff auf beide ist äußerst effizient. Wenn zwischen beiden ein Unterschied besteht, ist dies höchstens trivial.Es gibt keine festgelegte Regel, wie Sie Ressourcen / Konstanten in Ihrem Projekt verwenden sollen. Trotzdem verwende ich persönlich Ressourcen für Werte, die ich möglicherweise in meinem XML- oder Java-Code verwenden muss. Andererseits verwende ich normalerweise
static final
Konstanten für Werte, die nur von meinem Java-Code verwendet werden und für meine Implementierung spezifisch sind.Beachten Sie auch, dass es abhängig von der aktuellen Konfiguration des Geräts (z. B. Bildschirmgröße, Gebietsschema usw.) möglich ist, XML-Ressourcen zur Laufzeit zu laden. Sie sollten dies berücksichtigen, wenn Sie entscheiden, ob Sie die Konstante in XML oder direkt in Ihren
.java
Dateien deklarieren möchten.quelle
Für die Leute, die sehen wollen, wie wir eine Klasse verwenden können, um unsere Konstanten zu definieren und jede aufzurufen, wo wir sie brauchen.
Jetzt können wir die obigen Konstanten folgendermaßen verwenden.
quelle
Im allgemeinen Fall:
quelle
Es ist immer eine gute Praxis, UI-Zeichenfolgen aus Ihrem App-Code zu extrahieren und in einer externen Datei zu speichern. Android macht dies mit einem Ressourcenverzeichnis in jedem Android-Projekt einfach.
quelle
Ich denke, beides scheint gut zu sein, aber es hängt von Ihren Anforderungen ab.
Wenn Sie Ihre Werte (Webdienst-Link) in Ihrem XML haben und annehmen, dass sich Ihre Werte ändern (Webdienst-Link), können Sie diese nur in der XML-Datei problemlos ändern.
Wenn Sie jedoch innerhalb von Klassen statische Variablen verwenden, müssen Sie alle Klassendateien ändern.
Mein Vorschlag ist also, Konstanten von der Quelldatei zu trennen und in die Ressource zu stellen und darauf zuzugreifen.
quelle
Ich bin froh, dass jemand das gefragt hat ... plus eins!
Projektressourcen benötigen Zugriff auf den Kontext, der in statischen Methoden nicht verfügbar ist (es sei denn, Sie übergeben ihn usw.), aber immer in Aktivität verfügbar ist. Es scheint eine bevorzugte Verbindung zwischen Ressourcen und Layouts zu bestehen. Für App-Variablen und Konstanten, die in statischen Methoden verarbeitet werden können, erstelle ich eine abstrakte Klasse und führe einen statischen Import (dieser Konstantenklasse) in alle anderen Projektklassendateien durch.
PVS
quelle