我相信我找到了我正在寻找的机器人答案。
戴维·史密斯提供作为文档中引用的“静态单”的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
来处理大量操作。