Statik sınıf, arayüz veya xml kaynağı olmak üzere android'de sabitleri tanımlamanın en iyi yolu hangisidir?


99

Sunucudan veri almak için web servisini kullanan bir android uygulaması geliştiriyorum, bunun için geliştirme sistemini, test sunucusunu ve canlı sunucuyu işaret etmek için üç farklı URL setine sahibim. Test / live için başvuru vermek istediğimde URL'yi değiştirmek zor. bu yüzden bunu yapılandırılabilir hale getirmeyi planladım, böylece uygulama, bana inşa türü yapılandırma sabitine göre uygun URL'yi alabilir. Yani,

  • bu sabitleri, java statik sınıfını veya java genel arabirimini veya xml kaynak dosyasını korumanın en iyi yolu hangisidir? Ne zaman? Neden?
  • hangisi daha iyi performans verir? Ne zaman? Neden?

Ör: xml kaynağı

<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 statik sabiti

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
Burada performansın bir sorun olacağından şüpheliyim ...
Alex Lockwood

Web Servis çağrıları tek sınıfta mı yoksa çoklu sınıfta mı?
Venky

@venky, birden fazla sınıfta, farklı amaçlar için .. indir verilerine kullanıcı kimlik birinin diğerinin yani ve bu yüzden
Jayabal

Yanıtlar:


93

XML düzenlerinizde proje kaynaklarına başvurabilmeniz bakımından ikisi arasında büyük bir fark vardır. Uygulama bağlamında mevcutturlar ve bu nedenle küresel uygulamada erişilebilirler. Proje kaynaklarını kullanmanın en büyük avantajı, erişim kolaylığı ve projenizi önemli ölçüde düzenlemenize izin vermesidir.

static finalsabitler java bayt kodunda derlenir; proje kaynakları, apk içinde ikili bir biçimde derlenir. Her ikisine de erişmek son derece etkilidir ... ikisi arasında bir fark varsa, en fazla önemsizdir.

Projenizde kaynakları / sabitleri nasıl kullanmanız gerektiğine dair belirlenmiş bir kural yoktur. Bununla birlikte, kaynakları XML veya java kodumda kullanmam gerekebilecek değerler için kişisel olarak kullanıyorum . Öte yandan, static finalsabitleri genellikle yalnızca java kodum tarafından kullanılacak ve uygulamama özgü değerler için kullanırım .

Ayrıca, cihazın mevcut yapılandırmasına (yani ekran boyutu, yerel ayar, vb.) Bağlı olarak çalışma zamanında XML kaynaklarını yüklemenin mümkün olduğunu unutmayın. Bu nedenle, sabiti XML olarak mı yoksa doğrudan .javadosyalarınızda mı beyan etmeniz gerektiğine karar verirken bunu dikkate almalısınız .


kaynakların farklı tatlarda / yapı türlerinde yapılandırılması çok daha kolay
HopefullyHelpful

@Alex Bir şüphem var, lütfen temizler misiniz? Statik değişkenlerin daha az kullanılması tavsiye edilir, bu nedenle statik değişkenli sabit dosya oluşturursak bu uygulamamızın performansını etkilemez mi?
Pallavi

2
Dikkate alınması gereken ek bir nokta da, birden çok sınıfta son bir sabit kullanılırsa, sabit değiştirilirse tüm bu nesnelerin yeniden derlenmesi gerekeceğidir. Ancak sabit bir kaynak olarak saklanırsa durum böyle değildir. Bu, derlemesi uzun süren büyük bir proje için önemli bir değerlendirme olabilir.
orodbhen

24

Sabitlerimizi tanımlamak ve ihtiyacımız olan herhangi bir yere çağrı yapmak için bir Sınıfı nasıl kullanabileceğimizi görmek isteyenler için.

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

Şimdi yukarıdaki sabitleri aşağıdaki şekilde kullanabiliriz.

Constant.NOTICE_BUTTON_BLINK_DURATION

1
En iyi şekilde soru soruldu !!
shadygoneinsane

@Umar Farklı farklı bir rol kullanmak istiyorum Farklı Farklı URL, lütfen yardım edin, ondan önce aynı urs gibi kullanıyordum
Kuldeep Singh

11

Genel durumda:

  • XML değerleri, java dosyasındaki Sabitlere göre mizanpaj dosyasında accessbilty ve manifest dosyasında erişim avantajına sahiptir.
  • XML değerleri, java dosyasındaki Sabitlere göre çoklu dil desteği avantajına sahiptir

1
Teşekkürler Dheeresh, ya anladım, yapılandırmayı hem düzenler, hem manifest hem de java tarafından erişilen
xml'de

2

UI dizelerini uygulama kodunuzdan ayıklamak ve bunları harici bir dosyada saklamak her zaman iyi bir uygulamadır. Android, her Android projesindeki kaynaklar dizini ile bunu kolaylaştırır.

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


Soru, yalnızca Java kodu tarafından dahili olarak kullanılacak sabitlerle ilgilidir. Farklı bir senaryo. Kullanıcı arayüzüne ait özel metin etiketleri durumu için, belirttiğiniz gibi, Android projesinin XML kaynakları olduğuna şüphe yok.
cesargastonec

2

Bence her iki yol da iyi görünüyor ama mesele şu ki, gereksinimlerinize bağlı.

XML'inizde değerleriniz (web servis bağlantısı) varsa ve değerinizde herhangi bir değişiklik olduğunu varsayarsanız (web servis bağlantısı), yalnızca XML dosyasında kolayca değiştirebilirsiniz.

Ancak, sınıfların içini statik değişkenler olarak kullanırsanız, tüm sınıf dosyalarında değişiklik yapmanız gerekir.

Bu yüzden benim önerim, sabitleri kaynak dosyadan ayırıp kaynağa koyup ona erişmenizdir ..


1
"sadece XML dosyasında kolayca değiştirebilirsiniz" Bir Java dosyasında değiştirmek kadar kolaydır ve her iki durumda da projeyi yeniden oluşturmanız gerekecek, bu yüzden bunun bir fark olduğunu düşünmüyorum, bir avantajı bir kenara bırakın.
Fran Marzoa

0

Birinin bunu sormasına sevindim ... artı bir!

Proje kaynaklarının, statik yöntemlerde bulunmayan (siz iletmediğiniz sürece), ancak her zaman Activity'de bulunan Bağlam'a erişmesi gerekir - kaynaklar ve düzenler arasında tercihli bir bağlantı var gibi görünüyor. Statik yöntemlerde işlenebilecek uygulama değişkenleri ve sabitleri için soyut bir sınıf oluşturuyorum ve diğer tüm proje sınıfı dosyalarında statik bir içe aktarma (bu sabitler sınıfından) yapıyorum.

PVS

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.