Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单身人士的机会有多大;s';实例';在android应用程序中,在活动之间切换时变量变为null?_Android_Singleton - Fatal编程技术网

单身人士的机会有多大;s';实例';在android应用程序中,在活动之间切换时变量变为null?

单身人士的机会有多大;s';实例';在android应用程序中,在活动之间切换时变量变为null?,android,singleton,Android,Singleton,我有一个单一的、典型的设计,带有一个静态的“MinInstance”来保持全局状态。我注意到,有时在活动之间切换时,minInstance变量变为null,需要重新实例化,导致所有数据变为空 这是意料之中的还是我做错了什么?在这种情况下,单例的静态变量真的有可能为空吗?我对此表示严重怀疑,并希望听取一些意见 粘贴代码: public class RuleManager extends ArrayAdapter<Rule> { private static RuleManager

我有一个单一的、典型的设计,带有一个静态的“MinInstance”来保持全局状态。我注意到,有时在活动之间切换时,minInstance变量变为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;
  }   
}
公共类规则管理器扩展了ArrayAdapter
{
私有静态规则管理器;
私人最终语境;
公共规则管理器(上下文,列表r)
{
超级(上下文、右布局、主菜单、选项、列表项);
如果(r==null)r=newArrayList();
this.context=context;
}
公共静态规则管理器getInstance(上下文上下文,列表r)
{
if(minInstance==null)
MinInstance=新规则管理器(上下文,r);
回报率;
}   
}

我刚刚了解到,像这样存储上下文永远不会让它被垃圾收集,因此可能会导致大泄漏

您需要将构造函数设置为私有。我猜你可能在调用一个新的构造函数。还要使您的getInstance同步。

如果您想连接到生命周期中,服务可能比单例更好。有关stackoverflow问题的更多信息。

如果将单例实现为枚举,则不可能出错。请参阅@GrahamBorland粘贴代码。谢谢你的关心谢谢。我将实施这一点。如果你能告诉我“同步”会做什么,那就太好了。我才5天大,你应该读一下线程同步。但用几句话来说。因此,将有多个活动访问getInstance。这意味着(碰巧)如果有多个活动访问getInstance,您可能会得到两个singleton实例。Synchronized关键字确保此方法是关键部分。请仔细阅读java线程同步。是的,但我使用这个单例作为ListView的数据提供程序。我想我可以保留我在服务中的列表的备份。这是个好习惯吗?