我會知道在編譯時存儲全局常量的最佳實踐是什麼,這些常量可以隨環境(調試,預生產,產品,發佈等)而改變。將全局常量存儲在Android應用程序中的位置?
在iOS中,我曾將一個頭文件中的所有全局常量,並與預處理器的宏更改看到這樣的回答:
Where to store global constants in an iOS application?
我應該使用什麼解決方案爲Android?
我會知道在編譯時存儲全局常量的最佳實踐是什麼,這些常量可以隨環境(調試,預生產,產品,發佈等)而改變。將全局常量存儲在Android應用程序中的位置?
在iOS中,我曾將一個頭文件中的所有全局常量,並與預處理器的宏更改看到這樣的回答:
Where to store global constants in an iOS application?
我應該使用什麼解決方案爲Android?
創建類在你的基地,包文件夾常數。
(或創建一個接口而不是類,所以沒有必要引用該類每次,然而這是bad practice由於代碼的可讀性,但它會工作)
與public static final
值填充它。
而且,無論是class
以及interface
也可以聲明爲abstract
。
如果您常量的值取決於環境(密度,區域等等),那麼你應該使用資源來保存它們(整數,字符串,捫等)。在另一種情況下,您可以將您的全局常量放在一個文件中(最佳實踐 - 爲每組常量使用前綴),或將相關類中的本地常量(例如,Intent保存標誌,額外值,類別等) 。
使用public static final values.
並將其保存在單獨的Java文件,如下所示:
static String QC = "http:/************";
static String DEV = "http:/************";
static String CLOUD = "http:/************";
static String SERVICEURL = CLOUD ; //Use this SERVICEURL in your code at run time
另一種解決辦法可能是使用的資源文件(如果你滿足於僅存儲字符串值)。
這可以用來存儲常量比如,這個應用程序管理帳戶:
例。 WelcomeActivity.java
AccountManager am = AccountManager.get(WelcomeActivity.this);
Account account = am.getAccountsByType(getResources().getString(R.string.ACCOUNT_TYPE))[0];
Ex。 RES /價值/ strings.xml中
<resources>
<string name="ACCOUNT_NAME">com.acme.MyAccountSignature</string>
</resources>
這也讓您修改,而無需重新編譯(類似如何你通常會脫鉤的翻譯,其中的strings.xml文件最適合使用)。
好吧,但我怎麼可以改變它在「編譯時」?例如,我不想存儲三次所有值(針對3種不同的環境),並且僅在需要時纔對所有值進行評論。 – klefevre 2013-02-25 12:57:24
有3種不同的環境,你的意思是項目?然後創建一個庫應用程序,在該應用程序中創建常量類,然後將其作爲庫添加到多個項目中。 – Nickolaus 2013-02-25 13:00:28
不,我的意思是3個環境,例如一個項目的debug,preprod或prod。例如,我想改變我的web服務API'http://prepod.xxx.com/ws','http://www.xxx'的基本URL(就像我在我的問題中引用的答案一樣)。 COM/WS',‘http://192.168.1.42/ws’只有1常數改變,如‘調試’,‘PREPROD’,‘PROD’ – klefevre 2013-02-25 13:07:22