Какова вероятность того, что переменная экземпляра singleton станет нулевой в приложении для Android при переключении между действиями? - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть одноэлементный, типичный дизайн со статическим «экземпляром» для хранения глобального состояния. Я замечаю, что иногда при переключении между действиями переменная mInstance становится нулевой и требует повторной обработки, в результате чего все данные становятся пустыми.

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

Код наклеен:

public class RuleManager extends ArrayAdapter<Rule>
{
  private static RuleManager mInstance;
  private final Context context;
  public RuleManager(Context context, List<Rule> r)
  {
    super(context,R.layout.main_menu_options_list_item);
    if(r==null)r=new ArrayList<Rule>();
    this.context=context;
  }

  public static RuleManager getInstance(Context context,List<Rule> r) 
  {
      if (mInstance == null)
          mInstance = new RuleManager(context, r);
      return mInstance;
  }   
}

Я только что узнал, что такое хранение контекста никогда не позволит собирать мусор и, следовательно, может вызвать большую утечку.

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Вам нужно сделать свой конструктор приватным. Я полагаю, вы можете вызывать новое в конструкторе. Также сделайте синхронизацию getInstance.

0 голосов
/ 29 февраля 2012

Услуга может быть лучше, чем Singleton, если вы хотите подключиться к LifeCycle. Вот дополнительная информация по связанному вопросу stackoverflow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...