Ответ 1
другое редактирование вопроса:
в последнее время (по большей части 2016 года и вперед), что я делал, и было бы моим предложением для любого разработчика сделать это как:
Используйте Dagger2, просто используйте кинжал 2. Где вам нужно Context
:
@Inject Context context;
и что он. В то время как на нем, добавьте все другие вещи, которые будут синглом.
отредактированный/улучшенный ответ:
потому что этот ответ становится популярным, я улучшу свой собственный ответ с примером кода того, что я использовал в последнее время (по состоянию на июль /2014).
Начните с того, что приложение сохраняет ссылку на себя.
public class App extends Application {
private static App instance;
public static App get() { return instance; }
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
}
тогда на любом одноэлементном узле, который нуждается в доступе к Context
, я ленив загружаю синглы в потоковом режиме, используя двойную проверку синхронизации, как описано здесь fooobar.com/questions/65513/...
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 и почему Синглтон лучше всего находится в документации same functionality in a more modular way