我有一个单独的,典型的设计,带有静态'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;
}
}
我刚刚了解到,像这样存储上下文永远不会让它被垃圾收集,因此可能会导致大量泄漏。
答案 0 :(得分:1)
您需要将构造函数设为私有。我猜你可能会在构造函数上调用new。还要使getInstance同步。
答案 1 :(得分:0)
如果要挂入LifeCycle,服务可能比Singleton更好。 Here's来自相关stackoverflow问题的更多信息。