我想存儲活動之間的對象狀態(已考慮Parcelables,JSON,yadda yadda),但由於我有幾個單身人士,不妨參考他們在擴展應用程序的類中(模塊化+易於維護)。初始化靜態final變量聲明與初始化在Application.OnCreate()
所以我的問題,比方說,我有一個簡單單:
class SimpleSingleton
{
private static final SimpleSingleton instance; //The question will refer this line later.
public static SimpleSingleton getInstance()
{
return instance;
}
private SimpleSingleton(){}
}
1:起初我上面的類中創建的InitInstance()方法,如:
class SimpleSingleton
{
//... the code above
public static void initInstance()
{
if(instance == null) instance = new SimpleSingleton();
}
}
2 :因此,下面的工作,(其中,此後,我可以通過CustomSingleton.getInstance()
從任何活動中引用單身人士):
class MyApp extends Application
{
@Override
public void onCreate()
{
super.onCreate();
initSingletons();
}
protected void initSingletons()
{
SimpleSingleton.initInstance();
}
}
但是。如果我在SimpleSingleton類中聲明的
private static final SimpleSingleton instance = new SimpleSingleton();
代替
private static final SimpleSingleton instance;
?
我假設對象在編譯期間被初始化,所以這不會使整個#1和#2變得不必要?或者我的命令錯誤(特別是當這個類實際被初始化時)?我來自C#,目前正在爲Android開發,所以當我想引用我的單身人士時,這有點讓我快速陷入困境。另外,我問這個since according to this blog:
的怪異的行爲,我看到更有意義,我的解釋是,靜態變量實例綁定到第一次初始化它們的類的類加載器。
我認爲文章中有很多混淆,靜態變量實例確實綁定到類初始化它們的類加載器,也就是說,或者應該是單例類本身。 其實我更傾向於認爲作者在他的代碼中存在某種類型的錯誤,這使得單例實例會隨着時間的推移而變化,並且診斷出將另一個地方的變量實例化爲「有效」作爲解決方法。 我總是在android中使用單例,不需要在類本身以外的其他地方初始化它們,我從來沒有任何這樣的問題。 – Lake 2014-09-13 07:42:31