单身人士实例的可能性有多大?'在活动之间切换时,变量在Android应用程序中变为空?

时间:2012-02-29 16:26:30

标签: android singleton

我有一个单独的,典型的设计,带有静态'mInstance'来保持全局状态。我注意到有时候,在活动之间切换时,mInstance变量变为null并需要重新实例化,导致所有数据都为空。

这是预期还是我做错了什么?在这种情况下,单例的静态变量是否真的有可能无效?我非常怀疑它,并希望听到一些意见。

代码被粘贴:

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 个答案:

答案 0 :(得分:1)

您需要将构造函数设为私有。我猜你可能会在构造函数上调用new。还要使getInstance同步。

答案 1 :(得分:0)

如果要挂入LifeCycle,服务可能比Singleton更好。 Here's来自相关stackoverflow问题的更多信息。