Хорошо, Мой ответ не является специфическим для @Singleton of Guice , но если вы хотите создать класс, доступный во всех ваших действиях, тогда я думаю, вы должны использовать приложение класс Android. (Это мое личное мнение для твоей необходимости)
Способ сделать это - создать собственный подкласс android.app.Application
, а затем указать этот класс в теге приложения в манифесте . Теперь Android автоматически создаст экземпляр этого класса и сделает его доступным для всего вашего приложения. Вы можете получить к нему доступ из любого контекста, используя метод Context.getApplicationContext()
(Activity также предоставляет метод getApplication()
, который имеет точно такой же эффект):
class MyApp extends Application {
private String myState;
public String getState(){
return myState;
}
public void setState(String s){
myState = s;
}
}
class Blah extends Activity {
@Override
public void onCreate(Bundle b){
...
MyApp appState = ((MyApp)getApplicationContext());
String state = appState.getState();
...
}
}
По сути, это тот же эффект, что и при использовании статической переменной или синглтона, но довольно хорошо интегрируется в существующую платформу Android. Обратите внимание, что это не будет работать между процессами (если ваше приложение является одним из редких, в котором есть несколько процессов).
Вот хороший урок о том, как его использовать, Расширение класса приложения Android и работа с Singleton