我相信我找到了我正在尋找的機器人答案。
戴維·史密斯提供作爲文檔中引用的「靜態單」的simple example上面指出:
public class CustomManager {
private static CustomManager sInstance;
public static CustomManager getInstance(Context context) {
if (sInstance == null) {
//Always pass in the Application Context
sInstance = new CustomManager(context.getApplicationContext());
}
return sInstance;
}
private Context mContext;
private CustomManager(Context context) {
mContext = context;
}
}
的Context
本身不會有助於CustomManager
的壽命 - 僅僅是因爲它的存在一個靜態單例本身的本質。如context.getApplicationContext()
(Xamarin Context.ApplicationContext
)所提供的Context
僅僅是訪問應用程序Context
的手段,如果單例需要它。
話雖這麼說,通過this SO question and its top two answers所闡述的,真正的問題是沒有這麼多如果,但是你要如何全局應用程序數據是一個單 - 的框架提供的Application
單的擴展,或者作爲另外,您創建的獨立單身人士可能會或可能不會使用前者。
就我而言,我認爲我很滿足於簡單地繼承Application
。在Application
類的某些變體中存儲應用程序數據更直觀。此外,我一般都會對OOP的某些問題感到擔心,所以我覺得使用已有的東西比自己創建單身更安全。這個單例是由框架管理的,所以雖然這不能保證從本質上歸結爲全局變量(boo hiss)的典型困境中獲得安全性,但至少它比我自己的更安全一些。
P.S. - re:使用在UI線程中運行的Application
,看起來使用靜態單例對我沒有任何額外的好處 - 再一次,因爲它們全部使用Application
。我想我可能會遵循here提供的建議,並使用AsyncTask
來處理大量操作。