Переменные класса приложения не инициализируются в Android

Я создал приложение для Android, в котором я использую класс приложения для хранения и доступа к глобальным переменным. Но я столкнулся со странным поведением, когда все переменные в моем классе приложения не инициализируются в следующих сценариях:

  1. если мое приложение какое-то время простаивает (скажем, 10 минут или около того).
  2. если мое приложение переходит в фоновый режим (если над приложением открывается браузер).

Я много искал в SO и в Интернете и не нашел подходящего ответа. Насколько я знаю, после инициализации класса приложения он будет доступен на протяжении всего времени существования приложения. Я что-то упустил здесь?

Поскольку я новичок в разработке Android, возможно, я делаю что-то не так. Может ли кто-нибудь указать мне правильное направление? ... Заранее спасибо.

public class MyApp extends Application {

private MyClass classObj = new MyClass();
private boolean flagOne = true;
private boolean flagTwo = false;

void setFlagOne(boolean flag) {
    flagOne = flag;
}

boolean getFlagOne() {
    return flagOne;
}

void setFlagTwo(boolean flag) {
    flagTwo = flag;
}

boolean getFlagTwo() {
    return flagTwo;
}

void setMyClassObj(MyClass obj) {
    classObj = obj;
}

boolean getMyClassObj() {
    return classObj;
}
}

person akh    schedule 05.06.2014    source источник
comment
Насколько мне известно, после инициализации класса приложения он будет доступен на протяжении всего времени существования приложения. это верно для статического члена. Кстати, что вы подразумеваете под классом приложения?   -  person Blackbelt    schedule 05.06.2014
comment
Я имею в виду, что я использую класс, который расширяет класс приложения.   -  person akh    schedule 05.06.2014
comment
@blackbelt, так как я могу это исправить?   -  person akh    schedule 05.06.2014
comment
Как я могу знать, не видя кода?   -  person Blackbelt    schedule 05.06.2014
comment
Добавлен код @blackbelt...   -  person akh    schedule 05.06.2014
comment
Вы можете переопределить onCreate приложения и записать его вызывается, чтобы узнать, воссоздается ли приложение.   -  person Mister Smith    schedule 05.06.2014
comment
@MisterSmith да, приложение воссоздается   -  person akh    schedule 05.06.2014
comment
Если onCreate вызывается более одного раза, то каждый раз, когда он вызывается, это означает, что приложение было создано заново, и ваши переменные будут инициализированы до значений по умолчанию. Возможно, вам придется сохранить их, чтобы сохранить их состояние.   -  person Mister Smith    schedule 06.06.2014


Ответы (1)


Наконец-то я разобрался, сохранив состояние переменной, используя общие настройки, и сохранив объект в каталоге файлов приложения. Поэтому, если приложение воссоздается в любое время (иногда, если приложение переходит в фоновый режим), я восстанавливаю состояние переменных и считываю объект обратно. Таким образом, переменные не становятся неинициализированными в определенный момент времени.

Хранение значений,

SharedPreferences pref = getSharedPreferences("appstate", Context.MODE_PRIVATE);
Editor editor = pref.edit();
editor.putBoolean("flagone", flagOne);
editor.putBoolean("flagtwo", flagTwo);

Получение значений,

SharedPreferences pref = getSharedPreferences("appstate", Context.MODE_PRIVATE);
flagOne = pref.getBoolean("flagone", true);
flagTwo = pref.getBoolean("flagtwo", false);
person akh    schedule 10.06.2014
comment
то, что вы пытались, было умным способом получить глобальную переменную. Хотя это решение моей работы, но это не умный способ. Кстати, где обратный вызов onCreate() в вашем классе приложения. Я не знаю многого, но проверьте intridea.com/blog/2011/5/24/ это может быть полезно - person Shakeeb Ayaz; 10.06.2014
comment
@ShakeebAyaz В моем классе приложений уже есть обратный вызов onCreate(), извините, что не упомянул об этом в ответе. На самом деле я извлекаю все сохраненные значения из onCreate() в классе приложения. - person akh; 10.06.2014