2015-01-31 3 views
0

Можно ли сделать операцию singleton? Я нашел много ресурсов, которые просто говорят использовать android:launchMode="singleInstance" или singleTask, но я бы хотел, чтобы конструктор вызывался только один раз.Предотвращение множественной инстанцирования активности

В идеале, я хотел бы иметь возможность указать собственный метод конструктора/строителя, например. getInstance()

+2

Это не то, как работает деятельность. Ресурсы, которые вы нашли, верны. – Rohit5k2

+0

Хорошо. Если это невозможно, есть ли способ добиться чего-то подобного? – Mak

+4

Хотя технически можно сделать любой класс синглом, деятельность является одним из худших кандидатов из-за его жизненного цикла. Извините, вы не избежите обработки жизненного цикла. Зачем тебе это нужно? –

ответ

2

Вы можете сохранить свои ссылки в Application вместо Activity. Класс приложения де-факто является одиночным. Вам нужно только определить свои методы доступа.

public class BaseApplication extends Application { 

    private static BaseApplication sInstance = null; 

    public synchronized static BaseApplication getInstance() { 
    return sInstance; 
    } 

    public synchronized static void setInstance(BaseApplication app) { 
    sInstance = app; 
    } 

    public BaseApplication() { 
    } 

    @Override 
    public void onCreate() { 
    super.onCreate(); 
    setInstance(this); 
} 

Теперь вы можете получить к нему доступ, позвонив по номеру BaseApplication.getInstance(). В качестве бонуса Application расширяет Context, поэтому теперь у вас есть ссылка на контекст приложения в любом месте (безопасно использовать практически везде, кроме раздувания макетов).

Не забудьте определить этот класс в качестве базового класса приложения в манифесте:

<application 
    android:name="com.yourapp.BaseApplication"> 
1

Обычно они делают следующим образом:

1) определить, что включают в себя Activity состояние

2) Сохранить состояние в onSaveInstanceState

3) Восстановление состояния в onCreate или в onRestoreInstanceState

Смежные вопросы