2012-06-22 7 views
68

Zajmuję się tworzeniem aplikacji na Androida, która korzysta z usługi sieciowej do pobierania danych z serwera, ponieważ mam trzy różne zestawy adresów URL, aby wskazać system programistyczny, serwer testowy i serwer na żywo. Trudno zmienić adres URL, gdy chcę złożyć wniosek o testowanie/na żywo. więc planowałem zrobić to jako konfigurowalne, aby aplikacja mogła uzyskać odpowiedni adres URL na podstawie stałej konfiguracji typu instalacji. WięcKtóry jest najlepszy sposób definiowania stałych w systemie Android, albo klasy statycznej, interfejsu lub zasobu xml?

  • co jest najlepszym sposobem, aby utrzymać to stałe, java klasa statyczna lub java interfejs publiczny lub plik zasobów xml.? Kiedy? Czemu?
  • co daje lepszą wydajność ?, Kiedy? Czemu?

Ex: 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> 

Java statyczna stałej

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"}; 
} 
+1

Bardzo wątpię, że wydajność będzie tu problemem ... –

+0

Niezależnie od tego, czy wywołania usługi Web Service mają jedną klasę czy wiele klas? – Venky

+0

@venky, że w wielu klasach, każdy w innym celu, np. Jeden do uwierzytelniania użytkownika inny do pobierania danych i tak .. – Jayabal

Odpowiedz

71

Istnieje duża różnica między nimi, ponieważ można odwoływać się do zasobów projektu w układach XML. Są one dostępne w kontekście aplikacji i dlatego są dostępne w globalnej aplikacji. Największe zalety korzystania z zasobów projektu to łatwość dostępu i pozwalają znacząco uporządkować projekt.

static final stałe są kompilowane do kodu bajtowego java; zasoby projektu są kompilowane do formatu binarnego w pakiecie APK. Dostęp do nich jest niezwykle skuteczny ... jeśli istnieje różnica między tymi dwoma, to najwyżej trywialne.

Nie ma ustalonej reguły określającej sposób korzystania z zasobów/stałych w projekcie. Powiedział, że osobiście używam zasobów dla wartości, które mogą być potrzebne w moim kodzie JavaScript XML lub. Z drugiej strony, zazwyczaj używam stałych static final dla wartości, które będą tylko używane 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 (np. Rozmiaru ekranu, ustawień regionalnych itp.). Powinieneś wziąć to pod uwagę przy podejmowaniu decyzji, czy powinieneś zadeklarować stałą w XML, czy bezpośrednio w swoich plikach .java.

+0

dziękuję u Alex. dla szczegółowej odpowiedzi. – Jayabal

+0

zasoby są dużo łatwiejsze do skonfigurowania w różnych typach smaków/kompilacji – HopefullyHelpful

+0

@Alex Mam jedną wątpliwość czy możesz to wyczyścić: Zaleca się używanie mniej zmiennych statycznych, więc jeśli utworzymy stały plik ze zmienną statyczną, to nie wpłynie to na wydajność naszej aplikacji? – Pallavi

8

W ogólnym przypadku:

  • wartości XML mają tę zaletę accessbilty w pliku układ i manifest plik przez stałe w pliku java
  • wartości XML mają przewagę na wsparcie wielu języków na stałe w pliku java
+1

http://stackoverflow.com/questions/8380751/string-xml-or-constants-class –

+1

dziękuję u Dheeresh, tak zrozumiałem, bardzo przydatne jest utrzymanie konfiguracji w xml, do której dostęp mają zarówno układy, manifest i java – Jayabal

+0

zawsze mile widziane ... :) –

0

Nie sądzę, to będzie większego znaczenia dla wydajności, aby być uczciwym. Zazwyczaj sprowadza się do preferencji (wolę używać zmiennej statycznej w kodzie).

Jest to prawdopodobnie najskuteczniejszy sposób na zrobienie tego, ponieważ nie trzeba ich odczytywać z XML, ale nie ma mowy, żeby to była zauważalna różnica. Powtarzam, nie zauważysz różnicy.

+0

dzięki Geobits, za natychmiastową odpowiedź. – Jayabal

1

myślę zarówno sposobem wydaje się być dobre, ale jest to, że to zależy od wymagań.

Jeśli posiadasz swoje wartości (link do usługi sieciowej) w swoim XML i przypuszczasz, że istnieje jakakolwiek zmiana wartości (link do usługi internetowej), możesz łatwo zmienić tylko w pliku XML.

Ale jeśli używasz wewnętrznych klas jako zmiennych statycznych, musisz zmienić we wszystkich plikach klas.

Więc moja propozycja jest taka, że ​​oddzielne stałe z pliku źródłowego i oddany do zasobów i dostęp do niego ..

0

Cieszę ktoś zapytał to ... plus jeden!

Zasoby projektu wymagają dostępu do kontekstu, który nie jest dostępny w statycznych metodach (chyba, że ​​je przekażesz itp.), Ale zawsze dostępny w działaniu - wydaje się, że istnieje preferencyjne połączenie między zasobami i układami. W przypadku zmiennych aplikacji i stałych, które mogą być przetwarzane w statycznych metodach, tworzę abstrakcyjną klasę i wykonuję statyczny import (tej klasy stałych) we wszystkich innych plikach klasy projektu.

PVS

6

Dla ludzi, którzy chcą zobaczyć, jak możemy użyć klasy zdefiniowanie naszych stałych i wywołać dowolną gdzie trzeba.

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; 
} 

Teraz możemy użyć powyżej stałych w następujący sposób.

Constant.NOTICE_BUTTON_BLINK_DURATION 
+0

Czy to dobry sposób na wydajność? – Umar

Powiązane problemy