хорошо большинство из нас знаком с этим рисунком:Приложение для Android Жизненного цикла и singelton
public class MySingeltone {
public String mSomeReferenceTypeData;
public int mSomeValueTypeData;
private static MySingeltone mInstance;
private MySingeltone() {
}
public static MySingeltone getInstance() {
if (mInstance == null) {
mInstance = new MySingeltone();
}
return mInstance;
}
}
моя проблема в том, что я нашел недавно, что mInstance не равен нулю после деятельности с использованием его были уничтожен или когда все приложения предполагают, чтобы быть пунктом, например:
public class SomeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MySingeltone mySingeltone = MySingeltone.getInstance();
mySingeltone.mSomeReferenceTypeData = "some value";
}
}
при запуске «SomeActivity» в следующий раз после закрытия целых приложений, запущенные действий (скажем, 10 секунд после того, как ..) mInstance все еще держит ту же ссылку, с те же значения на его полях.
Почему это происходит?
Что мне не хватает?
когда сборщик стальных элементов андроид-мусора относится к приложению?
Где вы проверяете, что синглтон - это тот же самый экземпляр? –
@Jazzy Josh: вы можете увидеть это просто, получив значение перед установкой нового.в моем примере это будет между методом getInstance, до следующей строки. просто нужно проверить, что он не равен нулю, потому что первый запуск значения будет по-прежнему нулевым. –
Я конкретно подразумеваю, где в приложении. Если ваша активность никогда не будет убита, вы перейдете с onStop на onRestart и onStart, а не пройдете onDestroy и будете убиты, а ваш Синглтон все равно будет жив. –