编辑/改进答案:
因为这个答案有点流行,我将改进我自己的答案与我最近使用的示例代码(截至2014年7月)。
首先让应用程序保持对自身的引用。
public class App extends Application {
private static App instance;
public static App get() { return instance; }
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
}
然后对任何需要访问上下文的单例我懒加载单线程在线程安全的方式使用双检查同步,这里解释http://stackoverflow.com/a/11165926/906362
private static SingletonDemo instance;
public static SingletonDemo get() {
if(instance == null) instance = getSync();
return instance;
}
private static synchronized SingletonDemo getSync() {
if(instance == null) instance = new SingletonDemo();
return instance;
}
private SingletonDemo(){
// here you can directly access the Application context calling
App.get();
}
原答案:
public class SingletonDemo {
private static SingletonDemo instance = null;
private SingletonDemo() { }
public static SingletonDemo getInstance() {
if (instance == null) {
instance = new SingletonDemo ();
}
return instance;
}
}
并在其中包括一个这样的方法:
private Context context;
init(Context context){
this.context = context.getApplicationContext();
}
并记住调用这个来初始化单例。
应用程序方法和Singleton方法之间的区别以及为什么Singleton更好的是在文档上以更模块化的方式具有相同的功能