Tworzę aplikację na Androida, która używa usługi sieciowej do pobierania danych z serwera, w tym celu mam trzy różne zestawy adresów URL, które wskazują system rozwoju, serwer testowy i serwer na żywo. Trudno jest zmienić adres URL, gdy chcę oddać aplikację do testowania / opublikowania. więc planowałem uczynić go konfigurowalnym, aby aplikacja mogła uzyskać odpowiedni adres URL w oparciu o stałą konfiguracyjną typu kompilacji. Więc,
- jaki jest najlepszy sposób na zachowanie tych stałych, statycznej klasy java, publicznego interfejsu java lub pliku zasobów xml.? Kiedy? Czemu?
- co daje lepszą wydajność ?, Kiedy? Czemu?
Np. Zasób 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>
Stała statyczna 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"};
}
android
xml
configuration
constants
static-members
Jayabal
źródło
źródło
Odpowiedzi:
Istnieje duża różnica między nimi, ponieważ w układach XML można odwoływać się do zasobów projektu. Są dostępne w kontekście aplikacji i dlatego są dostępne w całej aplikacji globalnej. Największą zaletą korzystania z zasobów projektowych jest łatwość dostępu oraz to, że pozwalają one znacząco uporządkować projekt.
static final
stałe są wkompilowane w kod bajtowy java; zasoby projektu są kompilowane do formatu binarnego w ramach apk. Dostęp do jednego z nich jest niezwykle skuteczny ... jeśli jest między nimi różnica, jest co najwyżej trywialna.Nie ma ustalonej reguły, w jaki sposób należy używać zasobów / stałych w projekcie. To powiedziawszy, osobiście używam zasobów dla wartości, których mogę potrzebować w moim kodzie XML lub java. Z drugiej strony zwykle używam
static final
stałych dla wartości, które będą używane tylko przez mój kod Java i są specyficzne dla mojej implementacji.Należy również pamiętać, że możliwe jest ładowanie zasobów XML w czasie wykonywania w zależności od aktualnej konfiguracji urządzenia (tj. Rozmiaru ekranu, lokalizacji itp.). Dlatego powinieneś wziąć to pod uwagę przy podejmowaniu decyzji, czy powinieneś zadeklarować stałą w XML, czy bezpośrednio w swoich
.java
plikach.źródło
Dla ludzi, którzy chcą zobaczyć, jak możemy użyć Class do zdefiniowania naszych stałych i wywołać dowolne miejsce, w którym potrzebujemy.
Teraz możemy użyć powyższych stałych w następujący sposób.
źródło
W ogólnym przypadku:
źródło
Zawsze dobrze jest wyodrębnić ciągi znaków interfejsu użytkownika z kodu aplikacji i przechowywać je w pliku zewnętrznym. Android ułatwia to dzięki katalogowi zasobów w każdym projekcie systemu Android.
źródło
Myślę, że obie opcje wydają się dobre, ale rzecz jest taka, że zależy to od twoich wymagań.
Jeśli masz swoje wartości (łącze do usługi internetowej) w swoim XML i przypuszczasz, że nastąpiła jakakolwiek zmiana w Twoich wartościach (łącze do usługi internetowej), możesz łatwo zmienić tylko w pliku XML.
Ale jeśli używasz wewnątrz klas jako zmiennych statycznych, musisz zmienić wszystkie pliki klas.
Więc moja sugestia jest taka, aby oddzielić stałe od pliku źródłowego i umieścić je w zasobach i uzyskać do nich dostęp.
źródło
Cieszę się, że ktoś o to zapytał ... plus jeden!
Zasoby projektu wymagają dostępu do kontekstu, który nie jest dostępny w metodach statycznych (chyba że go przekażesz itp.), Ale zawsze jest dostępny w działaniu - wydaje się, że istnieje preferencyjne połączenie między zasobami a układami. Dla zmiennych aplikacji i stałych, które mogą być przetwarzane w metodach statycznych, tworzę klasę abstrakcyjną i wykonuję statyczny import (tej klasy stałych) we wszystkich innych plikach klas projektu.
PVS
źródło